All of lore.kernel.org
 help / color / mirror / Atom feed
* [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
@ 2010-11-09  6:22 Haitao Shan
  2010-11-09 10:43 ` Ian Campbell
  2010-11-09 19:55 ` Jeremy Fitzhardinge
  0 siblings, 2 replies; 13+ messages in thread
From: Haitao Shan @ 2010-11-09  6:22 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: xen-devel, Keir Fraser

[-- Attachment #1: Type: text/plain, Size: 238 bytes --]

Hi, Jeremy,

This patch allows pv-ops kernel to detect whether XSAVE is supported
(before masking it unconditionally through xen_cpuid).
Can you please have review? Thanks!

Signed-off-by: Shan Haitao <haitao.shan@intel.com>

Shan Haitao

[-- Attachment #2: xsave_pvops_kernel.patch --]
[-- Type: application/octet-stream, Size: 688 bytes --]

diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index fd3803e..03bfaf7 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -252,6 +252,13 @@ static __init void xen_init_cpuid_mask(void)
 			  (1 << X86_FEATURE_MCA)  |  /* disable MCA */
 			  (1 << X86_FEATURE_APIC) |  /* disable local APIC */
 			  (1 << X86_FEATURE_ACPI));  /* disable ACPI */
+	ax = 1;
+	xen_cpuid(&ax, &bx, &cx, &dx);
+
+	/* Xen will set CR4.OSXSAVE if supported and not disabled by force */
+	if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) &&
+		cx & (1 << (X86_FEATURE_OSXSAVE % 32)) )
+		return;
 
 	cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable XSAVE */
 }

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-09  6:22 [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported Haitao Shan
@ 2010-11-09 10:43 ` Ian Campbell
  2010-11-09 10:51   ` Jan Beulich
  2010-11-09 19:55 ` Jeremy Fitzhardinge
  1 sibling, 1 reply; 13+ messages in thread
From: Ian Campbell @ 2010-11-09 10:43 UTC (permalink / raw)
  To: Haitao Shan
  Cc: Jeremy Fitzhardinge, xen-devel@lists.xensource.com, Keir Fraser

On Tue, 2010-11-09 at 06:22 +0000, Haitao Shan wrote:
> Hi, Jeremy,
> 
> This patch allows pv-ops kernel to detect whether XSAVE is supported
> (before masking it unconditionally through xen_cpuid).
> Can you please have review? Thanks!
> 
> Signed-off-by: Shan Haitao <haitao.shan@intel.com>
> 
> Shan Haitao 
> 

> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
> index fd3803e..03bfaf7 100644
> --- a/arch/x86/xen/enlighten.c
> +++ b/arch/x86/xen/enlighten.c
> @@ -252,6 +252,13 @@ static __init void xen_init_cpuid_mask(void)
>                           (1 << X86_FEATURE_MCA)  |  /* disable MCA */
>                           (1 << X86_FEATURE_APIC) |  /* disable local APIC */
>                           (1 << X86_FEATURE_ACPI));  /* disable ACPI */
> +       ax = 1;
> +       xen_cpuid(&ax, &bx, &cx, &dx);
> +
> +       /* Xen will set CR4.OSXSAVE if supported and not disabled by force */

For how long has the hypervisor had this behaviour? IIRC older
hypervisors did not correctly expose/mask the *XSAVE CPUID flags and
would causes PV guests to crash when they used *XSAVE features which
weren't actually available.

In other words have you confirmed that this patch does not break the
kernel running on older hypervisors such as Xen 4.0?


> +       if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) &&
> +               cx & (1 << (X86_FEATURE_OSXSAVE % 32)) )
> +               return;
>  
>         cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable XSAVE */
>  } 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-09 10:43 ` Ian Campbell
@ 2010-11-09 10:51   ` Jan Beulich
  2010-11-09 10:54     ` Ian Campbell
  0 siblings, 1 reply; 13+ messages in thread
From: Jan Beulich @ 2010-11-09 10:51 UTC (permalink / raw)
  To: Ian Campbell
  Cc: Haitao Shan, Jeremy Fitzhardinge, xen-devel@lists.xensource.com,
	Keir Fraser

>>> On 09.11.10 at 11:43, Ian Campbell <Ian.Campbell@citrix.com> wrote:
> On Tue, 2010-11-09 at 06:22 +0000, Haitao Shan wrote:
>> Hi, Jeremy,
>> 
>> This patch allows pv-ops kernel to detect whether XSAVE is supported
>> (before masking it unconditionally through xen_cpuid).
>> Can you please have review? Thanks!
>> 
>> Signed-off-by: Shan Haitao <haitao.shan@intel.com>
>> 
>> Shan Haitao 
>> 
> 
>> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
>> index fd3803e..03bfaf7 100644
>> --- a/arch/x86/xen/enlighten.c
>> +++ b/arch/x86/xen/enlighten.c
>> @@ -252,6 +252,13 @@ static __init void xen_init_cpuid_mask(void)
>>                           (1 << X86_FEATURE_MCA)  |  /* disable MCA */
>>                           (1 << X86_FEATURE_APIC) |  /* disable local APIC */
>>                           (1 << X86_FEATURE_ACPI));  /* disable ACPI */
>> +       ax = 1;
>> +       xen_cpuid(&ax, &bx, &cx, &dx);
>> +
>> +       /* Xen will set CR4.OSXSAVE if supported and not disabled by force 
> */
> 
> For how long has the hypervisor had this behaviour? IIRC older
> hypervisors did not correctly expose/mask the *XSAVE CPUID flags and
> would causes PV guests to crash when they used *XSAVE features which
> weren't actually available.
> 
> In other words have you confirmed that this patch does not break the
> kernel running on older hypervisors such as Xen 4.0?

