[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] ACPI: workaround for S3 fail in two facs tables case
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |