mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	ACPI / processor: Fix STARTING/DYING action in acpi_cpu_soft_notify()
During CPU online/offline testing on a large system, one of the processors got stuck after the message "bad: scheduling from the idle thread!". The problem is that acpi_cpu_soft_notify() calls acpi_bus_get_device() for all action types. CPU_STARTING and CPU_DYING do not allow the notify handlers to sleep. However, acpi_bus_get_device() can sleep in acpi_ut_acquire_mutex(). Change acpi_cpu_soft_notify() to return immediately for CPU_STARTING and CPU_DYING as they have no action in this handler. Signed-off-by: Toshi Kani <toshi.kani@hp.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									c401eb8ee3
								
							
						
					
					
						commit
						8da8373447
					
				
					 1 changed files with 7 additions and 0 deletions
				
			
		|  | @ -121,6 +121,13 @@ static int acpi_cpu_soft_notify(struct notifier_block *nfb, | ||||||
| 	struct acpi_processor *pr = per_cpu(processors, cpu); | 	struct acpi_processor *pr = per_cpu(processors, cpu); | ||||||
| 	struct acpi_device *device; | 	struct acpi_device *device; | ||||||
| 
 | 
 | ||||||
|  | 	/*
 | ||||||
|  | 	 * CPU_STARTING and CPU_DYING must not sleep. Return here since | ||||||
|  | 	 * acpi_bus_get_device() may sleep. | ||||||
|  | 	 */ | ||||||
|  | 	if (action == CPU_STARTING || action == CPU_DYING) | ||||||
|  | 		return NOTIFY_DONE; | ||||||
|  | 
 | ||||||
| 	if (!pr || acpi_bus_get_device(pr->handle, &device)) | 	if (!pr || acpi_bus_get_device(pr->handle, &device)) | ||||||
| 		return NOTIFY_DONE; | 		return NOTIFY_DONE; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Toshi Kani
						Toshi Kani