|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] x86/AMD: make HT range dynamic for Fam17 and up
On 18.10.2021 15:10, Roger Pau Monné wrote:
> On Mon, Oct 18, 2021 at 12:18:16PM +0200, Jan Beulich wrote:
>> On 18.10.2021 11:41, Roger Pau Monné wrote:
>>> On Mon, Jun 28, 2021 at 01:48:53PM +0200, Jan Beulich wrote:
>>>> At the time of d838ac2539cf ("x86: don't allow Dom0 access to the HT
>>>> address range") documentation correctly stated that the range was
>>>> completely fixed. For Fam17 and newer, it lives at the top of physical
>>>> address space, though.
>>>>
>>>> To correctly determine the top of physical address space, we need to
>>>> account for their physical address reduction, hence the calculation of
>>>> paddr_bits also gets adjusted.
>>>>
>>>> While for paddr_bits < 40 the HT range is completely hidden, there's no
>>>> need to suppress the range insertion in that case: It'll just have no
>>>> real meaning.
>>>>
>>>> Reported-by: Igor Druzhinin <igor.druzhinin@xxxxxxxxxx>
>>>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>>
>>> Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
>>
>> Thanks, but before applying this I'd prefer to resolve your concern
>> voiced below.
>>
>>>> --- a/xen/arch/x86/cpu/common.c
>>>> +++ b/xen/arch/x86/cpu/common.c
>>>> @@ -349,16 +349,23 @@ void __init early_cpu_init(void)
>>>>
>>>> eax = cpuid_eax(0x80000000);
>>>> if ((eax >> 16) == 0x8000 && eax >= 0x80000008) {
>>>> + ebx = eax >= 0x8000001f ? cpuid_ebx(0x8000001f) : 0;
>>>> eax = cpuid_eax(0x80000008);
>>>> +
>>>> paddr_bits = eax & 0xff;
>>>> if (paddr_bits > PADDR_BITS)
>>>> paddr_bits = PADDR_BITS;
>>>> +
>>>> vaddr_bits = (eax >> 8) & 0xff;
>>>> if (vaddr_bits > VADDR_BITS)
>>>> vaddr_bits = VADDR_BITS;
>>>> +
>>>> hap_paddr_bits = ((eax >> 16) & 0xff) ?: paddr_bits;
>>>> if (hap_paddr_bits > PADDR_BITS)
>>>> hap_paddr_bits = PADDR_BITS;
>>>> +
>>>> + /* Account for SME's physical address space reduction. */
>>>> + paddr_bits -= (ebx >> 6) & 0x3f;
>>>
>>> Does it make sense to check for 0x8000001f[eax] bit 0 in order to
>>> assert that there's support for SME, or assuming that the reduction is
>>> != 0 in the other cpuid leaf is enough.
>>
>> Documentation doesn't really tie them together afaics, so I thought
>> I wouldn't either. I was reading into this lack of an explicit
>> connection the possibility of address space reduction to also,
>> hypothetically at this point, apply to other features.
>>
>>> It's possible for firmware vendors to disable advertising the SME
>>> support bit and leave the physical address space reduction one in
>>> place?
>>
>> I don't know if it's possible (I'm unaware of e.g. MSR-level control
>> allowing to modify these independently), but if it is I'd consider
>> it inconsistent if one but not the other was zapped. I'm unconvinced
>> that we really would need to deal with such inconsistencies, the
>> more that it's not really clear what the inconsistent setting would
>> really mean for the placement of the HT range.
>
> Thanks, I think your proposed solution is fine.
>
>> While writing this, there was one more thing I came to think of:
>> Should we perhaps suppress the iomem_deny_access() altogether when
>> running virtualized ourselves?
>
> Hm, hard to tell TBH. HT being part of the platform specification
> for AMD it would feel wrong for hypervisors to attempt to populate
> this range.
Okay, I'll leave it as is then. If we decide otherwise, we always
can make an incremental change. Thanks for the feedback!
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |