xen-devel
Re: [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle
On 04/02/2010 09:27 AM, Wei, Gang wrote:
Updated the 2nd patch, only set MWAIT feature for dom0.
Jimmy
ACPI: re-enable mwait for xen cpuidle
Xen hypervisor doesn't export mwait feature to dom0, but latest Linux kernel
start to check this feature while initializing _PDC object. Modify xen_cpuid to
re-enable mwait for xen cpuidle.
What if the CPU really doesn't have MWAIT?
But I agree with your original assessment that setting MWAIT just to get
a couple of paths in ACPI parsing enabled is probably overkill, but I
don't like the idea of putting xen-specific tests into the acpi code.
Would it be possible to change the parser code to parse unconditionally
and then ignore the MWAIT-specific stuff later on? (I haven't looked at
the structure of the code, so I'm not sure if this suggestion even makes
sense.)
J
Signed-off-by: Wei Gang<gang.wei@xxxxxxxxx>
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index c3e8bff..82f3826 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -182,6 +182,9 @@ static void __init xen_banner(void)
static __read_mostly unsigned int cpuid_leaf1_edx_mask = ~0;
static __read_mostly unsigned int cpuid_leaf1_ecx_mask = ~0;
static __read_mostly unsigned int cpuid_leaf81_edx_mask = ~0;
+static __read_mostly unsigned int cpuid_leaf1_ecx_set;
+static __read_mostly unsigned int cpuid_leaf5_ecx_set;
+static __read_mostly unsigned int cpuid_leaf5_edx_set;
static void xen_cpuid(unsigned int *ax, unsigned int *bx,
unsigned int *cx, unsigned int *dx)
@@ -189,6 +192,8 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
unsigned maskebx = ~0;
unsigned maskecx = ~0;
unsigned maskedx = ~0;
+ unsigned setecx = 0;
+ unsigned setedx = 0;
/*
* Mask out inconvenient features, to try and disable as many
@@ -198,6 +203,12 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
case 0x1:
maskecx = cpuid_leaf1_ecx_mask;
maskedx = cpuid_leaf1_edx_mask;
+ setecx = cpuid_leaf1_ecx_set;
+ break;
+
+ case 0x5: /* MWAIT INFO */
+ setecx = cpuid_leaf5_ecx_set;
+ setedx = cpuid_leaf5_edx_set;
break;
case 0xb:
@@ -220,6 +231,8 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
*bx&= maskebx;
*cx&= maskecx;
*dx&= maskedx;
+ *cx |= setecx;
+ *dx |= setedx;
}
static __init void xen_init_cpuid_mask(void)
@@ -238,6 +251,11 @@ 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 */
+ else {
+ cpuid_leaf1_ecx_set = 1<< (X86_FEATURE_MWAIT % 32);
+ cpuid_leaf5_ecx_set = 0x3; /* EXTENSIONS_SUPPORTED |
INTERRUPT_BREAK */
+ cpuid_leaf5_edx_set = ~0;
+ }
ax = 1;
cx = 0;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle, Wei, Gang
- RE: [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle, Wei, Gang
- Re: [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle,
Jeremy Fitzhardinge <=
- RE: [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle, Wei, Gang
- Re: [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle, Jeremy Fitzhardinge
- RE: [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle, Wei, Gang
|
|
|