The problem was only with the XSAVE cpuid bit, not the OSXSAVE
one (which gets turned on only when CR4.OSXSAVE gets set).

Jan

>> +       if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) &&
>> +               cx & (1 << (X86_FEATURE_OSXSAVE % 32)) )
>> +               return;
>>  
>>         cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable 
> XSAVE */
>>  } 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com 
> http://lists.xensource.com/xen-devel 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect  whether XSAVE is supported
  2010-11-09 10:51   ` Jan Beulich
@ 2010-11-09 10:54     ` Ian Campbell
  2010-11-09 11:26       ` Jan Beulich
  2010-11-09 15:12       ` Haitao Shan
  0 siblings, 2 replies; 13+ messages in thread
From: Ian Campbell @ 2010-11-09 10:54 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Haitao Shan, Jeremy Fitzhardinge, xen-devel@lists.xensource.com,
	Keir Fraser

On Tue, 2010-11-09 at 10:51 +0000, Jan Beulich wrote:
> >>> On 09.11.10 at 11:43, Ian Campbell <Ian.Campbell@citrix.com> wrote:
> > On Tue, 2010-11-09 at 06:22 +0000, Haitao Shan wrote:
> >> Hi, Jeremy,
> >> 
> >> This patch allows pv-ops kernel to detect whether XSAVE is supported
> >> (before masking it unconditionally through xen_cpuid).
> >> Can you please have review? Thanks!
> >> 
> >> Signed-off-by: Shan Haitao <haitao.shan@intel.com>
> >> 
> >> Shan Haitao 
> >> 
> > 
> >> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
> >> index fd3803e..03bfaf7 100644
> >> --- a/arch/x86/xen/enlighten.c
> >> +++ b/arch/x86/xen/enlighten.c
> >> @@ -252,6 +252,13 @@ static __init void xen_init_cpuid_mask(void)
> >>                           (1 << X86_FEATURE_MCA)  |  /* disable MCA */
> >>                           (1 << X86_FEATURE_APIC) |  /* disable local APIC */
> >>                           (1 << X86_FEATURE_ACPI));  /* disable ACPI */
> >> +       ax = 1;
> >> +       xen_cpuid(&ax, &bx, &cx, &dx);
> >> +
> >> +       /* Xen will set CR4.OSXSAVE if supported and not disabled by force 
> > */
> > 
> > For how long has the hypervisor had this behaviour? IIRC older
> > hypervisors did not correctly expose/mask the *XSAVE CPUID flags and
> > would causes PV guests to crash when they used *XSAVE features which
> > weren't actually available.
> > 
> > In other words have you confirmed that this patch does not break the
> > kernel running on older hypervisors such as Xen 4.0?
> 
> The problem was only with the XSAVE cpuid bit, not the OSXSAVE
> one (which gets turned on only when CR4.OSXSAVE gets set).

