Add tif_resched() which will be used as an accessor for TIF_NEED_RESCHED and TIF_NEED_RESCHED_LAZY. The intent is to force the caller to make an explicit choice of how eagerly they want a reschedule. This interface will be used almost entirely from core kernel code, so forcing a choice shouldn't be too onerous. Originally-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Signed-off-by: Ankur Arora <ankur.a.arora@xxxxxxxxxx> --- 1) Adding an enum for an interface that doesn't do all that much, seems to be overkill. This could have been an int/bool etc, but that seemed much less clear and thus more error prone. 2) Also there's no fallback path for architectures that don't define define TIF_NEED_RESCHD_LAZY. That's because arch support is easy to add (modulo ARCH_NO_PREEMPT, discussed in a different patch) so it will be simple to do that instead of thinking through what seemed like a slightly convoluted alternative model. --- include/linux/thread_info.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index 9ea0b28068f4..4eb22b13bf64 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h @@ -59,6 +59,27 @@ enum syscall_work_bit { #include <asm/thread_info.h> +#ifndef TIF_NEED_RESCHED_LAZY +#error "Arch needs to define TIF_NEED_RESCHED_LAZY" +#endif + +#define TIF_NEED_RESCHED_LAZY_OFFSET (TIF_NEED_RESCHED_LAZY - TIF_NEED_RESCHED) + +typedef enum { + RESCHED_eager = 0, + RESCHED_lazy = TIF_NEED_RESCHED_LAZY_OFFSET, +} resched_t; + +static inline int tif_resched(resched_t r) +{ + return TIF_NEED_RESCHED + r; +} + +static inline int _tif_resched(resched_t r) +{ + return 1 << tif_resched(r); +} + #ifdef __KERNEL__ #ifndef arch_set_restart_data -- 2.31.1