Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1253746 > unrolled thread

[PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq handler

Started byChen Yu <yu.c.chen@intel.com>
First post2015-10-22 14:10 +0200
Last post2015-10-24 18:10 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq handler Chen Yu <yu.c.chen@intel.com> - 2015-10-22 14:10 +0200
    Re: [PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq handler "Rafael J. Wysocki" <rjw@rjwysocki.net> - 2015-10-24 15:10 +0200
      RE: [PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq  handler "Chen, Yu C" <yu.c.chen@intel.com> - 2015-10-24 18:10 +0200

#1253746 — [PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq handler

FromChen Yu <yu.c.chen@intel.com>
Date2015-10-22 14:10 +0200
Subject[PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq handler
Message-ID<qmmQX-1Wt-41@gated-at.bofh.it>
Currently when system is trying to uninstall the acpi irq
handler, it uses the acpi_gbl_FADT.sci_interrupt directly.
But acpi irq handler is actually installed by mapped irq
in acpi_os_install_interrupt_handler, so this patch fixes
this problem by using the mapped irq returned from acpi_gsi_to_irq.

Cc: <stable@vger.kernel.org> # 2.6.39+
Acked-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
---
 drivers/acpi/osl.c   | 10 +++++++---
 include/linux/acpi.h |  3 +++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index 739a4a6..2e9eccf 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -81,6 +81,7 @@ static struct workqueue_struct *kacpid_wq;
 static struct workqueue_struct *kacpi_notify_wq;
 static struct workqueue_struct *kacpi_hotplug_wq;
 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
@@ -856,17 +857,20 @@ acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler,
 		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) ||
+			IS_INVALID_ACPI_IRQ(acpi_sci_irq))
 		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;
 }
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 43856d1..bad159c 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -193,6 +193,9 @@ int acpi_ioapic_registered(acpi_handle handle, u32 gsi_base);
 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)
+#define IS_INVALID_ACPI_IRQ(x) unlikely((x) == INVALID_ACPI_IRQ)
 
 extern int sbf_port;
 extern unsigned long acpi_realmode_flags;
-- 
1.8.4.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1255178

From"Rafael J. Wysocki" <rjw@rjwysocki.net>
Date2015-10-24 15:10 +0200
Message-ID<qn6K5-1az-9@gated-at.bofh.it>
In reply to#1253746
On Thursday, October 22, 2015 08:03:08 PM Chen Yu wrote:
> Currently when system is trying to uninstall the acpi irq
> handler, it uses the acpi_gbl_FADT.sci_interrupt directly.
> But acpi irq handler is actually installed by mapped irq
> in acpi_os_install_interrupt_handler, so this patch fixes
> this problem by using the mapped irq returned from acpi_gsi_to_irq.
> 
> Cc: <stable@vger.kernel.org> # 2.6.39+
> Acked-by: Lv Zheng <lv.zheng@intel.com>
> Signed-off-by: Chen Yu <yu.c.chen@intel.com>
> ---
>  drivers/acpi/osl.c   | 10 +++++++---
>  include/linux/acpi.h |  3 +++
>  2 files changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
> index 739a4a6..2e9eccf 100644
> --- a/drivers/acpi/osl.c
> +++ b/drivers/acpi/osl.c
> @@ -81,6 +81,7 @@ static struct workqueue_struct *kacpid_wq;
>  static struct workqueue_struct *kacpi_notify_wq;
>  static struct workqueue_struct *kacpi_hotplug_wq;
>  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
> @@ -856,17 +857,20 @@ acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler,
>  		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) ||
> +			IS_INVALID_ACPI_IRQ(acpi_sci_irq))

The white space doesn't follow the kernel coding style, should be something
like

	if ((gsi != acpi_gbl_FADT.sci_interrupt) ||
	    IS_INVALID_ACPI_IRQ(acpi_sci_irq))

(spaces instead of the second tab).

Another minor nit is that this probably is the only place you check the
IS_INVALID_ACPI_IRQ(acpi_sci_irq) thing without logical negation and you
only pass acpi_sci_irq to IS_INVALID_ACPI_IRQ() AFAICS.

