aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/acpica/acpi.c
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2011-01-11 19:26:39 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2011-01-11 19:26:39 +0000
commitb5854f5f5921b495ed62ba6d51b8245ee8e52bd9 (patch)
tree827d5b009af47da0287a596ab5d499e4928ce1d7 /sys/dev/acpica/acpi.c
parent5947a0a3c846023f658958e6db4f82d30aecacfd (diff)
downloadsrc-b5854f5f5921b495ed62ba6d51b8245ee8e52bd9.tar.gz
src-b5854f5f5921b495ed62ba6d51b8245ee8e52bd9.zip
Work around a witness(4) panic introduced in r217238.
Reported by: jh
Notes
Notes: svn path=/head/; revision=217279
Diffstat (limited to 'sys/dev/acpica/acpi.c')
-rw-r--r--sys/dev/acpica/acpi.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
index 585d1c5a208e..9fbe65a8545c 100644
--- a/sys/dev/acpica/acpi.c
+++ b/sys/dev/acpica/acpi.c
@@ -3044,6 +3044,20 @@ acpi_system_eventhandler_wakeup(void *arg, int state)
/*
* ACPICA Event Handlers (FixedEvent, also called from button notify handler)
*/
+static void
+acpi_invoke_sleep_eventhandler(void *context)
+{
+
+ EVENTHANDLER_INVOKE(acpi_sleep_event, *(int *)context);
+}
+
+static void
+acpi_invoke_wake_eventhandler(void *context)
+{
+
+ EVENTHANDLER_INVOKE(acpi_wakeup_event, *(int *)context);
+}
+
UINT32
acpi_event_power_button_sleep(void *context)
{
@@ -3051,8 +3065,9 @@ acpi_event_power_button_sleep(void *context)
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
- EVENTHANDLER_INVOKE(acpi_sleep_event, sc->acpi_power_button_sx);
-
+ if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
+ acpi_invoke_sleep_eventhandler, &sc->acpi_power_button_sx)))
+ return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
return_VALUE (ACPI_INTERRUPT_HANDLED);
}
@@ -3063,8 +3078,9 @@ acpi_event_power_button_wake(void *context)
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
- EVENTHANDLER_INVOKE(acpi_wakeup_event, sc->acpi_power_button_sx);
-
+ if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
+ acpi_invoke_wake_eventhandler, &sc->acpi_power_button_sx)))
+ return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
return_VALUE (ACPI_INTERRUPT_HANDLED);
}
@@ -3075,8 +3091,9 @@ acpi_event_sleep_button_sleep(void *context)
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
- EVENTHANDLER_INVOKE(acpi_sleep_event, sc->acpi_sleep_button_sx);
-
+ if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
+ acpi_invoke_sleep_eventhandler, &sc->acpi_sleep_button_sx)))
+ return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
return_VALUE (ACPI_INTERRUPT_HANDLED);
}
@@ -3087,8 +3104,9 @@ acpi_event_sleep_button_wake(void *context)
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
- EVENTHANDLER_INVOKE(acpi_wakeup_event, sc->acpi_sleep_button_sx);
-
+ if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
+ acpi_invoke_wake_eventhandler, &sc->acpi_sleep_button_sx)))
+ return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
return_VALUE (ACPI_INTERRUPT_HANDLED);
}