Re: 2.6.21-rc6-mm1

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Venki Pallipadi
Date: Tuesday, April 10, 2007 - 3:20 pm

On Mon, Apr 09, 2007 at 07:40:52PM +0200, Rafael J. Wysocki wrote:

Rafael: Below patch should fix the hang.
Len: Please include this patch in acpi-test.

Thanks,
Venki

Prevent hang on x86-64, when ACPI processor driver is added as a module on
a system that does not support C-states.

x86-64 expects all idle handlers to enable interrupts before returning from
idle handler. This is due to enter_idle(), exit_idle() races. Make
cpuidle_idle_call() confirm to this when there is no pm_idle_old.

Also, cpuidle look at the return values of attch_driver() and set
current_driver to NULL if attach fails on all CPUs.

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>

Index: linux-2.6.21-rc6-mm1/drivers/cpuidle/cpuidle.c
===================================================================
--- linux-2.6.21-rc6-mm1.orig/drivers/cpuidle/cpuidle.c
+++ linux-2.6.21-rc6-mm1/drivers/cpuidle/cpuidle.c
@@ -43,6 +43,8 @@ static void cpuidle_idle_call(void)
 	if (dev->status != CPUIDLE_STATUS_DOIDLE) {
 		if (pm_idle_old)
 			pm_idle_old();
+		else
+			local_irq_enable();
 		return;
 	}
 
Index: linux-2.6.21-rc6-mm1/drivers/cpuidle/driver.c
===================================================================
--- linux-2.6.21-rc6-mm1.orig/drivers/cpuidle/driver.c
+++ linux-2.6.21-rc6-mm1/drivers/cpuidle/driver.c
@@ -107,11 +107,20 @@ int cpuidle_switch_driver(struct cpuidle
 	cpuidle_curr_driver = drv;
 
 	if (drv) {
+		int ret = 1;
 		list_for_each_entry(dev, &cpuidle_detected_devices, device_list)
-			cpuidle_attach_driver(dev);
-		if (cpuidle_curr_governor)
+			if (cpuidle_attach_driver(dev) == 0)
+				ret = 0;
+
+		/* If attach on all devices fail, switch to NULL driver */
+		if (ret)
+			cpuidle_curr_driver = NULL;
+
+		if (cpuidle_curr_driver && cpuidle_curr_governor) {
+			printk(KERN_INFO "cpuidle: using driver %s\n",
+					drv->name);
 			cpuidle_install_idle_handler();
-		printk(KERN_INFO "cpuidle: using driver %s\n", drv->name);
+		}
 	}
 
 	return 0;
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
2.6.21-rc6-mm1, Andrew Morton, (Sun Apr 8, 2:35 pm)
Re: 2.6.21-rc6-mm1, Borislav Petkov, (Mon Apr 9, 4:13 am)
Re: 2.6.21-rc6-mm1, Rafael J. Wysocki, (Mon Apr 9, 9:08 am)
RE: 2.6.21-rc6-mm1, Pallipadi, Venkatesh, (Mon Apr 9, 9:14 am)
Re: 2.6.21-rc6-mm1, Rafael J. Wysocki, (Mon Apr 9, 10:40 am)
Re: 2.6.21-rc6-mm1, Torsten Kaiser, (Mon Apr 9, 12:03 pm)
Re: 2.6.21-rc6-mm1, Nishanth Aravamudan, (Mon Apr 9, 5:50 pm)
Re: 2.6.21-rc6-mm1, Christoph Lameter, (Mon Apr 9, 5:56 pm)
Re: 2.6.21-rc6-mm1, William Lee Irwin III, (Mon Apr 9, 6:07 pm)
Re: 2.6.21-rc6-mm1 ima &quot;BUG: held lock freed!&quot;, Joseph Fannin, (Tue Apr 10, 4:28 am)
Re: 2.6.21-rc6-mm1, Cornelia Huck, (Tue Apr 10, 5:24 am)
Re: 2.6.21-rc6-mm1, Ananth N Mavinakayan ..., (Tue Apr 10, 5:38 am)
[-mm patch] make struct proc_kpagemap static, Adrian Bunk, (Tue Apr 10, 2:08 pm)
[-mm patch] make kernel/module.c:is_exported() static, Adrian Bunk, (Tue Apr 10, 2:08 pm)
[RFC: -mm patch] fs/ocfs2/: make 3 functions static, Adrian Bunk, (Tue Apr 10, 2:08 pm)
Re: [-mm patch] make struct proc_kpagemap static, Matt Mackall, (Tue Apr 10, 2:09 pm)
Re: 2.6.21-rc6-mm1, Venki Pallipadi, (Tue Apr 10, 3:20 pm)
Re: 2.6.21-rc6-mm1 aacraid not finding device, Steve Fox, (Tue Apr 10, 3:21 pm)
Re: 2.6.21-rc6-mm1, Rafael J. Wysocki, (Wed Apr 11, 12:28 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Wed Apr 11, 12:42 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Andrew Morton, (Wed Apr 11, 1:43 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Wed Apr 11, 4:07 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Andrew Morton, (Wed Apr 11, 4:25 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Thu Apr 12, 12:50 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Thu Apr 12, 1:02 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Thu Apr 12, 4:42 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Thu Apr 12, 8:31 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Corey Minyard, (Thu Apr 12, 9:01 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Andrew Morton, (Thu Apr 12, 9:47 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Andrew Morton, (Thu Apr 12, 9:55 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Greg KH, (Thu Apr 12, 10:25 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Thu Apr 12, 10:49 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Greg KH, (Thu Apr 12, 10:58 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Thu Apr 12, 11:17 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Thu Apr 12, 11:32 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Thu Apr 12, 11:56 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Thu Apr 12, 12:22 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Thu Apr 12, 1:19 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Thu Apr 12, 1:25 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Corey Minyard, (Thu Apr 12, 2:06 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Thu Apr 12, 4:16 pm)
Re: 2.6.21-rc6-mm1, J.A. , (Tue Apr 24, 1:10 am)
Re: 2.6.21-rc6-mm1, Andrew Morton, (Tue Apr 24, 4:58 am)
Re: 2.6.21-rc6-mm1, J.A. , (Tue Apr 24, 6:43 am)
Re: 2.6.21-rc6-mm1, Andrew Morton, (Tue Apr 24, 10:22 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Wed Apr 25, 2:54 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Jiri Kosina, (Wed Apr 25, 4:28 am)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Wed Apr 25, 5:45 am)
Re: 2.6.21-rc6-mm1, J.A. , (Wed Apr 25, 1:50 pm)
start_udev and devpts [Re: 2.6.21-rc6-mm1], J.A. , (Wed Apr 25, 2:39 pm)
Re: 2.6.21-rc6-mm1 USB related boot hang, Helge Hafting, (Thu Apr 26, 11:38 am)