It would be more straightforward to define something like acpi_sci_irq_valid()
instead (see below) IMO.

>  		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;
>  }
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index 43856d1..bad159c 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -193,6 +193,9 @@ int acpi_ioapic_registered(acpi_handle handle, u32 gsi_base);
>  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)

#define INVALID_ACPI_IRQ	((unsigned int)-1)

> +#define IS_INVALID_ACPI_IRQ(x) unlikely((x) == INVALID_ACPI_IRQ)

Maybe something like:

	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;
> 

Thanks,
Rafael

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1255224 — RE: [PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq handler

From"Chen, Yu C" <yu.c.chen@intel.com>
Date2015-10-24 18:10 +0200
SubjectRE: [PATCH 1/3] ACPI: Using correct irq when uninstalling acpi irq handler
Message-ID<qn9yh-5bR-5@gated-at.bofh.it>
In reply to#1255178
SGksIFJhZmFlbA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFJhZmFl
bCBKLiBXeXNvY2tpIFttYWlsdG86cmp3QHJqd3lzb2NraS5uZXRdDQo+IFNlbnQ6IFNhdHVyZGF5
LCBPY3RvYmVyIDI0LCAyMDE1IDk6MzIgUE0NCj4gVG86IENoZW4sIFl1IEMNCj4gQ2M6IGxlbmJA
a2VybmVsLm9yZzsgWmhhbmcsIFJ1aTsgWmhlbmcsIEx2OyBsaW51eC1hY3BpQHZnZXIua2VybmVs
Lm9yZzsNCj4gbGludXgtcG1Admdlci5rZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJu
ZWwub3JnOw0KPiBzdGFibGVAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg
MS8zXSBBQ1BJOiBVc2luZyBjb3JyZWN0IGlycSB3aGVuIHVuaW5zdGFsbGluZyBhY3BpIGlycQ0K
PiBoYW5kbGVyDQo+IA0KPiBPbiBUaHVyc2RheSwgT2N0b2JlciAyMiwgMjAxNSAwODowMzowOCBQ
TSBDaGVuIFl1IHdyb3RlOg0KPiA+IEN1cnJlbnRseSB3aGVuIHN5c3RlbSBpcyB0cnlpbmcgdG8g
dW5pbnN0YWxsIHRoZSBhY3BpIGlycSBoYW5kbGVyLCBpdA0KPiA+IHVzZXMgdGhlIGFjcGlfZ2Js
X0ZBRFQuc2NpX2ludGVycnVwdCBkaXJlY3RseS4NCj4gPiBCdXQgYWNwaSBpcnEgaGFuZGxlciBp
cyBhY3R1YWxseSBpbnN0YWxsZWQgYnkgbWFwcGVkIGlycSBpbg0KPiA+IGFjcGlfb3NfaW5zdGFs
bF9pbnRlcnJ1cHRfaGFuZGxlciwgc28gdGhpcyBwYXRjaCBmaXhlcyB0aGlzIHByb2JsZW0gYnkN
Cj4gPiB1c2luZyB0aGUgbWFwcGVkIGlycSByZXR1cm5lZCBmcm9tIGFjcGlfZ3NpX3RvX2lycS4N
Cj4gPg0KPiA+IENjOiA8c3RhYmxlQHZnZXIua2VybmVsLm9yZz4gIyAyLjYuMzkrDQo+ID4gQWNr
ZWQtYnk6IEx2IFpoZW5nIDxsdi56aGVuZ0BpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTog
Q2hlbiBZdSA8eXUuYy5jaGVuQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9hY3Bp
L29zbC5jICAgfCAxMCArKysrKysrLS0tDQo+ID4gIGluY2x1ZGUvbGludXgvYWNwaS5oIHwgIDMg
KysrDQo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMo
LSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2Fj
cGkvb3NsLmMgaW5kZXgNCj4gPiA3MzlhNGE2Li4yZTllY2NmIDEwMDY0NA0KPiA+IC0tLSBhL2Ry
aXZlcnMvYWNwaS9vc2wuYw0KPiA+ICsrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYw0KPiA+IEBAIC04
MSw2ICs4MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2FjcGlkX3dxOyAg
c3RhdGljDQo+ID4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmthY3BpX25vdGlmeV93cTsgIHN0
YXRpYyBzdHJ1Y3QNCj4gPiB3b3JrcXVldWVfc3RydWN0ICprYWNwaV9ob3RwbHVnX3dxOyAgc3Rh
dGljIGJvb2wgYWNwaV9vc19pbml0aWFsaXplZDsNCj4gPiArdW5zaWduZWQgaW50IGFjcGlfc2Np
X2lycSA9IElOVkFMSURfQUNQSV9JUlE7DQo+ID4NCj4gPiAgLyoNCj4gPiAgICogVGhpcyBsaXN0
IG9mIHBlcm1hbmVudCBtYXBwaW5ncyBpcyBmb3IgbWVtb3J5IHRoYXQgbWF5IGJlIGFjY2Vzc2Vk
DQo+ID4gZnJvbSBAQCAtODU2LDE3ICs4NTcsMjAgQEAgYWNwaV9vc19pbnN0YWxsX2ludGVycnVw
dF9oYW5kbGVyKHUzMiBnc2ksDQo+IGFjcGlfb3NkX2hhbmRsZXIgaGFuZGxlciwNCj4gPiAgCQlh
Y3BpX2lycV9oYW5kbGVyID0gTlVMTDsNCj4gPiAgCQlyZXR1cm4gQUVfTk9UX0FDUVVJUkVEOw0K
PiA+ICAJfQ0KPiA+ICsJYWNwaV9zY2lfaXJxID0gaXJxOw0KPiA+DQo+ID4gIAlyZXR1cm4gQUVf
T0s7DQo+ID4gIH0NCj4gPg0KPiA+IC1hY3BpX3N0YXR1cyBhY3BpX29zX3JlbW92ZV9pbnRlcnJ1
cHRfaGFuZGxlcih1MzIgaXJxLA0KPiA+IGFjcGlfb3NkX2hhbmRsZXIgaGFuZGxlcikNCj4gPiAr
YWNwaV9zdGF0dXMgYWNwaV9vc19yZW1vdmVfaW50ZXJydXB0X2hhbmRsZXIodTMyIGdzaSwNCj4g
PiArYWNwaV9vc2RfaGFuZGxlciBoYW5kbGVyKQ0KPiA+ICB7DQo+ID4gLQlpZiAoaXJxICE9IGFj
cGlfZ2JsX0ZBRFQuc2NpX2ludGVycnVwdCkNCj4gPiArCWlmICgoZ3NpICE9IGFjcGlfZ2JsX0ZB
RFQuc2NpX2ludGVycnVwdCkgfHwNCj4gPiArCQkJSVNfSU5WQUxJRF9BQ1BJX0lSUShhY3BpX3Nj
aV9pcnEpKQ0KPiANCj4gVGhlIHdoaXRlIHNwYWNlIGRvZXNuJ3QgZm9sbG93IHRoZSBrZXJuZWwg
Y29kaW5nIHN0eWxlLCBzaG91bGQgYmUgc29tZXRoaW5nDQo+IGxpa2UNCj4gDQo+IAlpZiAoKGdz
aSAhPSBhY3BpX2dibF9GQURULnNjaV9pbnRlcnJ1cHQpIHx8DQo+IAkgICAgSVNfSU5WQUxJRF9B
Q1BJX0lSUShhY3BpX3NjaV9pcnEpKQ0KPiANCj4gKHNwYWNlcyBpbnN0ZWFkIG9mIHRoZSBzZWNv
bmQgdGFiKS4NCj4gDQpBaCwgZ290IGl0LCB0aGFua3MuDQoNCj4gQW5vdGhlciBtaW5vciBuaXQg
aXMgdGhhdCB0aGlzIHByb2JhYmx5IGlzIHRoZSBvbmx5IHBsYWNlIHlvdSBjaGVjayB0aGUNCj4g
SVNfSU5WQUxJRF9BQ1BJX0lSUShhY3BpX3NjaV9pcnEpIHRoaW5nIHdpdGhvdXQgbG9naWNhbCBu
ZWdhdGlvbiBhbmQgeW91DQo+IG9ubHkgcGFzcyBhY3BpX3NjaV9pcnEgdG8gSVNfSU5WQUxJRF9B
Q1BJX0lSUSgpIEFGQUlDUy4NCj4gDQo+IEl0IHdvdWxkIGJlIG1vcmUgc3RyYWlnaHRmb3J3YXJk
IHRvIGRlZmluZSBzb21ldGhpbmcgbGlrZSBhY3BpX3NjaV9pcnFfdmFsaWQoKQ0KPiBpbnN0ZWFk
IChzZWUgYmVsb3cpIElNTy4NCj4gDQo+ID4gIAkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7DQo+
ID4NCj4gPiAtCWZyZWVfaXJxKGlycSwgYWNwaV9pcnEpOw0KPiA+ICsJZnJlZV9pcnEoYWNwaV9z
Y2lfaXJxLCBhY3BpX2lycSk7DQo+ID4gIAlhY3BpX2lycV9oYW5kbGVyID0gTlVMTDsNCj4gPiAr
CWFjcGlfc2NpX2lycSA9IElOVkFMSURfQUNQSV9JUlE7DQo+ID4NCj4gPiAgCXJldHVybiBBRV9P
SzsNCj4gPiAgfQ0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1
ZGUvbGludXgvYWNwaS5oIGluZGV4DQo+ID4gNDM4NTZkMS4uYmFkMTU5YyAxMDA2NDQNCj4gPiAt
LS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5o
DQo+ID4gQEAgLTE5Myw2ICsxOTMsOSBAQCBpbnQgYWNwaV9pb2FwaWNfcmVnaXN0ZXJlZChhY3Bp
X2hhbmRsZSBoYW5kbGUsIHUzMg0KPiA+IGdzaV9iYXNlKTsgIHZvaWQgYWNwaV9pcnFfc3RhdHNf
aW5pdCh2b2lkKTsgIGV4dGVybiB1MzINCj4gPiBhY3BpX2lycV9oYW5kbGVkOyAgZXh0ZXJuIHUz
MiBhY3BpX2lycV9ub3RfaGFuZGxlZDsNCj4gPiArZXh0ZXJuIHVuc2lnbmVkIGludCBhY3BpX3Nj
aV9pcnE7DQo+ID4gKyNkZWZpbmUgSU5WQUxJRF9BQ1BJX0lSUSAoKHVuc2lnbmVkKS0xKQ0KPiAN
Cj4gI2RlZmluZSBJTlZBTElEX0FDUElfSVJRCSgodW5zaWduZWQgaW50KS0xKQ0KPiANCj4gPiAr
I2RlZmluZSBJU19JTlZBTElEX0FDUElfSVJRKHgpIHVubGlrZWx5KCh4KSA9PSBJTlZBTElEX0FD
UElfSVJRKQ0KPiANCj4gTWF5YmUgc29tZXRoaW5nIGxpa2U6DQo+IA0KPiAJc3RhdGljIGlubGlu
ZSBib29sIGFjcGlfc2NpX2lycV92YWxpZCh2b2lkKQ0KPiAJew0KPiAJCXJldHVybiBhY3BpX3Nj
aV9pcnEgIT0gSU5WQUxJRF9BQ1BJX0lSUTsNCj4gCX0NCj4gDQpPSywgd2lsbCBzZW5kIG91dCBh
IHZlcnNpb24gMiB3aXRoIGJvdGggYW5vdGhlciB0d28gcGF0Y2hlcyBtb2RpZmllZC4NCg0KQmVz
dCBSZWdhcmRzLA0KWXUNCg==
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web