44 lines
1.7 KiB
Diff
44 lines
1.7 KiB
Diff
From: Rafael J. Wysocki <rjw@sisk.pl>
|
|
Date: Tue, 8 Jun 2010 08:50:53 +0000 (+0200)
|
|
Subject: ACPI / ACPICA: Fix sysfs GPE interface
|
|
X-Git-Tag: v2.6.35-rc4~72^2~6^2
|
|
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=9d3c752de65dbfa6e522f1d666deb0ac152ef367
|
|
|
|
ACPI / ACPICA: Fix sysfs GPE interface
|
|
|
|
The sysfs interface allowing user space to disable/enable GPEs
|
|
doesn't work correctly, because a GPE disabled this way will be
|
|
re-enabled shortly by acpi_ev_asynch_enable_gpe() if it was
|
|
previosuly enabled by acpi_enable_gpe() (in which case the
|
|
corresponding bit in its enable register's enable_for_run mask is
|
|
set).
|
|
|
|
To address this issue make the sysfs GPE interface use
|
|
acpi_enable_gpe() and acpi_disable_gpe() instead of acpi_set_gpe()
|
|
so that GPE reference counters are modified by it along with the
|
|
values of GPE enable registers.
|
|
|
|
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
|
|
Signed-off-by: Len Brown <len.brown@intel.com>
|
|
---
|
|
|
|
diff --git a/drivers/acpi/system.c b/drivers/acpi/system.c
|
|
index e35525b..904e8fc 100644
|
|
--- a/drivers/acpi/system.c
|
|
+++ b/drivers/acpi/system.c
|
|
@@ -388,10 +388,12 @@ static ssize_t counter_set(struct kobject *kobj,
|
|
if (index < num_gpes) {
|
|
if (!strcmp(buf, "disable\n") &&
|
|
(status & ACPI_EVENT_FLAG_ENABLED))
|
|
- result = acpi_set_gpe(handle, index, ACPI_GPE_DISABLE);
|
|
+ result = acpi_disable_gpe(handle, index,
|
|
+ ACPI_GPE_TYPE_RUNTIME);
|
|
else if (!strcmp(buf, "enable\n") &&
|
|
!(status & ACPI_EVENT_FLAG_ENABLED))
|
|
- result = acpi_set_gpe(handle, index, ACPI_GPE_ENABLE);
|
|
+ result = acpi_enable_gpe(handle, index,
|
|
+ ACPI_GPE_TYPE_RUNTIME);
|
|
else if (!strcmp(buf, "clear\n") &&
|
|
(status & ACPI_EVENT_FLAG_SET))
|
|
result = acpi_clear_gpe(handle, index);
|