* [PATCH V2] powerpc: Support for generic TIF bits
@ 2026-10-27 7:47 Mukesh Kumar Chaurasiya (IBM)
2026-10-27 11:24 ` Michal Suchánek
0 siblings, 1 reply; 3+ messages in thread
From: Mukesh Kumar Chaurasiya (IBM) @ 2026-10-27 7:47 UTC (permalink / raw)
To: maddy, mpe, npiggin, chleroy, ritesh.list, sshegde, bigeasy,
clrkwllms, rostedt, mkchauras, msuchanek, bwiedemann,
ryan.roberts, mchauras, agordeev, linuxppc-dev, linux-kernel,
linux-rt-devel
powerpc already uses GENERIC_ENTRY for the irq entry/exit path. That
means the generic entry code handles all the arch-independent
thread_info flags (TIF_SIGPENDING, TIF_NOTIFY_RESUME, TIF_NOTIFY_SIGNAL,
TIF_NEED_RESCHED, TIF_NEED_RESCHED_LAZY, TIF_UPROBE, TIF_PATCH_PENDING,
TIF_MEMDIE, TIF_RSEQ, TIF_HRTIMER_REARM, TIF_USER_RETURN_NOTIFY) on
behalf of the arch. The only remaining blocker was that powerpc defined
its own bit numbers for those flags, which conflicted with the layout
required by the common header include/asm-generic/thread_info_tif.h.
This patch selects HAVE_GENERIC_TIF_BITS and switches powerpc's
thread_info.h over to include <asm-generic/thread_info_tif.h> for the
arch-independent bits, using HAVE_TIF_NEED_RESCHED_LAZY to opt in to
the lazy-preemption flag. The powerpc-private bits (TIF_RESTORE_TM,
TIF_SINGLESTEP, TIF_RESTOREALL, TIF_NOERROR, TIF_EMULATE_STACK_STORE,
TIF_ELF2ABI, TIF_POLLING_NRFLAG, TIF_32BIT, TIF_SYSCALL_RET) are
renumbered to start at bit 16, which is the reserved range for arch use.
Enabling HAVE_GENERIC_TIF_BITS unlocks the following features that were
previously unavailable on powerpc because their Kconfig dependencies
could not be satisfied:
1. RSEQ_SLICE_EXTENSION (CONFIG_RSEQ_SLICE_EXTENSION)
Allows userspace to register an RSEQ critical section and request
a limited time-slice extension when the task is about to be
preempted. The kernel grants the extension (via the RSEQ shared
data ABI) so the critical section can complete, avoiding the
thundering-herd problem where many threads spin on the same
lock/resource after a preemption. This feature requires a
dedicated TIF_RSEQ bit, which only exists when HAVE_GENERIC_TIF_BITS
is set. Depends on: RSEQ && HIGH_RES_TIMERS && GENERIC_ENTRY &&
HAVE_GENERIC_TIF_BITS.
2. HRTIMER_REARM_DEFERRED (CONFIG_HRTIMER_REARM_DEFERRED)
Defers re-arming of the hrtimer interrupt to the return-to-user
path, using the dedicated TIF_HRTIMER_REARM bit. This avoids
redundant hrtimer_interrupt() invocations within the same tick
period and reduces latency jitter for high-resolution timer users
(e.g., PREEMPT_RT workloads, audio, real-time tasks). Depends on:
GENERIC_ENTRY && HAVE_GENERIC_TIF_BITS && HIGH_RES_TIMERS &&
SCHED_HRTICK.
3. Dedicated TIF_RSEQ flag (fast-path RSEQ handling)
Without HAVE_GENERIC_TIF_BITS, TIF_RSEQ falls back to aliasing
TIF_NOTIFY_RESUME, forcing the generic entry slow-path to run on
every return-to-user for all RSEQ-registered threads. With the
dedicated bit, the fast path can skip RSEQ work unless the flag
is actually set, reducing overhead in the common case.
4. TIF_USER_RETURN_NOTIFY
The generic bit for the user-return-notifier subsystem
(kernel/user-return-notifier.c). Used by KVM on x86 to lazily
restore guest MSRs; having the generic bit available means future
powerpc KVM work can use the same infrastructure.
The arch-specific bits that do not exist in the generic header retain
their private numbering in the powerpc-reserved range (bits 16+), so
no existing powerpc functionality is affected.
Tested on powerpc (POWER11 pSeries CONFIG_RSEQ=y +
CONFIG_RSEQ_SLICE_EXTENSION=y + CONFIG_HRTIMER_REARM_DEFERRED=y):
* tools/testing/selftests/rseq/ -- all tests pass (basic_test,
param_test, basic_percpu_ops_test, syscall_errors_test,
slice_test via run_timeslice_test.sh)
* tools/testing/selftests/timers/hrtimer-rearm.sh -- deferred=1
events observed; no new dmesg warnings
* Boot and basic workload testing shows no regression
Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>
---
This patch is applicabe over
https://lore.kernel.org/all/961c058f3f3e03045552186c083a68a0fde3f43f.1791975972.git.msuchanek@suse.de/
Changelog:
V1 -> V2:
- Commit message updated
V1: https://lore.kernel.org/all/20261021144453.232372-2-mkchauras@gmail.com/
arch/powerpc/Kconfig | 1 +
arch/powerpc/include/asm/thread_info.h | 36 +++++++++-----------------
2 files changed, 13 insertions(+), 24 deletions(-)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 7f7910f38a67..e5527b56159a 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -255,6 +255,7 @@ config PPC
select HAVE_FUNCTION_GRAPH_TRACER
select HAVE_FUNCTION_TRACER if !COMPILE_TEST && (PPC64 || (PPC32 && CC_IS_GCC))
select HAVE_GCC_PLUGINS
+ select HAVE_GENERIC_TIF_BITS
select HAVE_HARDLOCKUP_DETECTOR_ARCH if PPC_BOOK3S_64 && SMP
select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && HAVE_PERF_EVENTS_NMI
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (PPC_BOOK3S || PPC_8xx)
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
index 4b7ec1db3034..4df3f4b5bd56 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
@@ -93,44 +93,32 @@ void arch_setup_new_exec(void);
#endif /* __ASSEMBLER__ */
+#define HAVE_TIF_NEED_RESCHED_LAZY
+
+#include <asm-generic/thread_info_tif.h>
/*
* thread information flag bit numbers
*/
-#define TIF_SIGPENDING 1 /* signal pending */
-#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
-#define TIF_NOTIFY_SIGNAL 3 /* signal notifications exist */
-#define TIF_RESTORE_TM 5 /* need to restore TM FP/VEC/VSX */
-#define TIF_PATCH_PENDING 6 /* pending live patching update */
-#define TIF_SINGLESTEP 8 /* singlestepping active */
-#define TIF_NEED_RESCHED_LAZY 9 /* Scheduler driven lazy preemption */
-#define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */
-#define TIF_NOERROR 12 /* Force successful syscall return */
-#define TIF_NOTIFY_RESUME 13 /* callback before returning to user */
-#define TIF_UPROBE 14 /* breakpointed or single-stepping */
-#define TIF_EMULATE_STACK_STORE 16 /* Is an instruction emulation
+#define TIF_RESTORE_TM 16 /* need to restore TM FP/VEC/VSX */
+#define TIF_SINGLESTEP 17 /* singlestepping active */
+#define TIF_RESTOREALL 18 /* Restore all regs (implies NOERROR) */
+#define TIF_NOERROR 19 /* Force successful syscall return */
+#define TIF_EMULATE_STACK_STORE 20 /* Is an instruction emulation
for stack store? */
-#define TIF_MEMDIE 17 /* is terminating due to OOM killer */
#if defined(CONFIG_PPC64)
-#define TIF_ELF2ABI 18 /* function descriptors must die! */
+#define TIF_ELF2ABI 21 /* function descriptors must die! */
#endif
-#define TIF_POLLING_NRFLAG 19 /* true if poll_idle() is polling TIF_NEED_RESCHED */
-#define TIF_32BIT 20 /* 32 bit binary */
-#define TIF_SYSCALL_RET 21 /* syscall error value set */
+#define TIF_POLLING_NRFLAG 22 /* true if poll_idle() is polling TIF_NEED_RESCHED */
+#define TIF_32BIT 23 /* 32 bit binary */
+#define TIF_SYSCALL_RET 24 /* syscall error value set */
/* as above, but as bit values */
-#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
-#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
-#define _TIF_NEED_RESCHED_LAZY (1<<TIF_NEED_RESCHED_LAZY)
-#define _TIF_NOTIFY_SIGNAL (1<<TIF_NOTIFY_SIGNAL)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_32BIT (1<<TIF_32BIT)
#define _TIF_RESTORE_TM (1<<TIF_RESTORE_TM)
-#define _TIF_PATCH_PENDING (1<<TIF_PATCH_PENDING)
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
#define _TIF_RESTOREALL (1<<TIF_RESTOREALL)
#define _TIF_NOERROR (1<<TIF_NOERROR)
-#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
-#define _TIF_UPROBE (1<<TIF_UPROBE)
#define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE)
#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
--
2.56.0
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH V2] powerpc: Support for generic TIF bits
2026-10-27 7:47 [PATCH V2] powerpc: Support for generic TIF bits Mukesh Kumar Chaurasiya (IBM)
@ 2026-10-27 11:24 ` Michal Suchánek
2026-10-28 14:35 ` Mukesh Kumar Chaurasiya
0 siblings, 1 reply; 3+ messages in thread
From: Michal Suchánek @ 2026-10-27 11:24 UTC (permalink / raw)
To: Mukesh Kumar Chaurasiya (IBM)
Cc: maddy, mpe, npiggin, chleroy, ritesh.list, sshegde, bigeasy,
clrkwllms, rostedt, bwiedemann, ryan.roberts, mchauras, agordeev,
linuxppc-dev, linux-kernel, linux-rt-devel
Hello,
what is the interaction with
https://lore.kernel.org/linuxppc-dev/f6c831c95f1171e0b82353e611485231482f3deb.1791975972.git.msuchanek@suse.de/
Does it supersede this patch or should it be added on top of it?
Also does this one need the first patch of that series?
Thanks
Michal
On Tue, Oct 27, 2026 at 01:17:10PM +0530, Mukesh Kumar Chaurasiya (IBM) wrote:
> powerpc already uses GENERIC_ENTRY for the irq entry/exit path. That
> means the generic entry code handles all the arch-independent
> thread_info flags (TIF_SIGPENDING, TIF_NOTIFY_RESUME, TIF_NOTIFY_SIGNAL,
> TIF_NEED_RESCHED, TIF_NEED_RESCHED_LAZY, TIF_UPROBE, TIF_PATCH_PENDING,
> TIF_MEMDIE, TIF_RSEQ, TIF_HRTIMER_REARM, TIF_USER_RETURN_NOTIFY) on
> behalf of the arch. The only remaining blocker was that powerpc defined
> its own bit numbers for those flags, which conflicted with the layout
> required by the common header include/asm-generic/thread_info_tif.h.
>
> This patch selects HAVE_GENERIC_TIF_BITS and switches powerpc's
> thread_info.h over to include <asm-generic/thread_info_tif.h> for the
> arch-independent bits, using HAVE_TIF_NEED_RESCHED_LAZY to opt in to
> the lazy-preemption flag. The powerpc-private bits (TIF_RESTORE_TM,
> TIF_SINGLESTEP, TIF_RESTOREALL, TIF_NOERROR, TIF_EMULATE_STACK_STORE,
> TIF_ELF2ABI, TIF_POLLING_NRFLAG, TIF_32BIT, TIF_SYSCALL_RET) are
> renumbered to start at bit 16, which is the reserved range for arch use.
>
> Enabling HAVE_GENERIC_TIF_BITS unlocks the following features that were
> previously unavailable on powerpc because their Kconfig dependencies
> could not be satisfied:
>
> 1. RSEQ_SLICE_EXTENSION (CONFIG_RSEQ_SLICE_EXTENSION)
> Allows userspace to register an RSEQ critical section and request
> a limited time-slice extension when the task is about to be
> preempted. The kernel grants the extension (via the RSEQ shared
> data ABI) so the critical section can complete, avoiding the
> thundering-herd problem where many threads spin on the same
> lock/resource after a preemption. This feature requires a
> dedicated TIF_RSEQ bit, which only exists when HAVE_GENERIC_TIF_BITS
> is set. Depends on: RSEQ && HIGH_RES_TIMERS && GENERIC_ENTRY &&
> HAVE_GENERIC_TIF_BITS.
>
> 2. HRTIMER_REARM_DEFERRED (CONFIG_HRTIMER_REARM_DEFERRED)
> Defers re-arming of the hrtimer interrupt to the return-to-user
> path, using the dedicated TIF_HRTIMER_REARM bit. This avoids
> redundant hrtimer_interrupt() invocations within the same tick
> period and reduces latency jitter for high-resolution timer users
> (e.g., PREEMPT_RT workloads, audio, real-time tasks). Depends on:
> GENERIC_ENTRY && HAVE_GENERIC_TIF_BITS && HIGH_RES_TIMERS &&
> SCHED_HRTICK.
>
> 3. Dedicated TIF_RSEQ flag (fast-path RSEQ handling)
> Without HAVE_GENERIC_TIF_BITS, TIF_RSEQ falls back to aliasing
> TIF_NOTIFY_RESUME, forcing the generic entry slow-path to run on
> every return-to-user for all RSEQ-registered threads. With the
> dedicated bit, the fast path can skip RSEQ work unless the flag
> is actually set, reducing overhead in the common case.
>
> 4. TIF_USER_RETURN_NOTIFY
> The generic bit for the user-return-notifier subsystem
> (kernel/user-return-notifier.c). Used by KVM on x86 to lazily
> restore guest MSRs; having the generic bit available means future
> powerpc KVM work can use the same infrastructure.
>
> The arch-specific bits that do not exist in the generic header retain
> their private numbering in the powerpc-reserved range (bits 16+), so
> no existing powerpc functionality is affected.
>
> Tested on powerpc (POWER11 pSeries CONFIG_RSEQ=y +
> CONFIG_RSEQ_SLICE_EXTENSION=y + CONFIG_HRTIMER_REARM_DEFERRED=y):
>
> * tools/testing/selftests/rseq/ -- all tests pass (basic_test,
> param_test, basic_percpu_ops_test, syscall_errors_test,
> slice_test via run_timeslice_test.sh)
> * tools/testing/selftests/timers/hrtimer-rearm.sh -- deferred=1
> events observed; no new dmesg warnings
> * Boot and basic workload testing shows no regression
>
> Signed-off-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>
> ---
> This patch is applicabe over
> https://lore.kernel.org/all/961c058f3f3e03045552186c083a68a0fde3f43f.1791975972.git.msuchanek@suse.de/
>
> Changelog:
>
> V1 -> V2:
> - Commit message updated
> V1: https://lore.kernel.org/all/20261021144453.232372-2-mkchauras@gmail.com/
>
> arch/powerpc/Kconfig | 1 +
> arch/powerpc/include/asm/thread_info.h | 36 +++++++++-----------------
> 2 files changed, 13 insertions(+), 24 deletions(-)
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index 7f7910f38a67..e5527b56159a 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -255,6 +255,7 @@ config PPC
> select HAVE_FUNCTION_GRAPH_TRACER
> select HAVE_FUNCTION_TRACER if !COMPILE_TEST && (PPC64 || (PPC32 && CC_IS_GCC))
> select HAVE_GCC_PLUGINS
> + select HAVE_GENERIC_TIF_BITS
> select HAVE_HARDLOCKUP_DETECTOR_ARCH if PPC_BOOK3S_64 && SMP
> select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && HAVE_PERF_EVENTS_NMI
> select HAVE_HW_BREAKPOINT if PERF_EVENTS && (PPC_BOOK3S || PPC_8xx)
> diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
> index 4b7ec1db3034..4df3f4b5bd56 100644
> --- a/arch/powerpc/include/asm/thread_info.h
> +++ b/arch/powerpc/include/asm/thread_info.h
> @@ -93,44 +93,32 @@ void arch_setup_new_exec(void);
>
> #endif /* __ASSEMBLER__ */
>
> +#define HAVE_TIF_NEED_RESCHED_LAZY
> +
> +#include <asm-generic/thread_info_tif.h>
> /*
> * thread information flag bit numbers
> */
> -#define TIF_SIGPENDING 1 /* signal pending */
> -#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
> -#define TIF_NOTIFY_SIGNAL 3 /* signal notifications exist */
> -#define TIF_RESTORE_TM 5 /* need to restore TM FP/VEC/VSX */
> -#define TIF_PATCH_PENDING 6 /* pending live patching update */
> -#define TIF_SINGLESTEP 8 /* singlestepping active */
> -#define TIF_NEED_RESCHED_LAZY 9 /* Scheduler driven lazy preemption */
> -#define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */
> -#define TIF_NOERROR 12 /* Force successful syscall return */
> -#define TIF_NOTIFY_RESUME 13 /* callback before returning to user */
> -#define TIF_UPROBE 14 /* breakpointed or single-stepping */
> -#define TIF_EMULATE_STACK_STORE 16 /* Is an instruction emulation
> +#define TIF_RESTORE_TM 16 /* need to restore TM FP/VEC/VSX */
> +#define TIF_SINGLESTEP 17 /* singlestepping active */
> +#define TIF_RESTOREALL 18 /* Restore all regs (implies NOERROR) */
> +#define TIF_NOERROR 19 /* Force successful syscall return */
> +#define TIF_EMULATE_STACK_STORE 20 /* Is an instruction emulation
> for stack store? */
> -#define TIF_MEMDIE 17 /* is terminating due to OOM killer */
> #if defined(CONFIG_PPC64)
> -#define TIF_ELF2ABI 18 /* function descriptors must die! */
> +#define TIF_ELF2ABI 21 /* function descriptors must die! */
> #endif
> -#define TIF_POLLING_NRFLAG 19 /* true if poll_idle() is polling TIF_NEED_RESCHED */
> -#define TIF_32BIT 20 /* 32 bit binary */
> -#define TIF_SYSCALL_RET 21 /* syscall error value set */
> +#define TIF_POLLING_NRFLAG 22 /* true if poll_idle() is polling TIF_NEED_RESCHED */
> +#define TIF_32BIT 23 /* 32 bit binary */
> +#define TIF_SYSCALL_RET 24 /* syscall error value set */
>
> /* as above, but as bit values */
> -#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
> -#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
> -#define _TIF_NEED_RESCHED_LAZY (1<<TIF_NEED_RESCHED_LAZY)
> -#define _TIF_NOTIFY_SIGNAL (1<<TIF_NOTIFY_SIGNAL)
> #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
> #define _TIF_32BIT (1<<TIF_32BIT)
> #define _TIF_RESTORE_TM (1<<TIF_RESTORE_TM)
> -#define _TIF_PATCH_PENDING (1<<TIF_PATCH_PENDING)
> #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
> #define _TIF_RESTOREALL (1<<TIF_RESTOREALL)
> #define _TIF_NOERROR (1<<TIF_NOERROR)
> -#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
> -#define _TIF_UPROBE (1<<TIF_UPROBE)
> #define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE)
>
> #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
> --
> 2.56.0
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH V2] powerpc: Support for generic TIF bits
2026-10-27 11:24 ` Michal Suchánek
@ 2026-10-28 14:35 ` Mukesh Kumar Chaurasiya
0 siblings, 0 replies; 3+ messages in thread
From: Mukesh Kumar Chaurasiya @ 2026-10-28 14:35 UTC (permalink / raw)
To: Michal Suchánek
Cc: maddy, mpe, npiggin, chleroy, ritesh.list, sshegde, bigeasy,
clrkwllms, rostedt, bwiedemann, ryan.roberts, mchauras, agordeev,
linuxppc-dev, linux-kernel, linux-rt-devel
On Tue, Oct 27, 2026 at 12:24:37PM +0100, Michal Suchánek wrote:
> Hello,
>
> what is the interaction with
> https://lore.kernel.org/linuxppc-dev/f6c831c95f1171e0b82353e611485231482f3deb.1791975972.git.msuchanek@suse.de/
>
> Does it supersede this patch or should it be added on top of it?
>
Hey Michal,
This patch is applied on top of your patch.
> Also does this one need the first patch of that series?
>
I took your both patches and made my changes over it, so i guess yeah we
need both.
> Thanks
>
> Michal
>
Regards,
Mukesh
[...]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-28 14:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-27 7:47 [PATCH V2] powerpc: Support for generic TIF bits Mukesh Kumar Chaurasiya (IBM)
2026-10-27 11:24 ` Michal Suchánek
2026-10-28 14:35 ` Mukesh Kumar Chaurasiya
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®