mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ACPICA: Clear status of GPEs before enabling them
Commit18996f2db9("ACPICA: Events: Stop unconditionally clearing ACPI IRQs during suspend/resume") was added to stop clearing event status bits unconditionally in the system-wide suspend and resume paths. This was done because of an issue with a laptop lid appaering to be closed even when it was used to wake up the system from suspend (see https://bugzilla.kernel.org/show_bug.cgi?id=196249), which happened because event status bits were cleared unconditionally on system resume. Though this change fixed the issue in the resume path, it introduced regressions in a few suspend paths. First regression was reported and fixed in the S5 entry path by commitfa85015c0d("ACPICA: Clear status of all events when entering S5"). Next regression was reported and fixed for all legacy sleep paths by commitf317c7dc12("ACPICA: Clear status of all events when entering sleep states"). However, there still is a suspend-to-idle regression, since suspend-to-idle does not follow the legacy sleep paths. In the suspend-to-idle case, wakeup is enabled as part of device suspend. If the status bits of wakeup GPEs are set when they are enabled, it causes a premature system wakeup to occur. To address that problem, partially revert commit18996f2db9to restore GPE status bits clearing before the GPE is enabled in acpi_ev_enable_gpe(). Fixes:18996f2db9("ACPICA: Events: Stop unconditionally clearing ACPI IRQs during suspend/resume") Signed-off-by: Furquan Shaikh <furquan@google.com> Cc: 4.17+ <stable@vger.kernel.org> # 4.17+ [ rjw: Subject & changelog ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									8c2ffd9174
								
							
						
					
					
						commit
						c8b1917c89
					
				
					 1 changed files with 5 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -81,8 +81,12 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 | 
			
		|||
 | 
			
		||||
	ACPI_FUNCTION_TRACE(ev_enable_gpe);
 | 
			
		||||
 | 
			
		||||
	/* Enable the requested GPE */
 | 
			
		||||
	/* Clear the GPE status */
 | 
			
		||||
	status = acpi_hw_clear_gpe(gpe_event_info);
 | 
			
		||||
	if (ACPI_FAILURE(status))
 | 
			
		||||
		return_ACPI_STATUS(status);
 | 
			
		||||
 | 
			
		||||
	/* Enable the requested GPE */
 | 
			
		||||
	status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE);
 | 
			
		||||
	return_ACPI_STATUS(status);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue