Mailing List Archive

[xen-unstable] x86: fix dom0 S3 when x2apic is used.
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1268910145 0
# Node ID 7751288b1386e530f65c5a2ea3e1616bb50e34ef
# Parent 84c563da39c81ba0fe32aab37835c2ba54811319
x86: fix dom0 S3 when x2apic is used.

1) Some variables and functions in xen/arch/x86/genapic/x2apic.c
should not be marked with __init* as they will be used during s3
resume;
2) In do_suspend_lowlevel -> restore_rest_processor_state ->
mcheck_init, lapic is accessed, but x2apic hasn't been re-enabled yet
(x2apic is re-enabled() in device_power_up -> lapic_resume). The patch
moves mcheck_init to a later place.

Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
---
xen/arch/x86/acpi/power.c | 2 ++
xen/arch/x86/acpi/suspend.c | 1 -
xen/arch/x86/genapic/x2apic.c | 8 ++++----
3 files changed, 6 insertions(+), 5 deletions(-)

diff -r 84c563da39c8 -r 7751288b1386 xen/arch/x86/acpi/power.c
--- a/xen/arch/x86/acpi/power.c Thu Mar 18 07:44:21 2010 +0000
+++ b/xen/arch/x86/acpi/power.c Thu Mar 18 11:02:25 2010 +0000
@@ -207,6 +207,8 @@ static int enter_state(u32 state)

device_power_up();

+ mcheck_init(&boot_cpu_data);
+
printk(XENLOG_INFO "Finishing wakeup from ACPI S%d state.\n", state);

if ( (state == ACPI_STATE_S3) && error )
diff -r 84c563da39c8 -r 7751288b1386 xen/arch/x86/acpi/suspend.c
--- a/xen/arch/x86/acpi/suspend.c Thu Mar 18 07:44:21 2010 +0000
+++ b/xen/arch/x86/acpi/suspend.c Thu Mar 18 11:02:25 2010 +0000
@@ -82,5 +82,4 @@ void restore_rest_processor_state(void)
wrmsrl(MSR_IA32_CR_PAT, host_pat);

mtrr_bp_restore();
- mcheck_init(&boot_cpu_data);
}
diff -r 84c563da39c8 -r 7751288b1386 xen/arch/x86/genapic/x2apic.c
--- a/xen/arch/x86/genapic/x2apic.c Thu Mar 18 07:44:21 2010 +0000
+++ b/xen/arch/x86/genapic/x2apic.c Thu Mar 18 11:02:25 2010 +0000
@@ -23,19 +23,19 @@
#include <xen/smp.h>
#include <asm/mach-default/mach_mpparse.h>

-static int __initdata x2apic = 1;
+static int x2apic = 1;
boolean_param("x2apic", x2apic);

-static int __initdata x2apic_phys; /* By default we use logical cluster mode. */
+static int x2apic_phys; /* By default we use logical cluster mode. */
boolean_param("x2apic_phys", x2apic_phys);

-static int __init probe_x2apic_phys(void)
+static int probe_x2apic_phys(void)
{
return x2apic && x2apic_phys && x2apic_is_available() &&
iommu_supports_eim();
}

-static int __init probe_x2apic_cluster(void)
+static int probe_x2apic_cluster(void)
{
return x2apic && !x2apic_phys && x2apic_is_available() &&
iommu_supports_eim();

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