Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755196AbbKYCiM (ORCPT ); Tue, 24 Nov 2015 21:38:12 -0500 Received: from mga02.intel.com ([134.134.136.20]:15273 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753721AbbKYCiF (ORCPT ); Tue, 24 Nov 2015 21:38:05 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,341,1444719600"; d="scan'208";a="858839241" From: "Chen, Yu C" To: "ben@decadent.org.uk" CC: "linux-kernel@vger.kernel.org" , "Zheng, Lv" , "stable@vger.kernel.org" , "akpm@linux-foundation.org" , "Wysocki, Rafael J" Subject: Re: [PATCH 3.2 20/52] ACPI: Use correct IRQ when uninstalling ACPI interrupt handler Thread-Topic: [PATCH 3.2 20/52] ACPI: Use correct IRQ when uninstalling ACPI interrupt handler Thread-Index: AQHRJwh5hsjOaCEcN0S6G97N6hmtCJ6rgQqA Date: Wed, 25 Nov 2015 02:37:52 +0000 Message-ID: <1448419213.15712.10.camel@localhost> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.160.87] Content-Type: text/plain; charset="utf-8" Content-ID: <54696440C1CF304DAEF6A018E0AB891C@intel.com> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id tAP2cgaL025451 Content-Length: 2755 Lines: 84 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 > > 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 > Signed-off-by: Chen Yu > Signed-off-by: Rafael J. Wysocki > [bwh: Backported to 3.2: adjust context] > Signed-off-by: Ben Hutchings > --- > 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; > ????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?