On Mon, Jul 17, 2023 at 12:49:25AM +0800, Jisheng Zhang wrote: > Currently, each architecture can support PREEMPT_DYNAMIC through > either static calls or static keys. To support PREEMPT_DYNAMIC on > riscv, we face three choices: > > 1. only add static calls support to riscv > As Mark pointed out in commit 99cf983cc8bc ("sched/preempt: Add > PREEMPT_DYNAMIC using static keys"), static keys "...should have > slightly lower overhead than non-inline static calls, as this > effectively inlines each trampoline into the start of its callee. This > may avoid redundant work, and may integrate better with CFI schemes." > So even we add static calls(without inline static calls) to riscv, > static keys is still a better choice. > > 2. add static calls and inline static calls to riscv > Per my understanding, inline static calls requires objtool support > which is not easy. > > 3. use static keys > > While riscv doesn't have static calls support, it supports static keys > perfectly. So this patch selects HAVE_PREEMPT_DYNAMIC_KEY to enable > support for PREEMPT_DYNAMIC on riscv, so that the preemption model can > be chosen at boot time. It also patches asm-generic/preempt.h, mainly > to add __preempt_schedule() and __preempt_schedule_notrace() macros > for PREEMPT_DYNAMIC case. Other architectures which use generic > preempt.h can also benefit from this patch by simply selecting > HAVE_PREEMPT_DYNAMIC_KEY to enable PREEMPT_DYNAMIC if they supports > static keys. > > Signed-off-by: Jisheng Zhang <jszhang@xxxxxxxxxx> > --- > since v1: > - keep Kconfig entries sorted > - group asm-generic modifications under CONFIG_PREEMPT_DYNAMIC && > CONFIG_HAVE_PREEMPT_DYNAMIC_KEY) > > arch/riscv/Kconfig | 1 + > include/asm-generic/preempt.h | 14 +++++++++++++- > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index 4c07b9189c86..686df6902947 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -130,6 +130,7 @@ config RISCV > select HAVE_PERF_REGS > select HAVE_PERF_USER_STACK_DUMP > select HAVE_POSIX_CPU_TIMERS_TASK_WORK > + select HAVE_PREEMPT_DYNAMIC_KEY if !XIP_KERNEL Had a go of this, and it seems fine to me, as do the asm-generic bits seem fine from a single arch perspective. Reviewed-by: Conor Dooley <conor.dooley@xxxxxxxxxxxxx> Thanks, Conor.
Attachment:
signature.asc
Description: PGP signature