So if OSXSAVE is enabled we can also infer that XSAVE is safe to use,
because XSAVE was fixed/implemented before OSXSAVE was? Seems
reasonable.

Ian.

> 
> Jan
> 
> >> +       if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) &&
> >> +               cx & (1 << (X86_FEATURE_OSXSAVE % 32)) )
> >> +               return;
> >>  
> >>         cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable 
> > XSAVE */
> >>  } 
> > 
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xensource.com 
> > http://lists.xensource.com/xen-devel 
> 
> 
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-09 10:54     ` Ian Campbell
@ 2010-11-09 11:26       ` Jan Beulich
  2010-11-09 15:12       ` Haitao Shan
  1 sibling, 0 replies; 13+ messages in thread
From: Jan Beulich @ 2010-11-09 11:26 UTC (permalink / raw)
  To: Ian Campbell
  Cc: Haitao Shan, Jeremy Fitzhardinge, xen-devel@lists.xensource.com,
	Keir Fraser

>>> On 09.11.10 at 11:54, Ian Campbell <Ian.Campbell@eu.citrix.com> wrote:
> So if OSXSAVE is enabled we can also infer that XSAVE is safe to use,
> because XSAVE was fixed/implemented before OSXSAVE was? Seems
> reasonable.

Yes, that's my understanding (prior to the recent changes, CR4.OSXSAVE
got turned on only in HVM context if I followed things correctly).

Jan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-09 10:54     ` Ian Campbell
  2010-11-09 11:26       ` Jan Beulich
@ 2010-11-09 15:12       ` Haitao Shan
  1 sibling, 0 replies; 13+ messages in thread
From: Haitao Shan @ 2010-11-09 15:12 UTC (permalink / raw)
  To: Ian Campbell
  Cc: Jeremy Fitzhardinge, xen-devel@lists.xensource.com, Keir Fraser,
	Jan Beulich

Yes. According to spec, while CPUID leaf 1 ECX.XSAVE reports whether
processor supports XSAVE, CPUID leaf 1 ECX.OSXSAVE just reflects
CR4.OSXSAVE, which is served as an indication from kernel (and hence
VMM, in Xen's case) to apps (including PV kernels, in xen's case) that
XSAVE is enabled and can be used safely.

Shan Haitao

