]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
asm-generic: Provide generic TIF infrastructure
authorThomas Gleixner <tglx@linutronix.de>
Mon, 8 Sep 2025 21:32:30 +0000 (23:32 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 17 Sep 2025 06:14:03 +0000 (08:14 +0200)
Common TIF bits do not have to be defined by every architecture. They can
be defined in a generic header.

That allows adding generic TIF bits without chasing a gazillion of
architecture headers, which is again a unjustified burden on anyone who
works on generic infrastructure as it always needs a boat load of work to
keep existing architecture code working when adding new stuff.

While it is not as horrible as the ignorance of the generic entry
infrastructure, it is a welcome mechanism to make architecture people
rethink their approach of just leaching generic improvements into
architecture code and thereby making it accumulatingly harder to maintain
and improve generic code. It's about time that this changes.

Provide the infrastructure and split the TIF space in half, 16 generic and
16 architecture specific bits.

This could probably be extended by TIF_SINGLESTEP and BLOCKSTEP, but those
are only used in architecture specific code. So leave them alone for now.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
arch/Kconfig
include/asm-generic/thread_info_tif.h [new file with mode: 0644]

index d1b4ffd6e085644defd780c1d3aaf6ac53a65055..c20df40a722048456451d2b1c19dacebc7cb58c1 100644 (file)
@@ -1730,6 +1730,10 @@ config ARCH_VMLINUX_NEEDS_RELOCS
          relocations preserved. This is used by some architectures to
          construct bespoke relocation tables for KASLR.
 
+# Select if architecture uses the common generic TIF bits
+config HAVE_GENERIC_TIF_BITS
+       bool
+
 source "kernel/gcov/Kconfig"
 
 source "scripts/gcc-plugins/Kconfig"
diff --git a/include/asm-generic/thread_info_tif.h b/include/asm-generic/thread_info_tif.h
new file mode 100644 (file)
index 0000000..ee3793e
--- /dev/null
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_GENERIC_THREAD_INFO_TIF_H_
+#define _ASM_GENERIC_THREAD_INFO_TIF_H_
+
+#include <vdso/bits.h>
+
+/* Bits 16-31 are reserved for architecture specific purposes */
+
+#define TIF_NOTIFY_RESUME      0       // callback before returning to user
+#define _TIF_NOTIFY_RESUME     BIT(TIF_NOTIFY_RESUME)
+
+#define TIF_SIGPENDING         1       // signal pending
+#define _TIF_SIGPENDING                BIT(TIF_SIGPENDING)
+
+#define TIF_NOTIFY_SIGNAL      2       // signal notifications exist
+#define _TIF_NOTIFY_SIGNAL     BIT(TIF_NOTIFY_SIGNAL)
+
+#define TIF_MEMDIE             3       // is terminating due to OOM killer
+#define _TIF_MEMDIE            BIT(TIF_MEMDIE)
+
+#define TIF_NEED_RESCHED       4       // rescheduling necessary
+#define _TIF_NEED_RESCHED      BIT(TIF_NEED_RESCHED)
+
+#ifdef HAVE_TIF_NEED_RESCHED_LAZY
+# define TIF_NEED_RESCHED_LAZY 5       // Lazy rescheduling needed
+# define _TIF_NEED_RESCHED_LAZY        BIT(TIF_NEED_RESCHED_LAZY)
+#endif
+
+#ifdef HAVE_TIF_POLLING_NRFLAG
+# define TIF_POLLING_NRFLAG    6       // idle is polling for TIF_NEED_RESCHED
+# define _TIF_POLLING_NRFLAG   BIT(TIF_POLLING_NRFLAG)
+#endif
+
+#define TIF_USER_RETURN_NOTIFY 7       // notify kernel of userspace return
+#define _TIF_USER_RETURN_NOTIFY        BIT(TIF_USER_RETURN_NOTIFY)
+
+#define TIF_UPROBE             8       // breakpointed or singlestepping
+#define _TIF_UPROBE            BIT(TIF_UPROBE)
+
+#define TIF_PATCH_PENDING      9       // pending live patching update
+#define _TIF_PATCH_PENDING     BIT(TIF_PATCH_PENDING)
+
+#ifdef HAVE_TIF_RESTORE_SIGMASK
+# define TIF_RESTORE_SIGMASK   10      // Restore signal mask in do_signal() */
+# define _TIF_RESTORE_SIGMASK  BIT(TIF_RESTORE_SIGMASK)
+#endif
+
+#endif /* _ASM_GENERIC_THREAD_INFO_TIF_H_ */