From: Zhenzhong Duan <zhenzhong.duan@oracle.com>
To: Sasha Levin <sashal@kernel.org>
Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de,
mingo@kernel.org, bp@alien8.de, hpa@zytor.com,
boris.ostrovsky@oracle.com, jgross@suse.com,
sstabellini@kernel.org, peterz@infradead.org,
srinivas.eeda@oracle.com, Waiman Long <longman@redhat.com>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Stephen Hemminger <sthemmin@microsoft.com>,
Ingo Molnar <mingo@redhat.com>,
linux-hyperv@vger.kernel.org
Subject: Re: [PATCH v2 6/7] locking/spinlocks, paravirt, hyperv: Correct the hv_nopvspin case
Date: Fri, 28 Jun 2019 08:53:00 +0800 [thread overview]
Message-ID: <eaeb5e52-5fa8-20c9-bc5c-090572718511@oracle.com> (raw)
In-Reply-To: <20190627222851.GC11506@sasha-vm>
On 2019/6/28 6:28, Sasha Levin wrote:
> On Mon, Jun 24, 2019 at 08:02:58PM +0800, Zhenzhong Duan wrote:
>> With the boot parameter "hv_nopvspin" specified a Hyperv guest should
>> not make use of paravirt spinlocks, but behave as if running on bare
>> metal. This is not true, however, as the qspinlock code will fall back
>> to a test-and-set scheme when it is detecting a hypervisor.
>>
>> In order to avoid this disable the virt_spin_lock_key.
>>
>> Same change for XEN is already in Commit e6fd28eb3522
>> ("locking/spinlocks, paravirt, xen: Correct the xen_nopvspin case")
>>
>> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@oracle.com>
>> Cc: Waiman Long <longman@redhat.com>
>> Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
>> Cc: "K. Y. Srinivasan" <kys@microsoft.com>
>> Cc: Haiyang Zhang <haiyangz@microsoft.com>
>> Cc: Stephen Hemminger <sthemmin@microsoft.com>
>> Cc: Sasha Levin <sashal@kernel.org>
>> Cc: Thomas Gleixner <tglx@linutronix.de>
>> Cc: Ingo Molnar <mingo@redhat.com>
>> Cc: Borislav Petkov <bp@alien8.de>
>> Cc: linux-hyperv@vger.kernel.org
>> ---
>> arch/x86/hyperv/hv_spinlock.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/arch/x86/hyperv/hv_spinlock.c
>> b/arch/x86/hyperv/hv_spinlock.c
>> index 07f21a0..d90b4b0 100644
>> --- a/arch/x86/hyperv/hv_spinlock.c
>> +++ b/arch/x86/hyperv/hv_spinlock.c
>> @@ -64,6 +64,9 @@ __visible bool hv_vcpu_is_preempted(int vcpu)
>>
>> void __init hv_init_spinlocks(void)
>> {
>> + if (unlikely(!hv_pvspin))
>> + static_branch_disable(&virt_spin_lock_key);
>
> This should be combined in the conditional under it, which already
> attempts to disable PV spinlocks, note how hv_pvspin is checked there.
> hc_pvspin isn't the only reason we would disable PV spinlocks on hyperv.
In virt_spin_lock() there is a comment as below. The test-and-set spinlock
is an optimization to hypervisor platform when PV spinlock is unsupported.
/*
* On hypervisors without PARAVIRT_SPINLOCKS support we fall
* back to a Test-and-Set spinlock, because fair locks have
* horrible lock 'holder' preemption issues.
*/
So my understanding is:
If hv_pvspin=0 by command line, we want to behave as if running on bare
metal(the fair locks path).
Though there is performance regression, but it's not that important when
we use hv_pvspin=0.
If PV spinlock is disabled by other reasons, we prefer the optimization
path.
>
> Also, there's no need for the unlikely() here, it's only getting called
> once...
Ok, I'll removed it.
Thanks
Zhenzhong
next prev parent reply other threads:[~2019-06-28 0:54 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-24 12:02 [PATCH v2 0/7] misc fixes to PV extentions code Zhenzhong Duan
2019-06-24 12:02 ` [PATCH v2 1/7] x86/xen: Mark xen_hvm_need_lapic() and xen_hvm_need_lapic() as __init Zhenzhong Duan
2019-06-24 12:02 ` [PATCH v2 2/7] x86/jailhouse: Mark jailhouse_x2apic_available " Zhenzhong Duan
2019-06-24 12:02 ` [PATCH v2 3/7] x86: Add nopv parameter to disable PV extensions Zhenzhong Duan
2019-06-26 9:38 ` Juergen Gross
2019-06-24 12:02 ` [PATCH v2 4/7] Revert "xen: Introduce 'xen_nopv' to disable PV extensions for HVM guests." Zhenzhong Duan
2019-06-26 9:39 ` Juergen Gross
2019-06-26 13:48 ` Thomas Gleixner
2019-06-24 12:02 ` [PATCH v2 5/7] x86/xen: nopv parameter support for HVM guest Zhenzhong Duan
2019-06-25 12:31 ` Juergen Gross
2019-06-26 8:56 ` Zhenzhong Duan
2019-06-26 9:03 ` Juergen Gross
2019-06-24 12:02 ` [PATCH v2 6/7] locking/spinlocks, paravirt, hyperv: Correct the hv_nopvspin case Zhenzhong Duan
2019-06-27 22:28 ` Sasha Levin
2019-06-28 0:53 ` Zhenzhong Duan [this message]
2019-06-24 12:02 ` [PATCH v2 7/7] Revert "x86/paravirt: Set up the virt_spin_lock_key after static keys get initialized" Zhenzhong Duan
2019-06-26 13:39 ` [PATCH v2 0/7] misc fixes to PV extentions code Thomas Gleixner
2019-06-27 8:47 ` Zhenzhong Duan
2019-06-27 12:24 ` Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eaeb5e52-5fa8-20c9-bc5c-090572718511@oracle.com \
--to=zhenzhong.duan@oracle.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=haiyangz@microsoft.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=kys@microsoft.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=sashal@kernel.org \
--cc=srinivas.eeda@oracle.com \
--cc=sstabellini@kernel.org \
--cc=sthemmin@microsoft.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®