2010/11/9 Ian Campbell <Ian.Campbell@eu.citrix.com>:
> On Tue, 2010-11-09 at 10:51 +0000, Jan Beulich wrote:
>> >>> On 09.11.10 at 11:43, Ian Campbell <Ian.Campbell@citrix.com> wrote:
>> > On Tue, 2010-11-09 at 06:22 +0000, Haitao Shan wrote:
>> >> Hi, Jeremy,
>> >>
>> >> This patch allows pv-ops kernel to detect whether XSAVE is supported
>> >> (before masking it unconditionally through xen_cpuid).
>> >> Can you please have review? Thanks!
>> >>
>> >> Signed-off-by: Shan Haitao <haitao.shan@intel.com>
>> >>
>> >> Shan Haitao
>> >>
>> >
>> >> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
>> >> index fd3803e..03bfaf7 100644
>> >> --- a/arch/x86/xen/enlighten.c
>> >> +++ b/arch/x86/xen/enlighten.c
>> >> @@ -252,6 +252,13 @@ static __init void xen_init_cpuid_mask(void)
>> >>                           (1 << X86_FEATURE_MCA)  |  /* disable MCA */
>> >>                           (1 << X86_FEATURE_APIC) |  /* disable local APIC */
>> >>                           (1 << X86_FEATURE_ACPI));  /* disable ACPI */
>> >> +       ax = 1;
>> >> +       xen_cpuid(&ax, &bx, &cx, &dx);
>> >> +
>> >> +       /* Xen will set CR4.OSXSAVE if supported and not disabled by force
>> > */
>> >
>> > For how long has the hypervisor had this behaviour? IIRC older
>> > hypervisors did not correctly expose/mask the *XSAVE CPUID flags and
>> > would causes PV guests to crash when they used *XSAVE features which
>> > weren't actually available.
>> >
>> > In other words have you confirmed that this patch does not break the
>> > kernel running on older hypervisors such as Xen 4.0?
>>
>> The problem was only with the XSAVE cpuid bit, not the OSXSAVE
>> one (which gets turned on only when CR4.OSXSAVE gets set).
>
> So if OSXSAVE is enabled we can also infer that XSAVE is safe to use,
> because XSAVE was fixed/implemented before OSXSAVE was? Seems
> reasonable.
>
> Ian.
>
>>
>> Jan
>>
>> >> +       if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) &&
>> >> +               cx & (1 << (X86_FEATURE_OSXSAVE % 32)) )
>> >> +               return;
>> >>
>> >>         cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable
>> > XSAVE */
>> >>  }
>> >
>> >
>> > _______________________________________________
>> > Xen-devel mailing list
>> > Xen-devel@lists.xensource.com
>> > http://lists.xensource.com/xen-devel
>>
>>
>>
>
>
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-09  6:22 [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported Haitao Shan
  2010-11-09 10:43 ` Ian Campbell
@ 2010-11-09 19:55 ` Jeremy Fitzhardinge
  2010-11-10  0:15   ` Haitao Shan
  1 sibling, 1 reply; 13+ messages in thread
From: Jeremy Fitzhardinge @ 2010-11-09 19:55 UTC (permalink / raw)
  To: Haitao Shan; +Cc: xen-devel, Keir Fraser

On 11/08/2010 10:22 PM, Haitao Shan wrote:
> Hi, Jeremy,
>
> This patch allows pv-ops kernel to detect whether XSAVE is supported
> (before masking it unconditionally through xen_cpuid).
> Can you please have review? Thanks!
>
> Signed-off-by: Shan Haitao <haitao.shan@intel.com>
>
> Shan Haitao
>

For future reference:

Please post patches inline if possible.

If you must use an attachment to prevent your mail system from
corrupting the patch, please include a complete description of the patch
(what is it trying to do, how does it do it, what is the outcome?) with
signed-off-bys in the the patch itself.

> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index
> fd3803e..03bfaf7 100644 --- a/arch/x86/xen/enlighten.c +++
> b/arch/x86/xen/enlighten.c @@ -252,6 +252,13 @@ static __init void
> xen_init_cpuid_mask(void) (1 << X86_FEATURE_MCA) | /* disable MCA */
> (1 << X86_FEATURE_APIC) | /* disable local APIC */ (1 <<
> X86_FEATURE_ACPI)); /* disable ACPI */ + ax = 1; + xen_cpuid(&ax, &bx,
> &cx, &dx); + + /* Xen will set CR4.OSXSAVE if supported and not
> disabled by force */ + if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) && +
> cx & (1 << (X86_FEATURE_OSXSAVE % 32)) ) + return;
> cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable
> XSAVE */ 


I cleaned this up a bit (fixed formatting to Linux style, reversed the
sense of the if() and masked OSXSAVE as well, even though it won't make
a difference).  But I'm still a bit concerned about the back-compat
issues around this.

What happens if the guest OS does not support XSAVE (older versions of
Linux)?  Could usermode code see OSXSAVE set in the cpuid feature flags
and attempt to use XSAVE, even if XSAVE isn't set?  In other words, can
usermode ever normally see OSXSAVE set, but XSAVE clear?

We can't mask OSXSAVE to usermode because they can run the naked CPUID
instruction, so I guess the only way to cause it to be cleared would be
to clear CR4.OSXSAVE?  But that seems like a very expensive thing to do
on a vcpu context switch.

How much testing of real usermode code have you done with this?  How
many combinations of XSAVE support in Xen, Linux and usermode have you
tried?

    J

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-09 19:55 ` Jeremy Fitzhardinge
@ 2010-11-10  0:15   ` Haitao Shan
  2010-11-10  0:18     ` Haitao Shan
  2010-11-10  0:41     ` Jeremy Fitzhardinge
  0 siblings, 2 replies; 13+ messages in thread
From: Haitao Shan @ 2010-11-10  0:15 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: xen-devel, Keir Fraser

2010/11/10 Jeremy Fitzhardinge <jeremy@goop.org>:
> On 11/08/2010 10:22 PM, Haitao Shan wrote:
>> Hi, Jeremy,
>>
>> This patch allows pv-ops kernel to detect whether XSAVE is supported
>> (before masking it unconditionally through xen_cpuid).
>> Can you please have review? Thanks!
>>
>> Signed-off-by: Shan Haitao <haitao.shan@intel.com>
>>
>> Shan Haitao
>>
>
> For future reference:
>
> Please post patches inline if possible.
>
> If you must use an attachment to prevent your mail system from
> corrupting the patch, please include a complete description of the patch
> (what is it trying to do, how does it do it, what is the outcome?) with
> signed-off-bys in the the patch itself.
OK. I will follow.

>
>> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index
>> fd3803e..03bfaf7 100644 --- a/arch/x86/xen/enlighten.c +++
>> b/arch/x86/xen/enlighten.c @@ -252,6 +252,13 @@ static __init void
>> xen_init_cpuid_mask(void) (1 << X86_FEATURE_MCA) | /* disable MCA */
>> (1 << X86_FEATURE_APIC) | /* disable local APIC */ (1 <<
>> X86_FEATURE_ACPI)); /* disable ACPI */ + ax = 1; + xen_cpuid(&ax, &bx,
>> &cx, &dx); + + /* Xen will set CR4.OSXSAVE if supported and not
>> disabled by force */ + if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) && +
>> cx & (1 << (X86_FEATURE_OSXSAVE % 32)) ) + return;
>> cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable
>> XSAVE */
>
>
> I cleaned this up a bit (fixed formatting to Linux style, reversed the
> sense of the if() and masked OSXSAVE as well, even though it won't make
> a difference).  But I'm still a bit concerned about the back-compat
> issues around this.
>
> What happens if the guest OS does not support XSAVE (older versions of
> Linux)?  Could usermode code see OSXSAVE set in the cpuid feature flags
> and attempt to use XSAVE, even if XSAVE isn't set?  In other words, can
> usermode ever normally see OSXSAVE set, but XSAVE clear?
I think that is not possible. If usermode does not use native CPUID
instruction, or CPUID can be virtualized any way, this won't happen.
Otherwise, usermode will either see both are set or unset. Since on a
NON-XSAVE processor, you can not set CR4.OSXSAVE and won't be
reflected to CPUID.

If user mode sees both are set, they can use it actually. So we
initially set FP and SSE in XCR0 for guest. If user mode wants to use
it, guest kernel still can manage the state using traditional FPU
save/restore mechanism. If user mode wants to access more extended
states, it has to acquire kernel's support for turning on related bit
in XCR0, which is finally controlled by Xen now.

That's the reason I chose to turn on OSXSAVE in Xen and don't
dynamically change it.

>
> We can't mask OSXSAVE to usermode because they can run the naked CPUID
> instruction, so I guess the only way to cause it to be cleared would be
> to clear CR4.OSXSAVE?  But that seems like a very expensive thing to do
> on a vcpu context switch.
Yes. This is the biggest concern when I wrote XSAVE patches.
Otherwise, you will need to switch CR4 on entry to/exit from guest
mode. Or as you said, switching CR4 when do a vcpu context switch, but
whenever Xen itself want to use XSAVE instructions, it needs to turns
on it and off it on the fly.

>
> How much testing of real usermode code have you done with this?  How
> many combinations of XSAVE support in Xen, Linux and usermode have you
> tried?
I have a few AVX test programs running both inside PV guest and HVM.
However, I have to admit that my aim is to test Xen's fpu context
switching using Xsave and guest save/restore.

>
>    J
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-10  0:15   ` Haitao Shan
@ 2010-11-10  0:18     ` Haitao Shan
  2010-11-10  0:41     ` Jeremy Fitzhardinge
  1 sibling, 0 replies; 13+ messages in thread
From: Haitao Shan @ 2010-11-10  0:18 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: xen-devel, Keir Fraser

> Otherwise, usermode will either see both are set or unset. Since on a

Oh, that is not correct. I mean whenever user mode sees OSXSAVE, it
sees both are set or unset. If user mode sees XSAVE only, that is
legal of course.

Shan Haitao

2010/11/10 Haitao Shan <maillists.shan@gmail.com>:
> 2010/11/10 Jeremy Fitzhardinge <jeremy@goop.org>:
>> On 11/08/2010 10:22 PM, Haitao Shan wrote:
>>> Hi, Jeremy,
>>>
>>> This patch allows pv-ops kernel to detect whether XSAVE is supported
>>> (before masking it unconditionally through xen_cpuid).
>>> Can you please have review? Thanks!
>>>
>>> Signed-off-by: Shan Haitao <haitao.shan@intel.com>
>>>
>>> Shan Haitao
>>>
>>
>> For future reference:
>>
>> Please post patches inline if possible.
>>
>> If you must use an attachment to prevent your mail system from
>> corrupting the patch, please include a complete description of the patch
>> (what is it trying to do, how does it do it, what is the outcome?) with
>> signed-off-bys in the the patch itself.
> OK. I will follow.
>
>>
>>> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index
>>> fd3803e..03bfaf7 100644 --- a/arch/x86/xen/enlighten.c +++
>>> b/arch/x86/xen/enlighten.c @@ -252,6 +252,13 @@ static __init void
>>> xen_init_cpuid_mask(void) (1 << X86_FEATURE_MCA) | /* disable MCA */
>>> (1 << X86_FEATURE_APIC) | /* disable local APIC */ (1 <<
>>> X86_FEATURE_ACPI)); /* disable ACPI */ + ax = 1; + xen_cpuid(&ax, &bx,
>>> &cx, &dx); + + /* Xen will set CR4.OSXSAVE if supported and not
>>> disabled by force */ + if ( cx & (1 << (X86_FEATURE_XSAVE % 32)) && +
>>> cx & (1 << (X86_FEATURE_OSXSAVE % 32)) ) + return;
>>> cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); /* disable
>>> XSAVE */
>>
>>
>> I cleaned this up a bit (fixed formatting to Linux style, reversed the
>> sense of the if() and masked OSXSAVE as well, even though it won't make
>> a difference).  But I'm still a bit concerned about the back-compat
>> issues around this.
>>
>> What happens if the guest OS does not support XSAVE (older versions of
>> Linux)?  Could usermode code see OSXSAVE set in the cpuid feature flags
>> and attempt to use XSAVE, even if XSAVE isn't set?  In other words, can
>> usermode ever normally see OSXSAVE set, but XSAVE clear?
> I think that is not possible. If usermode does not use native CPUID
> instruction, or CPUID can be virtualized any way, this won't happen.
> Otherwise, usermode will either see both are set or unset. Since on a
> NON-XSAVE processor, you can not set CR4.OSXSAVE and won't be
> reflected to CPUID.
>
> If user mode sees both are set, they can use it actually. So we
> initially set FP and SSE in XCR0 for guest. If user mode wants to use
> it, guest kernel still can manage the state using traditional FPU
> save/restore mechanism. If user mode wants to access more extended
> states, it has to acquire kernel's support for turning on related bit
> in XCR0, which is finally controlled by Xen now.
>
> That's the reason I chose to turn on OSXSAVE in Xen and don't
> dynamically change it.
>
>>
>> We can't mask OSXSAVE to usermode because they can run the naked CPUID
>> instruction, so I guess the only way to cause it to be cleared would be
>> to clear CR4.OSXSAVE?  But that seems like a very expensive thing to do
>> on a vcpu context switch.
> Yes. This is the biggest concern when I wrote XSAVE patches.
> Otherwise, you will need to switch CR4 on entry to/exit from guest
> mode. Or as you said, switching CR4 when do a vcpu context switch, but
> whenever Xen itself want to use XSAVE instructions, it needs to turns
> on it and off it on the fly.
>
>>
>> How much testing of real usermode code have you done with this?  How
>> many combinations of XSAVE support in Xen, Linux and usermode have you
>> tried?
> I have a few AVX test programs running both inside PV guest and HVM.
> However, I have to admit that my aim is to test Xen's fpu context
> switching using Xsave and guest save/restore.
>
>>
>>    J
>>
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-10  0:15   ` Haitao Shan
  2010-11-10  0:18     ` Haitao Shan
