Hello, what is the interaction with https://lore.kernel.org/linuxppc-dev/f6c831c95f1171e0b82353e611485231482f3deb.1791975972.git.msucha...@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) <[email protected]> > --- > This patch is applicabe over > https://lore.kernel.org/all/961c058f3f3e03045552186c083a68a0fde3f43f.1791975972.git.msucha...@suse.de/ > > Changelog: > > V1 -> V2: > - Commit message updated > V1: https://lore.kernel.org/all/[email protected]/ > > 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 > >
