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

Re: [Xen-devel] [PATCH 4/6] x86/hvm: Move hvm_funcs.cpuid_intercept() handling into hvm_cpuid()



>>> On 16.11.16 at 13:31, <andrew.cooper3@xxxxxxxxxx> wrote:
> @@ -3676,6 +3671,12 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, 
> unsigned int *ebx,
>              if ( !(hvm_pae_enabled(v) || hvm_long_mode_enabled(v)) )
>                  *edx &= ~cpufeat_mask(X86_FEATURE_PSE36);
>          }
> +
> +        /* SYSCALL is hidden outside of long mode on Intel. */
> +        if ( d->arch.x86_vendor == X86_VENDOR_INTEL &&
> +             !hvm_long_mode_enabled(v))
> +            *edx &= ~cpufeat_mask(X86_FEATURE_SYSCALL);

Original code also set the bit in its opposite path - don't you think
this should be retained (or otherwise the change be explained in
the description)?

> @@ -3700,6 +3701,14 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, 
> unsigned int *ebx,
>  
>          *ebx &= hvm_featureset[FEATURESET_e8b];
>          break;
> +
> +    case 0x8000001c:
> +        if ( !(v->arch.xcr0 & XSTATE_LWP) )
> +            *eax = 0;
> +        else if ( cpu_has_svm && cpu_has_lwp )
> +            /* Turn on available bit and other features specified in 
> lwp_cfg. */
> +            *eax = (*edx & v->arch.hvm_svm.guest_lwp_cfg) | 1;
> +        break;

Wouldn't it be better to do

+        if ( cpu_has_svm && cpu_has_lwp && (v->arch.xcr0 & XSTATE_LWP) )
+            /* Turn on available bit and other features specified in lwp_cfg. 
*/
+            *eax = (*edx & v->arch.hvm_svm.guest_lwp_cfg) | 1;
+        else
+            *eax = 0;

the more that you're (slightly) altering original behavior anyway?

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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