@ 2010-11-10  0:41     ` Jeremy Fitzhardinge
  2010-11-10  1:45       ` Haitao Shan
  1 sibling, 1 reply; 13+ messages in thread
From: Jeremy Fitzhardinge @ 2010-11-10  0:41 UTC (permalink / raw)
  To: Haitao Shan; +Cc: xen-devel, Ian Jackson, Keir Fraser

On 11/09/2010 04:15 PM, Haitao Shan wrote:
>
> I think that is not possible. If usermode does not use native CPUID
> instruction, or CPUID can be virtualized any way, this won't happen.
> Otherwise, usermode will either see both are set or unset. Since on a
> NON-XSAVE processor, you can not set CR4.OSXSAVE and won't be
> reflected to CPUID.

I see.

> If user mode sees both are set, they can use it actually. So we
> initially set FP and SSE in XCR0 for guest. If user mode wants to use
> it, guest kernel still can manage the state using traditional FPU
> save/restore mechanism. If user mode wants to access more extended
> states, it has to acquire kernel's support for turning on related bit
> in XCR0, which is finally controlled by Xen now.

Are you saying that usermode can use XSAVE, AVX and other instruction
set extensions successfully if Xen supports them, even if the guest OS
doesn't?  That sounds unlikely - what happens when, for example, an old
Linux wants to context switch from one Linux task to another on a VCPU? 
How will the task's context get saved/reloaded properly?

