[PATCH V11 12/17] RISC-V: paravirt: pvqspinlock: Add nopvspin kernel parameter
Guo Ren
guoren at kernel.org
Sun Sep 17 08:03:30 PDT 2023
On Fri, Sep 15, 2023 at 2:05 PM Leonardo Bras <leobras at redhat.com> wrote:
>
> On Sun, Sep 10, 2023 at 04:29:06AM -0400, guoren at kernel.org wrote:
> > From: Guo Ren <guoren at linux.alibaba.com>
> >
> > Disables the qspinlock slow path using PV optimizations which
> > allow the hypervisor to 'idle' the guest on lock contention.
> >
> > Signed-off-by: Guo Ren <guoren at linux.alibaba.com>
> > Signed-off-by: Guo Ren <guoren at kernel.org>
> > ---
> > Documentation/admin-guide/kernel-parameters.txt | 2 +-
> > arch/riscv/kernel/qspinlock_paravirt.c | 13 +++++++++++++
> > 2 files changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> > index f75bedc50e00..e74aed631573 100644
> > --- a/Documentation/admin-guide/kernel-parameters.txt
> > +++ b/Documentation/admin-guide/kernel-parameters.txt
> > @@ -3857,7 +3857,7 @@
> > as generic guest with no PV drivers. Currently support
> > XEN HVM, KVM, HYPER_V and VMWARE guest.
> >
> > - nopvspin [X86,XEN,KVM]
> > + nopvspin [X86,XEN,KVM,RISC-V]
> > Disables the qspinlock slow path using PV optimizations
> > which allow the hypervisor to 'idle' the guest on lock
> > contention.
> > diff --git a/arch/riscv/kernel/qspinlock_paravirt.c b/arch/riscv/kernel/qspinlock_paravirt.c
> > index 85ff5a3ec234..a0ad4657f437 100644
> > --- a/arch/riscv/kernel/qspinlock_paravirt.c
> > +++ b/arch/riscv/kernel/qspinlock_paravirt.c
> > @@ -41,8 +41,21 @@ EXPORT_STATIC_CALL(pv_queued_spin_lock_slowpath);
> > DEFINE_STATIC_CALL(pv_queued_spin_unlock, native_queued_spin_unlock);
> > EXPORT_STATIC_CALL(pv_queued_spin_unlock);
> >
> > +static bool nopvspin;
>
> It is only used in init, so it makes sense to add __initdata.
>
> static bool nopvspin __initdata;
Okay.
>
> Other than that, LGTM:
> Reviewed-by: Leonardo Bras <leobras at redhat.com>
>
> Thanks!
> Leo
>
> > +static __init int parse_nopvspin(char *arg)
> > +{
> > + nopvspin = true;
> > + return 0;
> > +}
> > +early_param("nopvspin", parse_nopvspin);
> > +
> > void __init pv_qspinlock_init(void)
> > {
> > + if (nopvspin) {
> > + pr_info("PV qspinlocks disabled\n");
> > + return;
> > + }
> > +
> > if (num_possible_cpus() == 1)
> > return;
> >
> > --
> > 2.36.1
> >
>
--
Best Regards
Guo Ren
More information about the linux-riscv
mailing list