From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH]ACPI: workaround for S3 fail in two facs tables case Date: Thu, 25 Feb 2010 13:17:17 +0000 Message-ID: <4B86866D020000780003147F@vpn.id2.novell.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser , Gang Wei Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org >>> Keir Fraser 25.02.10 12:58 >>> >What do you think? And I was looking at Linux 2.6.27 -- has behaviour = there >chanegd since then? Not much, but it got improved - 2.6.33 has /* * Expand the 32-bit FACS and DSDT addresses to 64-bit as = necessary. * Later code will always use the X 64-bit field. Also, check for = an * address mismatch between the 32-bit and 64-bit address fields * (FIRMWARE_CTRL/X_FIRMWARE_CTRL, DSDT/X_DSDT) which would = indicate * the presence of two FACS or two DSDT tables. */ if (!acpi_gbl_FADT.Xfacs) { acpi_gbl_FADT.Xfacs =3D (u64) acpi_gbl_FADT.facs; } else if (acpi_gbl_FADT.facs && (acpi_gbl_FADT.Xfacs !=3D (u64) acpi_gbl_FADT.facs)) { ACPI_WARNING((AE_INFO, "32/64 FACS address mismatch in FADT - two FACS = tables!")); } and /* * Check for FACS and DSDT address mismatches. An address mismatch = between * the 32-bit and 64-bit address fields (FIRMWARE_CTRL/X_FIRMWARE_C= TRL and * DSDT/X_DSDT) would indicate the presence of two FACS or two = DSDT tables. */ if (acpi_gbl_FADT.facs && (acpi_gbl_FADT.Xfacs !=3D (u64) acpi_gbl_FADT.facs)) { ACPI_WARNING((AE_INFO, "32/64X FACS address mismatch in FADT - " "%8.8X/%8.8X%8.8X, using 32", acpi_gbl_FADT.facs, ACPI_FORMAT_UINT64(acpi_gbl_FADT.Xfacs))); acpi_gbl_FADT.Xfacs =3D (u64) acpi_gbl_FADT.facs; } (and as the comments say, each repeated for the DSDT). Jan