Your kernel changes seem fine, and should allow a modern kernel to
support XSAVE and all the CPU features that go along with it.  But I'm
really concerned that your Xen changes will cause previously working
usermode programs to start erroneously using XSAVE when the guest kernel
cannot support it.

> I have a few AVX test programs running both inside PV guest and HVM.
> However, I have to admit that my aim is to test Xen's fpu context
> switching using Xsave and guest save/restore.
>

Could you make them available for testing?

IanJ: It looks like it would be useful to add some tests to the suite to
make sure all this extended context is save/restored properly...

Thanks,
    J

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-10  0:41     ` Jeremy Fitzhardinge
@ 2010-11-10  1:45       ` Haitao Shan
  2010-11-10  2:15         ` Jeremy Fitzhardinge
  0 siblings, 1 reply; 13+ messages in thread
From: Haitao Shan @ 2010-11-10  1:45 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: xen-devel, Ian Jackson, Keir Fraser

>> If user mode sees both are set, they can use it actually. So we
>> initially set FP and SSE in XCR0 for guest. If user mode wants to use
>> it, guest kernel still can manage the state using traditional FPU
>> save/restore mechanism. If user mode wants to access more extended
>> states, it has to acquire kernel's support for turning on related bit
>> in XCR0, which is finally controlled by Xen now.
>
> Are you saying that usermode can use XSAVE, AVX and other instruction
> set extensions successfully if Xen supports them, even if the guest OS
> doesn't?  That sounds unlikely - what happens when, for example, an old
> Linux wants to context switch from one Linux task to another on a VCPU?
> How will the task's context get saved/reloaded properly?
Actually not. I mean user mode can use XSAVE instruction itself but
not AVX or any future instruction extensions. Using the latter would
require setting XCR0 properly, which is owned and managed by Xen
itself. As I said, initially Xen sets XCR0 to be FPU/SSE only for
guest (we do do XCR0 switch when vcpu context switch, this is a
per-vcpu setting). Unless guest kernel requires to enable more
extended states through XSETBV (this is ROOT ring 0 instruction only),
it won't be changed.
And in this case, guest kernel can still use original FXSAVE mechanism
to provide context switching support to its user space apps.
It just means user mode can use XSAVE instruction if it wans to use
this instruction to do save/restore itself.
If user mode wants more, it has to check kernel's SW interface support
for turning on more extended states management (via XSETBV in kernel
finally). But old kernels just do not have such kind of interface.

>
> Your kernel changes seem fine, and should allow a modern kernel to
> support XSAVE and all the CPU features that go along with it.  But I'm
> really concerned that your Xen changes will cause previously working
> usermode programs to start erroneously using XSAVE when the guest kernel
> cannot support it.
Well, I am concerned too. But I still think the current approach
should be architecturally viable. But there may be bugs in my code
........

>
>> I have a few AVX test programs running both inside PV guest and HVM.
>> However, I have to admit that my aim is to test Xen's fpu context
>> switching using Xsave and guest save/restore.
>>
>
> Could you make them available for testing?
I will return to you later for answer to this question. I needs to
judge the correct Intel policy and channel when doing such a release.

>
> IanJ: It looks like it would be useful to add some tests to the suite to
> make sure all this extended context is save/restored properly...
>
> Thanks,
>    J
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-10  1:45       ` Haitao Shan
@ 2010-11-10  2:15         ` Jeremy Fitzhardinge
  2010-11-19 18:17           ` Ian Jackson
  0 siblings, 1 reply; 13+ messages in thread
