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: Jan Beulich <JBeulich@xxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] Fix PV CPUID virtualization of XSave
From: Haitao Shan <maillists.shan@xxxxxxxxx>
Date: Sun, 18 Sep 2011 17:49:24 +0800
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx, Keir Fraser <keir@xxxxxxx>
Delivery-date: Sun, 18 Sep 2011 02:50:13 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=HB+EFDWxOAVD+RRN9Yn0tjEnpaNgzbFPgx4Pl2JvL6k=; b=s59+Al6T25cavy42is74sU+Lq29zd7ZZxvVAH99E6djsyVKBEBINgqA5r9Ooxl9fpu bQhs4MdoIl4dSG7NZZw/pVvVI86W/tRkVrRL5nCdO9AHhHHYmPvfm3i54kEhRYR09OU1 8EFTTEULf1499JCAOt9sHz+FmrmmXntclXkng=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4E7313510200007800056713@xxxxxxxxxxxxxxxxxxxx>
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> <4E7313510200007800056713@xxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
2011/9/16 Jan Beulich <JBeulich@xxxxxxxx>:
>>>> 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
Nice catch! I will update the patch. The same piece of code is
borrowed from hvm_cpuid(), where I can change the value from 64 to 63,
too.

Shan Haitao

>
>> +                {
>> +                    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>