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

Re: [Xen-devel] [PATCH v2] x86: cap address bits CPUID output



On 09/05/16 14:15, Jan Beulich wrote:
> Don't use more or report more to guests than we are capable of
> handling.
>
> At once
> - correct the involved extended CPUID level checks,
> - simplify the code in hvm_cpuid() and mtrr_top_of_ram().
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, with perhaps one
tweak

> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -3504,19 +3504,19 @@ void hvm_cpuid(unsigned int input, unsig
>          break;
>  
>      case 0x80000008:
> +        *eax &= 0xff;
>          count = d->arch.paging.gfn_bits + PAGE_SHIFT;
> -        if ( (*eax & 0xff) > count )
> -            *eax = (*eax & ~0xff) | count;
> +        if ( *eax > count )
> +            *eax = count;
>  
>          hvm_cpuid(1, NULL, NULL, NULL, &_edx);
>          count = _edx & (cpufeat_mask(X86_FEATURE_PAE) |
>                          cpufeat_mask(X86_FEATURE_PSE36)) ? 36 : 32;
> -        if ( (*eax & 0xff) < count )
> -            *eax = (*eax & ~0xff) | count;
> +        if ( *eax < count )
> +            *eax = count;
>  
>          hvm_cpuid(0x80000001, NULL, NULL, NULL, &_edx);
> -        *eax = (*eax & ~0xffff00) | (_edx & cpufeat_mask(X86_FEATURE_LM)
> -                                     ? 0x3000 : 0x2000);
> +        *eax |= _edx & cpufeat_mask(X86_FEATURE_LM) ? vaddr_bits << 8 : 
> 0x2000;

Using (32 << 8) would be clearer than 0x2000.

~Andrew

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

 


Rackspace

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