|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 10/30] xen/x86: Annotate VM applicability in featureset
On 15/02/16 09:20, Jan Beulich wrote:
>>>> On 12.02.16 at 18:42, <andrew.cooper3@xxxxxxxxxx> wrote:
>> On 12/02/16 17:05, Jan Beulich wrote:
>>>>>> On 05.02.16 at 14:42, <andrew.cooper3@xxxxxxxxxx> wrote:
>>>> +#define X86_FEATURE_VMXE ( 1*32+ 5) /*S Virtual Machine
>>>> Extensions */
>>> Shouldn't this get a "nested-only" class?
>> I am not sure that would be appropriate. On the Intel side, this bit is
>> the only option in cpuid; the VT-x features need MSR-levelling, which is
>> moderately far away on my TODO list.
>>
>> Having said that, the AMD side has all nested features in cpuid. I
>> guess this is more a problem for whomever steps up and makes nested virt
>> a properly supported option, but this is way off at this point.
> Okay then. My hope was that introducing the extra category
> wouldn't be too much extra effort inside this series.
>>> Also don't we currently require HAP for nested mode to work?
>> Experimentally, the p2m lock contention caused by Shadow and Nested virt
>> caused Xen to fall over very frequently with watchdog timeouts.
>>
>> Having said that, nothing formal is written down one way or another, and
>> it is possible in limited scenarios to make nested virt work without
>> hap. FWIW, I would be happy with a blanket "no nested virt without HAP"
>> statement for Xen.
> Same here.
Where possible, I am deliberately trying not to make policy changes
hidden inside a large functional series.
As far as nested virt specifically goes, I am still not sure what is the
best approach, so would prefer not to change things at this time.
>
>>>> #define X86_FEATURE_OSXSAVE ( 1*32+27) /* OSXSAVE */
>>> Leaving this untouched warrants at least a comment in the commit
>>> message I would think.
>> The handling for the magic bits
> Unfinished sentence?
Oops yes, although it was going to be statement rather than a query.
>
>>>> +#define X86_FEATURE_RDTSCP ( 2*32+27) /*S RDTSCP */
>>> Hmm, I'm confused - on one hand we currently clear this bit for
>>> PV guests, but otoh do_invalid_op() emulates it.
>> Urgh yes - I had forgotten about this gem. I lacked sufficient tuits to
>> untangle the swamp which is the vtsc subsystem.
>>
>> Currently, the dynamic vtsc setting controls whether the RDTSCP feature
>> flag is visible.
> I don't see where that would be happening - all I see is a single
>
> __clear_bit(X86_FEATURE_RDTSCP % 32, &d);
>
> in pv_cpuid().
The HVM side is more dynamic. Either way, the subsystem is a mess.
>
>>>> +#define X86_FEATURE_LM ( 2*32+29) /*A Long Mode (x86-64) */
>>>> [...]
>>>> -#define X86_FEATURE_LAHF_LM ( 3*32+ 0) /* LAHF/SAHF in long mode
>>>> */
>>>> +#define X86_FEATURE_LAHF_LM ( 3*32+ 0) /*A LAHF/SAHF in long mode
>>>> */
>>> How do you intend to handle exposing these to 64-bit PV guests,
>>> but not to 32-bit ones?
>> At the end of this series, the deep dependency logic used by the
>> toolstack, and some remaining dynamic checks in the intercept hooks.
> Okay, I'll try to remember to look there once I get to that point in
> the series.
>
>>>> #define X86_FEATURE_EXTAPIC ( 3*32+ 3) /* Extended APIC space */
>>> This currently is left untouched for HVM guests, and gets cleared
>>> only when !cpu_has_apic (i.e. effectively never) for PV ones.
>> There is no HVM support for handling a guest trying to use EXTAPIC, and
>> PV guests don't get to play with the hardware APIC anyway. As far as I
>> can tell, it has always been wrong to ever expose this feature.
> Well, that's a fair statement, but should be made in the commit
> message (after all it's a behavioral change).
I will include it in the commit message in the future.
>
>>>> #define X86_FEATURE_MWAITX ( 3*32+29) /* MWAIT extension
>> (MONITORX/MWAITX) */
>>> Why not exposed to HVM (also for _MWAIT as I now notice)?
>> Because that is a good chunk of extra work to support. We would need to
>> use 4K monitor widths, and extra p2m handling.
> I don't understand: The base (_MWAIT) feature being exposed to
> guests today, and kernels making use of the feature when available
> suggests to me that things work. Are you saying you know
> otherwise? (And if there really is a reason to mask the feature all of
> the sudden, this should again be justified in the commit message.)
PV guests had it clobbered by Xen in traps.c
HVM guests have:
vmx.c:
case EXIT_REASON_MWAIT_INSTRUCTION:
case EXIT_REASON_MONITOR_INSTRUCTION:
case EXIT_REASON_GETSEC:
/*
* We should never exit on GETSEC because CR4.SMXE is always 0
when
* running in guest context, and the CPU checks that before
getting
* as far as
vmexit.
*/
WARN_ON(exit_reason == EXIT_REASON_GETSEC);
hvm_inject_hw_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE);
break;
and svm.c:
case VMEXIT_MONITOR:
case VMEXIT_MWAIT:
hvm_inject_hw_exception(TRAP_invalid_op, HVM_DELIVER_NO_ERROR_CODE);
break;
I don't see how a guest could actually use this feature.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |