lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 25 Nov 2015 02:37:52 +0000 From: "Chen, Yu C" <yu.c.chen@...el.com> To: "ben@...adent.org.uk" <ben@...adent.org.uk> CC: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "Zheng, Lv" <lv.zheng@...el.com>, "stable@...r.kernel.org" <stable@...r.kernel.org>, "akpm@...ux-foundation.org" <akpm@...ux-foundation.org>, "Wysocki, Rafael J" <rafael.j.wysocki@...el.com> Subject: Re: [PATCH 3.2 20/52] ACPI: Use correct IRQ when uninstalling ACPI interrupt handler Hi, Ben, ok for me. thanks, Yu On Tue, 2015-11-24 at 22:33 +0000, Ben Hutchings wrote: > 3.2.74-rc1 review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Chen Yu <yu.c.chen@...el.com> > > commit 49e4b84333f338d4f183f28f1f3c1131b9fb2b5a upstream. > > 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. > > Acked-by: Lv Zheng <lv.zheng@...el.com> > Signed-off-by: Chen Yu <yu.c.chen@...el.com> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@...el.com> > [bwh: Backported to 3.2: adjust context] > Signed-off-by: Ben Hutchings <ben@...adent.org.uk> > --- > drivers/acpi/osl.c | 9 ++++++--- > include/linux/acpi.h | 6 ++++++ > 2 files changed, 12 insertions(+), 3 deletions(-) > > --- a/drivers/acpi/osl.c > +++ b/drivers/acpi/osl.c > @@ -82,6 +82,7 @@ static struct workqueue_struct *kacpid_w > static struct workqueue_struct *kacpi_notify_wq; > struct workqueue_struct *kacpi_hotplug_wq; > EXPORT_SYMBOL(kacpi_hotplug_wq); > +unsigned int acpi_sci_irq = INVALID_ACPI_IRQ; > > struct acpi_res_list { > resource_size_t start; > @@ -566,17 +567,19 @@ acpi_os_install_interrupt_handler(u32 gs > acpi_irq_handler = NULL; > return AE_NOT_ACQUIRED; > } > + acpi_sci_irq = irq; > > 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; > > - free_irq(irq, acpi_irq); > + free_irq(acpi_sci_irq, acpi_irq); > acpi_irq_handler = NULL; > + acpi_sci_irq = INVALID_ACPI_IRQ; > > return AE_OK; > } > --- a/include/linux/acpi.h > +++ b/include/linux/acpi.h > @@ -110,6 +110,12 @@ int acpi_unregister_ioapic(acpi_handle h > void acpi_irq_stats_init(void); > extern u32 acpi_irq_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 unsigned long acpi_realmode_flags; >
Powered by blists - more mailing lists