|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] ACPI: workaround for S3 fail in two facs
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1267131403 0
# Node ID f6d7b66fdb80d2e61c14cee1859fb482f9b66839
# Parent d9db3684f2921645aa00a9247ea9e7512ab3c4d6
ACPI: workaround for S3 fail in two facs tables case
Some legacy BIOS which support ACPI2.0+ may expose two FACS tables via
both FADT->FIRMWARE_CTRL and FADT->X_FIRMWARE_CTRL, but only lookup S3
waking_vector in the first one.
Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx>
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
xen/arch/x86/acpi/boot.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff -r d9db3684f292 -r f6d7b66fdb80 xen/arch/x86/acpi/boot.c
--- a/xen/arch/x86/acpi/boot.c Thu Feb 25 11:54:19 2010 +0000
+++ b/xen/arch/x86/acpi/boot.c Thu Feb 25 20:56:43 2010 +0000
@@ -365,10 +365,15 @@ acpi_fadt_parse_sleep_info(struct acpi_t
acpi_sinfo.pm1b_evt_blk.address);
/* Now FACS... */
- if (fadt->header.revision >= FADT2_REVISION_ID)
- facs_pa = fadt->Xfacs;
- else
+ facs_pa = ((fadt->header.revision >= FADT2_REVISION_ID)
+ ? fadt->Xfacs : (uint64_t)fadt->facs);
+ if (fadt->facs && ((uint64_t)fadt->facs != facs_pa)) {
+ printk(KERN_WARNING PREFIX
+ "32/64X FACS address mismatch in FADT - "
+ "%08x/%016"PRIx64", using 32",
+ fadt->facs, facs_pa);
facs_pa = (uint64_t)fadt->facs;
+ }
facs = (struct acpi_table_facs *)
__acpi_map_table(facs_pa, sizeof(struct acpi_table_facs));
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] ACPI: workaround for S3 fail in two facs tables case,
Xen patchbot-unstable <=
|
|
|
|
|