Messages in this thread | | | Date | Fri, 4 Feb 2022 18:48:13 +0000 | From | Catalin Marinas <> | Subject | Re: [PATCH v2 7/7] arm64: support PREEMPT_DYNAMIC |
| |
On Fri, Feb 04, 2022 at 03:05:57PM +0000, Mark Rutland wrote: > This patch enables support for PREEMPT_DYNAMIC on arm64, allowing the > preemption model to be chosen at boot time. > > Specifically, this patch selects HAVE_PREEMPT_DYNAMIC_KEY, so that each > preemption function is an out-of-line call with an early return > depending upon a static key. This leaves almost all the codegen up to > the compiler, and side-steps a number of pain points with static calls > (e.g. interaction with CFI schemes). This should have no worse overhead > than using non-inline static calls, as those use out-of-line trampolines > with early returns. > > For example, the dynamic_cond_resched() wrapper looks as follows (with > the first `B` being replaced with a `NOP` when the function is > disabled): > > | <dynamic_cond_resched>: > | bti c > | b <dynamic_cond_resched+0x10> > | mov w0, #0x0 // #0 > | ret > | mrs x0, sp_el0 > | ldr x0, [x0, #8] > | cbnz x0, <dynamic_cond_resched+0x8> > | paciasp > | stp x29, x30, [sp, #-16]! > | mov x29, sp > | bl <preempt_schedule_common> > | mov w0, #0x1 // #1 > | ldp x29, x30, [sp], #16 > | autiasp > | ret > > ... compared to the regular form of the function: > > | <__cond_resched>: > | bti c > | mrs x0, sp_el0 > | ldr x1, [x0, #8] > | cbz x1, <__cond_resched+0x18> > | mov w0, #0x0 // #0 > | ret > | paciasp > | stp x29, x30, [sp, #-16]! > | mov x29, sp > | bl <preempt_schedule_common> > | mov w0, #0x1 // #1 > | ldp x29, x30, [sp], #16 > | autiasp > | ret > > Since arm64 does not yet use the generic entry code, we must define our > own `sk_dynamic_irqentry_exit_cond_resched`, which will be > enabled/disabled by the common code in kernel/sched/core.c. All other > preemption functions and associated static keys are defined there. > > Note that PREEMPT_DYNAMIC is `def bool y`, so this will default to > enabled. > > Signed-off-by: Mark Rutland <mark.rutland@arm.com> > Cc: Ard Biesheuvel <ardb@kernel.org> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Frederic Weisbecker <frederic@kernel.org> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Joey Gouly <joey.gouly@arm.com> > Cc: Juri Lelli <juri.lelli@redhat.com> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Valentin Schneider <valentin.schneider@arm.com> > Cc: Will Deacon <will@kernel.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
| |