WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] Fix PV CPUID virtualization of XSave

To: "Haitao Shan" <maillists.shan@xxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] Fix PV CPUID virtualization of XSave
From: "Jan Beulich" <JBeulich@xxxxxxxx>
Date: Fri, 16 Sep 2011 08:13:53 +0100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx, Keir Fraser <keir@xxxxxxx>
Delivery-date: Fri, 16 Sep 2011 00:14:53 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <CAFQ2Z+dSjU1dStaKyXry_PfRdJpO5k=35ULGPJ8TTj=5wVuW7w@xxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <CAFQ2Z+dSjU1dStaKyXry_PfRdJpO5k=35ULGPJ8TTj=5wVuW7w@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
>>> On 16.09.11 at 02:46, Haitao Shan <maillists.shan@xxxxxxxxx> wrote:
> Hi, Keir,
> 
> The patch will fix XSave CPUID virtualization for PV guests. The XSave
> area size returned by CPUID leaf D is changed dynamically depending on
> the XCR0. Tools/libxc only assigns a static value. The fix will adjust
> xsave area size during runtime.
> 
> Note: This fix is already in HVM cpuid virtualization. And Dom0 is not
> affected, either.
> 
> Signed-off-by:  Shan Haitao <haitao.shan@xxxxxxxxx>
> 
> Shan Haitao
> 
> diff -r 5fe770c8a8a3 xen/arch/x86/traps.c
> --- a/xen/arch/x86/traps.c    Tue Sep 06 15:49:40 2011 +0100
> +++ b/xen/arch/x86/traps.c    Wed Sep 07 02:09:12 2011 +0800
> @@ -770,6 +770,30 @@ static void pv_cpuid(struct cpu_user_reg
>      {
>          if ( !cpuid_hypervisor_leaves(a, c, &a, &b, &c, &d) )
>              domain_cpuid(current->domain, a, c, &a, &b, &c, &d);
> +
> +        switch ( a )
> +        {
> +        case 0xd:
> +        {
> +            unsigned int sub_leaf, _eax, _ebx, _ecx, _edx;
> +            /* EBX value of main leaf 0 depends on enabled xsave features 
> */
> +            if ( c == 0 && current->arch.xcr0 )
> +            {
> +                /* reset EBX to default value first */
> +                b = XSTATE_AREA_MIN_SIZE;
> +                for ( sub_leaf = 2; sub_leaf < 64; sub_leaf++ )

Shouldn't the upper bound be 63 here (as bit 63 serves a different
purpose, and if that bit was set code changes would be required in
various other places)?

Jan

> +                {
> +                    if ( !(current->arch.xcr0 & (1ULL << sub_leaf)) )
> +                        continue;
> +                    domain_cpuid(current->domain, a, c, &_eax, &_ebx, &_ecx,
> +                                 &_edx);
> +                    if ( (_eax + _ebx) > b )
> +                        b = _eax + _ebx;
> +                }
> +            }
> +        break;
> +        }
> +        }
>          goto out;
>      }




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>