From: Jeremy Fitzhardinge @ 2010-11-10  2:15 UTC (permalink / raw)
  To: Haitao Shan; +Cc: xen-devel, Ian Jackson, Keir Fraser

On 11/09/2010 05:45 PM, Haitao Shan wrote:
>>> If user mode sees both are set, they can use it actually. So we
>>> initially set FP and SSE in XCR0 for guest. If user mode wants to use
>>> it, guest kernel still can manage the state using traditional FPU
>>> save/restore mechanism. If user mode wants to access more extended
>>> states, it has to acquire kernel's support for turning on related bit
>>> in XCR0, which is finally controlled by Xen now.
>> Are you saying that usermode can use XSAVE, AVX and other instruction
>> set extensions successfully if Xen supports them, even if the guest OS
>> doesn't?  That sounds unlikely - what happens when, for example, an old
>> Linux wants to context switch from one Linux task to another on a VCPU?
>> How will the task's context get saved/reloaded properly?
> Actually not. I mean user mode can use XSAVE instruction itself but
> not AVX or any future instruction extensions. Using the latter would
> require setting XCR0 properly, which is owned and managed by Xen
> itself. As I said, initially Xen sets XCR0 to be FPU/SSE only for
> guest (we do do XCR0 switch when vcpu context switch, this is a
> per-vcpu setting). Unless guest kernel requires to enable more
> extended states through XSETBV (this is ROOT ring 0 instruction only),
> it won't be changed.

