* [RFC][PATCH] ACPI / ACPICA: Always use the same lock for GPE locking
@ 2010-04-02 20:37 Rafael J. Wysocki
0 siblings, 0 replies; only message in thread
From: Rafael J. Wysocki @ 2010-04-02 20:37 UTC (permalink / raw)
To: Len Brown
Cc: Moore, Robert, Matthew Garrett, ACPI Devel Maling List, pm list,
Jesse Barnes
From: Rafael J. Wysocki <rjw@sisk.pl>
The GPE locking is now inconsistent, because acpi_set_gpe(),
acpi_enable_gpe() and acpi_disable_gpe() use acpi_gbl_gpe_lock for
this purpose, while acpi_clear_gpe() and acpi_get_gpe_status() use
the ACPI_MTX_EVENTS mutex instead (the mutex is only acquired if
they are not executed in interrupt context). Fix this by changing
acpi_clear_gpe() and acpi_get_gpe_status() so that they acquire
acpi_gbl_gpe_lock too.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Reported-by: Robert Moore <robert.moore@intel.com>
---
drivers/acpi/acpica/evxfevnt.c | 28 ++++++----------------------
1 file changed, 6 insertions(+), 22 deletions(-)
Index: linux-2.6/drivers/acpi/acpica/evxfevnt.c
===================================================================
--- linux-2.6.orig/drivers/acpi/acpica/evxfevnt.c
+++ linux-2.6/drivers/acpi/acpica/evxfevnt.c
@@ -476,19 +476,13 @@ ACPI_EXPORT_SYMBOL(acpi_clear_event)
******************************************************************************/
acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
{
+ acpi_cpu_flags cpu_flags;
acpi_status status = AE_OK;
struct acpi_gpe_event_info *gpe_event_info;
ACPI_FUNCTION_TRACE(acpi_clear_gpe);
- /* Use semaphore lock if not executing at interrupt level */
-
- if (flags & ACPI_NOT_ISR) {
- status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
- }
+ cpu_flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
/* Ensure that we have a valid GPE number */
@@ -501,9 +495,7 @@ acpi_status acpi_clear_gpe(acpi_handle g
status = acpi_hw_clear_gpe(gpe_event_info);
unlock_and_exit:
- if (flags & ACPI_NOT_ISR) {
- (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
- }
+ acpi_os_release_lock(acpi_gbl_gpe_lock, cpu_flags);
return_ACPI_STATUS(status);
}
@@ -584,19 +576,13 @@ acpi_status
acpi_get_gpe_status(acpi_handle gpe_device,
u32 gpe_number, u32 flags, acpi_event_status * event_status)
{
+ acpi_cpu_flags cpu_flags;
acpi_status status = AE_OK;
struct acpi_gpe_event_info *gpe_event_info;
ACPI_FUNCTION_TRACE(acpi_get_gpe_status);
- /* Use semaphore lock if not executing at interrupt level */
-
- if (flags & ACPI_NOT_ISR) {
- status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
- }
+ cpu_flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
/* Ensure that we have a valid GPE number */
@@ -614,9 +600,7 @@ acpi_get_gpe_status(acpi_handle gpe_devi
*event_status |= ACPI_EVENT_FLAG_HANDLE;
unlock_and_exit:
- if (flags & ACPI_NOT_ISR) {
- (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
- }
+ acpi_os_release_lock(acpi_gbl_gpe_lock, cpu_flags);
return_ACPI_STATUS(status);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2010-04-02 20:34 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-02 20:37 [RFC][PATCH] ACPI / ACPICA: Always use the same lock for GPE locking Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).