|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 03/10] x86/cpuid: Handle leaf 0x1 in guest_cpuid()
>>> On 21.02.17 at 18:13, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 21/02/17 16:59, Jan Beulich wrote:
>>>>> On 20.02.17 at 12:00, <andrew.cooper3@xxxxxxxxxx> wrote:
>>> The ebx word is more problematic. The low 8 bits are the brand ID and safe
>>> to
>>> pass straight through. The next 8 bits are the CLFLUSH line size. This
>>> value
>>> is forwarded straight from hardware, as nothing good can possibly come of
>>> providing an alternative value to the guest.
>> Risking the value guests see to change across migration.
>
> CPUID state isn't sent in the migration stream. It is still regenerated
> from scratch on the destination side, thus has always (potentially) been
> changing under the feet of the guest.
True.
>>> The final 8 bits are the initial legacy APIC ID. For HVM guests, this was
>>> overridden to vcpu_id * 2. The same logic is now applied to PV guests, so
>>> guests don't observe a constant number on all vcpus via their emulated or
>>> faulted view.
>> They won't be the same everywhere, but every 128th CPU will
>> share values. I'm therefore not sure it wouldn't be better to hand
>> out zero or all ones here.
>
> There is no case where 128 cpus work sensibly under Xen ATM.
For HVM you mean. I'm sure I've seen > 128 vCPU PV guests
(namely Dom0-s).
> On real hardware, this APIC ID field does start repeating, so IMO it is
> the correct action to take.
Oh, right. That's fine then.
>>> --- a/xen/arch/x86/cpuid.c
>>> +++ b/xen/arch/x86/cpuid.c
>>> @@ -176,6 +176,9 @@ static void recalculate_misc(struct cpuid_policy *p)
>>> switch ( p->x86_vendor )
>>> {
>>> case X86_VENDOR_INTEL:
>>> + p->basic.raw_fms &= 0x0fff3fff;
>> Wouldn't it be better to use the same mask as for AMD here? The
>> field is effectively unused / reserved on 64-bit processors.
>
> Perhaps.
>
>>
>>> @@ -967,6 +920,12 @@ void guest_cpuid(const struct vcpu *v, uint32_t leaf,
>>> break;
>>>
>>> case 0x80000001:
>>> + /* SYSCALL is hidden outside of long mode on Intel. */
>>> + if ( p->x86_vendor == X86_VENDOR_INTEL &&
>>> + has_hvm_container_domain(d) && !hvm_long_mode_enabled(v) )
>>> + res->d &= ~cpufeat_mask(X86_FEATURE_SYSCALL);
>>> +
>>> + common_dynamic_adjustments: /* Adjustments common with leaf 1. */
>> Perhaps have "leaf1" in the label named then?
>
> Ok.
With those (last) two adjustments,
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |