| From: Zefan Li <lizefan@huawei.com> |
| Date: Thu, 25 Sep 2014 09:40:40 +0800 |
| Subject: sched: add macros to define bitops for task atomic flags |
| |
| commit e0e5070b20e01f0321f97db4e4e174f3f6b49e50 upstream. |
| |
| This will simplify code when we add new flags. |
| |
| v3: |
| - Kees pointed out that no_new_privs should never be cleared, so we |
| shouldn't define task_clear_no_new_privs(). we define 3 macros instead |
| of a single one. |
| |
| v2: |
| - updated scripts/tags.sh, suggested by Peter |
| |
| Cc: Ingo Molnar <mingo@kernel.org> |
| Cc: Miao Xie <miaox@cn.fujitsu.com> |
| Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> |
| Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Acked-by: Kees Cook <keescook@chromium.org> |
| Signed-off-by: Zefan Li <lizefan@huawei.com> |
| Signed-off-by: Tejun Heo <tj@kernel.org> |
| [lizf: Backported to 3.4: |
| - adjust context |
| - remove no_new_priv code |
| - add atomic_flags to struct task_struct] |
| [bwh: Backported to 3.2: |
| - Drop changes in scripts/tags.sh |
| - Adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/include/linux/sched.h |
| +++ b/include/linux/sched.h |
| @@ -1313,6 +1313,8 @@ struct task_struct { |
| unsigned sched_reset_on_fork:1; |
| unsigned sched_contributes_to_load:1; |
| |
| + unsigned long atomic_flags; /* Flags needing atomic access. */ |
| + |
| pid_t pid; |
| pid_t tgid; |
| |
| @@ -1844,6 +1846,18 @@ extern void thread_group_times(struct ta |
| #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) |
| #define used_math() tsk_used_math(current) |
| |
| +/* Per-process atomic flags. */ |
| + |
| +#define TASK_PFA_TEST(name, func) \ |
| + static inline bool task_##func(struct task_struct *p) \ |
| + { return test_bit(PFA_##name, &p->atomic_flags); } |
| +#define TASK_PFA_SET(name, func) \ |
| + static inline void task_set_##func(struct task_struct *p) \ |
| + { set_bit(PFA_##name, &p->atomic_flags); } |
| +#define TASK_PFA_CLEAR(name, func) \ |
| + static inline void task_clear_##func(struct task_struct *p) \ |
| + { clear_bit(PFA_##name, &p->atomic_flags); } |
| + |
| /* |
| * task->jobctl flags |
| */ |