mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ACPI: Use correct IRQ when uninstalling ACPI interrupt handler
Currently when the system is trying to uninstall the ACPI interrupt handler, it uses acpi_gbl_FADT.sci_interrupt as the IRQ number. However, the IRQ number that the ACPI interrupt handled is installed for comes from acpi_gsi_to_irq() and that is the number that should be used for the handler removal. Fix this problem by using the mapped IRQ returned from acpi_gsi_to_irq() as appropriate. Cc: All applicable <stable@vger.kernel.org> Acked-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Chen Yu <yu.c.chen@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									32b88194f7
								
							
						
					
					
						commit
						49e4b84333
					
				
					 2 changed files with 12 additions and 3 deletions
				
			
		| 
						 | 
					@ -81,6 +81,7 @@ static struct workqueue_struct *kacpid_wq;
 | 
				
			||||||
static struct workqueue_struct *kacpi_notify_wq;
 | 
					static struct workqueue_struct *kacpi_notify_wq;
 | 
				
			||||||
static struct workqueue_struct *kacpi_hotplug_wq;
 | 
					static struct workqueue_struct *kacpi_hotplug_wq;
 | 
				
			||||||
static bool acpi_os_initialized;
 | 
					static bool acpi_os_initialized;
 | 
				
			||||||
 | 
					unsigned int acpi_sci_irq = INVALID_ACPI_IRQ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * This list of permanent mappings is for memory that may be accessed from
 | 
					 * This list of permanent mappings is for memory that may be accessed from
 | 
				
			||||||
| 
						 | 
					@ -856,17 +857,19 @@ acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler,
 | 
				
			||||||
		acpi_irq_handler = NULL;
 | 
							acpi_irq_handler = NULL;
 | 
				
			||||||
		return AE_NOT_ACQUIRED;
 | 
							return AE_NOT_ACQUIRED;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						acpi_sci_irq = irq;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return AE_OK;
 | 
						return AE_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
acpi_status acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler)
 | 
					acpi_status acpi_os_remove_interrupt_handler(u32 gsi, acpi_osd_handler handler)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (irq != acpi_gbl_FADT.sci_interrupt)
 | 
						if (gsi != acpi_gbl_FADT.sci_interrupt || !acpi_sci_irq_valid())
 | 
				
			||||||
		return AE_BAD_PARAMETER;
 | 
							return AE_BAD_PARAMETER;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	free_irq(irq, acpi_irq);
 | 
						free_irq(acpi_sci_irq, acpi_irq);
 | 
				
			||||||
	acpi_irq_handler = NULL;
 | 
						acpi_irq_handler = NULL;
 | 
				
			||||||
 | 
						acpi_sci_irq = INVALID_ACPI_IRQ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return AE_OK;
 | 
						return AE_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -193,6 +193,12 @@ int acpi_ioapic_registered(acpi_handle handle, u32 gsi_base);
 | 
				
			||||||
void acpi_irq_stats_init(void);
 | 
					void acpi_irq_stats_init(void);
 | 
				
			||||||
extern u32 acpi_irq_handled;
 | 
					extern u32 acpi_irq_handled;
 | 
				
			||||||
extern u32 acpi_irq_not_handled;
 | 
					extern u32 acpi_irq_not_handled;
 | 
				
			||||||
 | 
					extern unsigned int acpi_sci_irq;
 | 
				
			||||||
 | 
					#define INVALID_ACPI_IRQ	((unsigned)-1)
 | 
				
			||||||
 | 
					static inline bool acpi_sci_irq_valid(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return acpi_sci_irq != INVALID_ACPI_IRQ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int sbf_port;
 | 
					extern int sbf_port;
 | 
				
			||||||
extern unsigned long acpi_realmode_flags;
 | 
					extern unsigned long acpi_realmode_flags;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue