On Tue, 8 May 2018 17:44:46 +0100 Dave Martin <Dave.Martin@xxxxxxx> wrote: > There are a number of bits of code sprinkled around the kernel to > set a thread flag if a certain condition is true, and clear it > otherwise. > > To help make those call sites terser and less cumbersome, this > patch adds a new family of thread flag manipulators > > update*_thread_flag([...,] flag, cond) > > which do the equivalent of: > > if (cond) > set*_thread_flag([...,] flag); > else > clear*_thread_flag([...,] flag); > > Signed-off-by: Dave Martin <Dave.Martin@xxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Acked-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> -- Steve > Cc: Oleg Nesterov <oleg@xxxxxxxxxx> > --- > include/linux/sched.h | 6 ++++++ > include/linux/thread_info.h | 11 +++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/include/linux/sched.h b/include/linux/sched.h > index b3d697f..c2c3051 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -1578,6 +1578,12 @@ static inline void clear_tsk_thread_flag(struct task_struct *tsk, int flag) > clear_ti_thread_flag(task_thread_info(tsk), flag); > } > > +static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, > + bool value) > +{ > + update_ti_thread_flag(task_thread_info(tsk), flag, value); > +} > + > static inline int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag) > { > return test_and_set_ti_thread_flag(task_thread_info(tsk), flag); > diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h > index cf2862b..8d8821b 100644 > --- a/include/linux/thread_info.h > +++ b/include/linux/thread_info.h > @@ -60,6 +60,15 @@ static inline void clear_ti_thread_flag(struct thread_info *ti, int flag) > clear_bit(flag, (unsigned long *)&ti->flags); > } > > +static inline void update_ti_thread_flag(struct thread_info *ti, int flag, > + bool value) > +{ > + if (value) > + set_ti_thread_flag(ti, flag); > + else > + clear_ti_thread_flag(ti, flag); > +} > + > static inline int test_and_set_ti_thread_flag(struct thread_info *ti, int flag) > { > return test_and_set_bit(flag, (unsigned long *)&ti->flags); > @@ -79,6 +88,8 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int flag) > set_ti_thread_flag(current_thread_info(), flag) > #define clear_thread_flag(flag) \ > clear_ti_thread_flag(current_thread_info(), flag) > +#define update_thread_flag(flag, value) \ > + update_ti_thread_flag(current_thread_info(), flag, value) > #define test_and_set_thread_flag(flag) \ > test_and_set_ti_thread_flag(current_thread_info(), flag) > #define test_and_clear_thread_flag(flag) \ _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm