|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V5 3/4] x86/xsaves: enable xsaves/xrstors for hvm guest
>>> On 21.09.15 at 13:34, <shuai.ruan@xxxxxxxxxxxxxxx> wrote:
> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -4550,6 +4550,23 @@ void hvm_cpuid(unsigned int input, unsigned int *eax,
> unsigned int *ebx,
> *ebx = _eax + _ebx;
> }
> }
> + if ( count == 1 )
> + {
> + if ( cpu_has_xsaves )
Doesn't this also depend on the respective VMX capability (which
of course you shouldn't check directly here)?
> + {
> + *ebx = XSTATE_AREA_MIN_SIZE;
> + if ( v->arch.xcr0 | v->arch.hvm_vcpu.msr_xss )
> + for ( sub_leaf = 2; sub_leaf < 63; sub_leaf++ )
> + {
> + if ( !((v->arch.xcr0 | v->arch.hvm_vcpu.msr_xss)
> + & (1ULL << sub_leaf)) )
Indentation.
> + continue;
Please invert the condition and drop the continue.
> @@ -4781,6 +4804,13 @@ int hvm_msr_write_intercept(unsigned int msr, uint64_t
> msr_content,
> return X86EMUL_EXCEPTION;
> break;
>
> + case MSR_IA32_XSS:
> + /* No XSS features currently supported for guests. */
Hard tab. Also - is the patch of much use then?
> @@ -1238,7 +1239,8 @@ static int construct_vmcs(struct vcpu *v)
> __vmwrite(HOST_PAT, host_pat);
> __vmwrite(GUEST_PAT, guest_pat);
> }
> -
> + if ( cpu_has_vmx_xsaves )
> + __vmwrite(XSS_EXIT_BITMAP, 0);
> vmx_vmcs_exit(v);
Instead of removing a blank line I'd rather see you add another one
before the call to vmx_vmcs_exit().
> --- a/xen/arch/x86/xstate.c
> +++ b/xen/arch/x86/xstate.c
> @@ -14,8 +14,8 @@
> #include <asm/xstate.h>
> #include <asm/asm_defns.h>
>
> -static bool_t __read_mostly cpu_has_xsaveopt;
> -static bool_t __read_mostly cpu_has_xsavec;
> +bool_t __read_mostly cpu_has_xsaveopt;
> +bool_t __read_mostly cpu_has_xsavec;
Why? (But iirc this will go away anyway once re-based on Andrew's
changes.)
> --- a/xen/include/asm-x86/hvm/vmx/vmcs.h
> +++ b/xen/include/asm-x86/hvm/vmx/vmcs.h
> @@ -225,6 +225,7 @@ extern u32 vmx_vmentry_control;
> #define SECONDARY_EXEC_ENABLE_VMCS_SHADOWING 0x00004000
> #define SECONDARY_EXEC_ENABLE_PML 0x00020000
> #define SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS 0x00040000
> +#define SECONDARY_EXEC_XSAVES 0x00100000
> extern u32 vmx_secondary_exec_control;
>
> #define VMX_EPT_EXEC_ONLY_SUPPORTED 0x00000001
> @@ -240,6 +241,8 @@ extern u32 vmx_secondary_exec_control;
>
> #define VMX_MISC_VMWRITE_ALL 0x20000000
>
> +#define VMX_XSS_EXIT_BITMAP 0
What use is this addition without it having any user? (And without
any user judging whether this is a meaningful definition is also
impossible.)
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |