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

Re: [Xen-devel] [PATCH 22/27] x86/cpuid: Perform max_leaf calculations in guest_cpuid()



>>> On 04.01.17 at 13:39, <andrew.cooper3@xxxxxxxxxx> wrote:
> @@ -306,6 +310,9 @@ void recalculate_cpuid_policy(struct domain *d)
>      if ( !d->disable_migrate && !d->arch.vtsc )
>          __clear_bit(X86_FEATURE_ITSC, fs);
>  
> +    if ( p->basic.max_leaf < 0xd )

XSTATE_CPUID

> @@ -333,21 +340,50 @@ void guest_cpuid(const struct vcpu *v, unsigned int 
> leaf,
>                   unsigned int subleaf, struct cpuid_leaf *res)
>  {
>      const struct domain *d = v->domain;
> +    const struct cpuid_policy *p = d->arch.cpuid;
>  
>      *res = EMPTY_LEAF;
>  
>      /*
>       * First pass:
>       * - Dispatch the virtualised leaves to their respective handlers.
> +     * - Perform max_leaf/subleaf calculations, maybe returning early.
>       */
>      switch ( leaf )
>      {
> +    case 0x0 ... 0x6:
> +    case 0x8 ... 0xc:
> +#if 0 /* For when CPUID_GUEST_NR_BASIC isn't 0xd */
> +    case 0xe ... CPUID_GUEST_NR_BASIC - 1:
> +#endif

Perhaps have a BUILD_BUG_ON() in an #else here?

> +        if ( leaf > p->basic.max_leaf )
> +            return;
> +        break;
> +
> +    case 0x7:
> +        if ( subleaf > p->feat.max_subleaf )
> +            return;
> +        break;
> +
> +    case 0xd:

XSTATE_CPUID again, which raises the question whether switch()
really is the best way to deal with things here.

> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -3305,27 +3305,6 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, 
> unsigned int *ebx,
>      if ( !edx )
>          edx = &dummy;
>  
> -    if ( input & 0x7fffffff )
> -    {
> -        /*
> -         * Requests outside the supported leaf ranges return zero on AMD
> -         * and the highest basic leaf output on Intel. Uniformly follow
> -         * the AMD model as the more sane one.
> -         */

I think this comment would better be moved instead of deleted.

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®.