[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