]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
x86: Fix an S3 bug caused by x_firmware_waking_vector
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 15 May 2008 08:55:53 +0000 (09:55 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 15 May 2008 08:55:53 +0000 (09:55 +0100)
According to ACPI spec., x_firmware_waking_vector in FACS is for
waking up in protected mode and firmware_waking_vector is for in real
mode. Xen once use x_firmware_waking_vector which can make S3 failed
on some platform. This patch fixed the bug by using non-x one.

Signed-off-by: Huacai Chen <huacai.chen@intel.com>
xen-unstable changeset:   17644:29dc52031954896a407a97cba167c197f8e1c0ed
xen-unstable date:        Thu May 15 09:38:00 2008 +0100

xen/arch/x86/acpi/boot.c

index 0e1f3ecb487255c45a7f724b1ca19687e99fd792..c7004c666bd984bbaf16f29fbd12990cd29a5227 100644 (file)
@@ -450,17 +450,10 @@ acpi_fadt_parse_sleep_info(struct fadt_descriptor_rev2 *fadt)
                        "FACS is shorter than ACPI spec allow: 0x%x",
                        facs->length);
 
-       if ((rsdp->revision < 2) || (facs->length < 32)) {
-               acpi_sinfo.wakeup_vector = facs_pa + 
-                       offsetof(struct facs_descriptor_rev2,
-                                firmware_waking_vector);
-               acpi_sinfo.vector_width = 32;
-       } else {
-               acpi_sinfo.wakeup_vector = facs_pa +
-                       offsetof(struct facs_descriptor_rev2,
-                                xfirmware_waking_vector);
-               acpi_sinfo.vector_width = 64;
-       }
+       acpi_sinfo.wakeup_vector = facs_pa + 
+               offsetof(struct facs_descriptor_rev2,
+                        firmware_waking_vector);
+       acpi_sinfo.vector_width = 32;
 
        printk(KERN_INFO PREFIX
               "                 wakeup_vec[%"PRIx64"], vec_size[%x]\n",