Ah, OK.

>> Your kernel changes seem fine, and should allow a modern kernel to
>> support XSAVE and all the CPU features that go along with it.  But I'm
>> really concerned that your Xen changes will cause previously working
>> usermode programs to start erroneously using XSAVE when the guest kernel
>> cannot support it.
> Well, I am concerned too. But I still think the current approach
> should be architecturally viable. But there may be bugs in my code
> ........

Well, that's not as bad as baking in a flawed interface.

>>> I have a few AVX test programs running both inside PV guest and HVM.
>>> However, I have to admit that my aim is to test Xen's fpu context
>>> switching using Xsave and guest save/restore.
>>>
>> Could you make them available for testing?
> I will return to you later for answer to this question. I needs to
> judge the correct Intel policy and channel when doing such a release.

Well, if you can't release your actual test programs (which might not be
appropriate in any case), then perhaps you could write something new to
exercise this?  Something that would enable as many instruction
extensions as possible and continually makes sure the contexts are being
properly saved and restored?

Thanks,
    J

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported
  2010-11-10  2:15         ` Jeremy Fitzhardinge
@ 2010-11-19 18:17           ` Ian Jackson
  0 siblings, 0 replies; 13+ messages in thread
From: Ian Jackson @ 2010-11-19 18:17 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: Haitao Shan, xen-devel, Keir Fraser

Jeremy Fitzhardinge writes ("Re: [Xen-devel] [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported"):
> Well, if you can't release your actual test programs (which might not be
> appropriate in any case), then perhaps you could write something new to
> exercise this?  Something that would enable as many instruction
> extensions as possible and continually makes sure the contexts are being
> properly saved and restored?

This would be a very good idea.

Ian.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-11-19 18:17 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-09  6:22 [Patch] Allowing PV-OPS kernel to detect whether XSAVE is supported Haitao Shan
2010-11-09 10:43 ` Ian Campbell
2010-11-09 10:51   ` Jan Beulich
2010-11-09 10:54     ` Ian Campbell
2010-11-09 11:26       ` Jan Beulich
2010-11-09 15:12       ` Haitao Shan
2010-11-09 19:55 ` Jeremy Fitzhardinge
2010-11-10  0:15   ` Haitao Shan
2010-11-10  0:18     ` Haitao Shan
2010-11-10  0:41     ` Jeremy Fitzhardinge
2010-11-10  1:45       ` Haitao Shan
2010-11-10  2:15         ` Jeremy Fitzhardinge
2010-11-19 18:17           ` Ian Jackson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.