[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v1 2/2] x86/cpuid: Detect null segment behaviour on Zen2 CPUs


  • To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Tue, 7 Sep 2021 08:09:43 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=intlh2v0bqwJEaN4Bk097uOqhuTDV3eIWchBM22Tee4=; b=WbNhEBKMFas0v7so4B4EXMK9VDttK5CrggaDVaZqYQx1XKXr+YTHtmInwHsLFbOIxE0XUGU3swoxoFCi15mYDKRMb9PGa2+ehxPnS8FJmToBtyP9sqcG+DEBg8lXbrN4V6qLsJ5tD1nrAac1QpfXdXnE/7wIAAbpTar39N2+K1Z8/lxcy/LL/Eo3JqOwA+GQ5zamfLgaqfjKu0uCNPQvUccrUp2FrDS0IfNPEiwrfBweBiKlh7N7SUQrDII/Fr7Yb1A1BV53i/dF+VN7hlsMC9gHSXkbntc/35IE9BZaR3sQD5LOsyK4txW306mZhWyzPgvMYotPkjwldPEXK3ZtjQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hcbsu/NNkyMxzR3bZfLME8+s1JV0JyI2Uhr3w4fNcvbXqtGc/uCrJkeSavDumnckzNMCBQ3T1LcfbrkAmrkqR1BzKOZVAVtimIdh0rlnuc96XZ8+VwhvtkrTLIVJpHaXJ5KgrEh33Ul6+FdvysuaVesped2xxWgL6nAPmWNVAXSkbdJmWcQIAmZK+dgH2Sqt7yTNbOOVVunyFRcfhcDqzO0zsh+4ffTJNQmK0EKsapsL32OpzU9FWDI4tok+Ci7EkSxyWAAWtCeXPH2w/yPDbxn9hXDEvpoplGD9zfyiQ4oTzFdtdyNrBWCBpWq21SJblw+VfoGSr6eWLBzd4HSuDw==
  • Authentication-results: citrix.com; dkim=none (message not signed) header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
  • Cc: Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Pu Wen <puwen@xxxxxxxx>, Andy Lutomirski <luto@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Jane Malalane <jane.malalane@xxxxxxxxxx>
  • Delivery-date: Tue, 07 Sep 2021 06:10:04 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 06.09.2021 20:07, Andrew Cooper wrote:
> On 06/09/2021 16:17, Jan Beulich wrote:
>> On 06.09.2021 14:00, Jane Malalane wrote:
>>> --- a/xen/arch/x86/cpu/amd.c
>>> +++ b/xen/arch/x86/cpu/amd.c
>>> @@ -681,6 +681,19 @@ void amd_init_lfence(struct cpuinfo_x86 *c)
>>>                       c->x86_capability);
>>>  }
>>>  
>>> +void detect_zen2_null_seg_behaviour(void)
>> This can in principle be marked __init.
>>
>>> +{
>>> +   uint64_t base;
>>> +
>>> +   wrmsrl(MSR_FS_BASE, 1);
>>> +   asm volatile ( "mov %0, %%fs" :: "rm" (0) );
>> While I don't strictly mind the "m" part of the constraint to remain
>> there (in the hope for compilers actually to support this), iirc it's
>> not useful to have when the value is a constant: Last time I checked,
>> the compiler would not instantiate an anonymous (stack) variable to
>> fulfill this constraint (as can be seen when dropping the "r" part of
>> the constraint).
> 
> This is "rm" because it is what we use elsewhere in Xen for selectors,
> and because it is the correct constraints based on the legal instruction
> encodings.

grep-ing for "%%[defgs]s" reveals:

efi_arch_post_exit_boot(), svm_ctxt_switch_to(), and
do_set_segment_base() all use just "r". This grep has not produced
any use of "rm". What are you talking about?

> If you want to work around what you perceive to be bugs in compilers
> then submit a independent change yourself.

I don't perceive this as a bug; perhaps a desirable feature. I also
did start my response with "While I don't strictly mind the "m"
part ..." - was this not careful enough to indicate I'm not going
to insist on the change, but I'd prefer it to be made?

>>> @@ -731,6 +744,11 @@ static void init_amd(struct cpuinfo_x86 *c)
>>>     else /* Implicily "== 0x10 || >= 0x12" by being 64bit. */
>>>             amd_init_lfence(c);
>>>  
>>> +   /* Probe for NSCB on Zen2 CPUs when not virtualised */
>>> +   if (!cpu_has_hypervisor && !cpu_has_nscb && c == &boot_cpu_data &&
>>> +       c->x86 == 0x17 && c->x86_model >= 30 && c->x86_model <= 0x5f)
>> DYM 0x30 here?
> 
> 0x30, although it turns out that some of the mobile Zen2 CPUs exceed
> 0x60 in terms of model number.
> 
> As Zen3 changes the family number to 0x19, I'd just drop the upper bound.

Minor note: Even if it didn't, the !cpu_has_nscb would also be enough
to avoid the probing there.

>>  Or 0x1e? In any event 0x5f should be accompanied by
>> another hex constant. And it would also help if in the description
>> you said where these bounds
> 
> From talking to people at AMD.
> 
>>  as well as ...
>>
>>> --- a/xen/arch/x86/cpu/hygon.c
>>> +++ b/xen/arch/x86/cpu/hygon.c
>>> @@ -34,6 +34,11 @@ static void init_hygon(struct cpuinfo_x86 *c)
>>>  
>>>     amd_init_lfence(c);
>>>  
>>> +   /* Probe for NSCB on Zen2 CPUs when not virtualised */
>>> +   if (!cpu_has_hypervisor && !cpu_has_nscb && c == &boot_cpu_data &&
>>> +       c->x86 == 0x18 && c->x86_model >= 4)
>> ... this one come from.
> 
> From talking to people at Hygon.

Fair enough, but imo this wants mentioning in the description.

Jan




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.