• Jisheng Zhang's avatar
    riscv: support PREEMPT_DYNAMIC with static keys · 4e90d052
    Jisheng Zhang authored
    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 99cf983c ("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: default avatarJisheng Zhang <jszhang@kernel.org>
    Reviewed-by: default avatarConor Dooley <conor.dooley@microchip.com>
    Link: https://lore.kernel.org/r/20230716164925.1858-1-jszhang@kernel.orgSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    4e90d052
preempt.h 2.38 KB