Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 86

kernel-2.6.18-194.11.1.el5.src.rpm

From: Matthew Garrett <mjg@redhat.com>
Date: Thu, 30 Oct 2008 13:33:03 +0000
Subject: [acpi] fix boot hang on old systems without _CST methods
Message-id: 20081030133303.GA30703@srcf.ucam.org
O-Subject: [RHEL 5.3 PATCH] Bug #467927 - fix boot hang on old systems without _CST methods
Bugzilla: 467927
RH-Acked-by: Peter Martuccelli <peterm@redhat.com>
RH-Acked-by: Aristeu Rozanski <aris@redhat.com>

The fix for 443516 means that advertised C3 states will be entered even
if the system does not have a bm_control flag set to indicate support
for OS/hardware DMA arbitration. This turns out to cause problems on
older systems. The Windows behaviour is to only enter C3 on such systems
if C state transition information is exported via a _CST method. This
patch adds an extra check in the C3 verification routine and has been
verified to fix the system in 467927 that otherwise hangs on boot. This
is a backport of upstream commit
ed3110efb538d7acbf635095c1382118f7414f75 .

diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index ce47f96..f40b175 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -843,11 +843,17 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
 	}
 
 	if (pr->flags.bm_check) {
-		/* bus mastering control is necessary */
 		if (!pr->flags.bm_control) {
-			/* In this case we enter C3 without bus mastering */
-			ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-				"C3 support without bus mastering control\n"));
+			if (pr->flags.has_cst != 1) {
+				/* bus mastering control is necessary */
+				ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+					"C3 support requires BM control\n"));
+				return;
+			} else {
+				/* Here we enter C3 without bus mastering */
+				ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+					"C3 support without BM control\n"));
+			}
 		}
 	} else {
 		/*