[RFC PATCH 34/86] thread_info: accessors for TIF_NEED_RESCHED*
From: Ankur Arora
Date: Tue Nov 07 2023 - 17:15:55 EST
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