Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1726763

Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function

From Waiman Long <longman@redhat.com>
Newsgroups linux.kernel
Subject Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function
Date 2017-09-05 16:10 +0200
Message-ID <ummI9-3Fq-3@gated-at.bofh.it> (permalink)
References <umm5s-38R-9@gated-at.bofh.it> <umm5t-38R-29@gated-at.bofh.it>
Organization Red Hat

Show all headers | View raw


On 09/05/2017 09:24 AM, Juergen Gross wrote:
> There are cases where a guest tries to switch spinlocks to bare metal
> behavior (e.g. by setting "xen_nopvspin" boot parameter). Today this
> has the downside of falling back to unfair test and set scheme for
> qspinlocks due to virt_spin_lock() detecting the virtualized
> environment.
>
> Make virt_spin_lock() a paravirt operation in order to enable users
> to select an explicit behavior like bare metal.
>
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
>  arch/x86/include/asm/paravirt.h       |  5 ++++
>  arch/x86/include/asm/paravirt_types.h |  1 +
>  arch/x86/include/asm/qspinlock.h      | 48 ++++++++++++++++++++++++-----------
>  arch/x86/kernel/paravirt-spinlocks.c  | 14 ++++++++++
>  arch/x86/kernel/smpboot.c             |  2 ++
>  5 files changed, 55 insertions(+), 15 deletions(-)
>
> diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
> index c25dd22f7c70..d9e954fb37df 100644
> --- a/arch/x86/include/asm/paravirt.h
> +++ b/arch/x86/include/asm/paravirt.h
> @@ -725,6 +725,11 @@ static __always_inline bool pv_vcpu_is_preempted(long cpu)
>  	return PVOP_CALLEE1(bool, pv_lock_ops.vcpu_is_preempted, cpu);
>  }
>  
> +static __always_inline bool pv_virt_spin_lock(struct qspinlock *lock)
> +{
> +	return PVOP_CALLEE1(bool, pv_lock_ops.virt_spin_lock, lock);
> +}
> +
>  #endif /* SMP && PARAVIRT_SPINLOCKS */
>  
>  #ifdef CONFIG_X86_32
> diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
> index 19efefc0e27e..928f5e7953a7 100644
> --- a/arch/x86/include/asm/paravirt_types.h
> +++ b/arch/x86/include/asm/paravirt_types.h
> @@ -319,6 +319,7 @@ struct pv_lock_ops {
>  	void (*kick)(int cpu);
>  
>  	struct paravirt_callee_save vcpu_is_preempted;
> +	struct paravirt_callee_save virt_spin_lock;
>  } __no_randomize_layout;
>  
>  /* This contains all the paravirt structures: we get a convenient
> diff --git a/arch/x86/include/asm/qspinlock.h b/arch/x86/include/asm/qspinlock.h
> index 48a706f641f2..fbd98896385c 100644
> --- a/arch/x86/include/asm/qspinlock.h
> +++ b/arch/x86/include/asm/qspinlock.h
> @@ -17,6 +17,25 @@ static inline void native_queued_spin_unlock(struct qspinlock *lock)
>  	smp_store_release((u8 *)lock, 0);
>  }
>  
> +static inline bool native_virt_spin_lock(struct qspinlock *lock)
> +{
> +	if (!static_cpu_has(X86_FEATURE_HYPERVISOR))
> +		return false;
> +

I think you can take the above if statement out as you has done test in
native_pv_lock_init(). So the test will also be false here.

As this patch series is x86 specific, you should probably add "x86/" in
front of paravirt in the patch titles.

Cheers,
Longman

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/4] make virt_spin_lock() a pvops function Juergen Gross <jgross@suse.com> - 2017-09-05 15:30 +0200
  [PATCH 3/4] paravirt: add virt_spin_lock pvops function Juergen Gross <jgross@suse.com> - 2017-09-05 15:30 +0200
    Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Peter Zijlstra <peterz@infradead.org> - 2017-09-05 16:00 +0200
      Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Juergen Gross <jgross@suse.com> - 2017-09-05 16:10 +0200
    Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Waiman Long <longman@redhat.com> - 2017-09-05 16:10 +0200
      Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Peter Zijlstra <peterz@infradead.org> - 2017-09-05 16:10 +0200
        Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Waiman Long <longman@redhat.com> - 2017-09-05 16:20 +0200
    Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Waiman Long <longman@redhat.com> - 2017-09-05 16:20 +0200
      Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Juergen Gross <jgross@suse.com> - 2017-09-05 16:20 +0200
        Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Waiman Long <longman@redhat.com> - 2017-09-05 16:30 +0200
          Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Waiman Long <longman@redhat.com> - 2017-09-05 16:40 +0200
            Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Juergen Gross <jgross@suse.com> - 2017-09-05 16:50 +0200
            Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Peter Zijlstra <peterz@infradead.org> - 2017-09-06 09:10 +0200
              Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Waiman Long <longman@redhat.com> - 2017-09-06 14:50 +0200
                Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Peter Zijlstra <peterz@infradead.org> - 2017-09-06 15:10 +0200
                Re: [PATCH 3/4] paravirt: add virt_spin_lock pvops function Waiman Long <longman@redhat.com> - 2017-09-06 15:20 +0200

csiph-web