diff options
author | Bob Moore <robert.moore@intel.com> | 2006-05-12 17:12:00 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2006-06-14 02:34:48 -0400 |
commit | 958dd242b691f64ab4632b4903dbb1e16fee8269 (patch) | |
tree | ddf4932fb4e3023dd0d1914571f17f2e3b03978d /drivers/acpi/events | |
parent | b229cf92eee616c7cb5ad8cdb35a19b119f00bc8 (diff) |
ACPI: ACPICA 20060512
Replaced the acpi_os_queue_for_execution() with a new
interface named acpi_os_execute(). The major difference is
that the new interface does not have a Priority parameter,
this appeared to be useless and has been replaced by
a Type parameter. The Type tells the OS what type of
execution is being requested, such as global lock handler,
notify handler, GPE handler, etc. This allows the host
to queue and execute the request as appropriate for the
request type, possibly using different work queues and
different priorities for the various request types. This
enables fixes for multithreading deadlock problems such as
http://bugzilla.kernel.org/show_bug.cgi?id=5534
(Alexey Starikovskiy and Bob Moore)
Fixed a possible memory leak associated with the
support for the so-called "implicit return" ACPI
extension. Reported by FreeBSD (Fiodor Suietov)
http://bugzilla.kernel.org/show_bug.cgi?id=6514
Fixed a problem with the Load() operator where a table
load from an operation region could overwrite an internal
table buffer by up to 7 bytes and cause alignment faults
on IPF systems. (With assistance from Luming Yu)
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/events')
-rw-r--r-- | drivers/acpi/events/evgpe.c | 8 | ||||
-rw-r--r-- | drivers/acpi/events/evmisc.c | 10 | ||||
-rw-r--r-- | drivers/acpi/events/evregion.c | 7 |
3 files changed, 12 insertions, 13 deletions
diff --git a/drivers/acpi/events/evgpe.c b/drivers/acpi/events/evgpe.c index 25fd12a29a29..aa179dc78011 100644 --- a/drivers/acpi/events/evgpe.c +++ b/drivers/acpi/events/evgpe.c | |||
@@ -489,7 +489,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list) | |||
489 | * RETURN: None | 489 | * RETURN: None |
490 | * | 490 | * |
491 | * DESCRIPTION: Perform the actual execution of a GPE control method. This | 491 | * DESCRIPTION: Perform the actual execution of a GPE control method. This |
492 | * function is called from an invocation of acpi_os_queue_for_execution | 492 | * function is called from an invocation of acpi_os_exece |
493 | * (and therefore does NOT execute at interrupt level) so that | 493 | * (and therefore does NOT execute at interrupt level) so that |
494 | * the control method itself is not executed in the context of | 494 | * the control method itself is not executed in the context of |
495 | * an interrupt handler. | 495 | * an interrupt handler. |
@@ -674,9 +674,9 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number) | |||
674 | * Execute the method associated with the GPE | 674 | * Execute the method associated with the GPE |
675 | * NOTE: Level-triggered GPEs are cleared after the method completes. | 675 | * NOTE: Level-triggered GPEs are cleared after the method completes. |
676 | */ | 676 | */ |
677 | status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE, | 677 | status = acpi_os_execute(OSL_GPE_HANDLER, |
678 | acpi_ev_asynch_execute_gpe_method, | 678 | acpi_ev_asynch_execute_gpe_method, |
679 | gpe_event_info); | 679 | gpe_event_info); |
680 | if (ACPI_FAILURE(status)) { | 680 | if (ACPI_FAILURE(status)) { |
681 | ACPI_EXCEPTION((AE_INFO, status, | 681 | ACPI_EXCEPTION((AE_INFO, status, |
682 | "Unable to queue handler for GPE[%2X] - event disabled", | 682 | "Unable to queue handler for GPE[%2X] - event disabled", |
diff --git a/drivers/acpi/events/evmisc.c b/drivers/acpi/events/evmisc.c index 97e05481aa7c..24e0b8d36f31 100644 --- a/drivers/acpi/events/evmisc.c +++ b/drivers/acpi/events/evmisc.c | |||
@@ -191,9 +191,8 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node, | |||
191 | notify_info->notify.value = (u16) notify_value; | 191 | notify_info->notify.value = (u16) notify_value; |
192 | notify_info->notify.handler_obj = handler_obj; | 192 | notify_info->notify.handler_obj = handler_obj; |
193 | 193 | ||
194 | status = acpi_os_queue_for_execution(OSD_PRIORITY_HIGH, | 194 | status = acpi_os_execute(OSL_NOTIFY_HANDLER, |
195 | acpi_ev_notify_dispatch, | 195 | acpi_ev_notify_dispatch, notify_info); |
196 | notify_info); | ||
197 | if (ACPI_FAILURE(status)) { | 196 | if (ACPI_FAILURE(status)) { |
198 | acpi_ut_delete_generic_state(notify_info); | 197 | acpi_ut_delete_generic_state(notify_info); |
199 | } | 198 | } |
@@ -346,9 +345,8 @@ static u32 acpi_ev_global_lock_handler(void *context) | |||
346 | 345 | ||
347 | /* Run the Global Lock thread which will signal all waiting threads */ | 346 | /* Run the Global Lock thread which will signal all waiting threads */ |
348 | 347 | ||
349 | status = acpi_os_queue_for_execution(OSD_PRIORITY_HIGH, | 348 | status = acpi_os_execute(OSL_GLOBAL_LOCK_HANDLER, |
350 | acpi_ev_global_lock_thread, | 349 | acpi_ev_global_lock_thread, context); |
351 | context); | ||
352 | if (ACPI_FAILURE(status)) { | 350 | if (ACPI_FAILURE(status)) { |
353 | ACPI_EXCEPTION((AE_INFO, status, | 351 | ACPI_EXCEPTION((AE_INFO, status, |
354 | "Could not queue Global Lock thread")); | 352 | "Could not queue Global Lock thread")); |
diff --git a/drivers/acpi/events/evregion.c b/drivers/acpi/events/evregion.c index eb29e96f053c..edf9d2e1dff9 100644 --- a/drivers/acpi/events/evregion.c +++ b/drivers/acpi/events/evregion.c | |||
@@ -261,7 +261,8 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function) | |||
261 | * Function - Read or Write operation | 261 | * Function - Read or Write operation |
262 | * Address - Where in the space to read or write | 262 | * Address - Where in the space to read or write |
263 | * bit_width - Field width in bits (8, 16, 32, or 64) | 263 | * bit_width - Field width in bits (8, 16, 32, or 64) |
264 | * Value - Pointer to in or out value | 264 | * Value - Pointer to in or out value, must be |
265 | * full 64-bit acpi_integer | ||
265 | * | 266 | * |
266 | * RETURN: Status | 267 | * RETURN: Status |
267 | * | 268 | * |
@@ -274,7 +275,7 @@ acpi_status | |||
274 | acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, | 275 | acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, |
275 | u32 function, | 276 | u32 function, |
276 | acpi_physical_address address, | 277 | acpi_physical_address address, |
277 | u32 bit_width, void *value) | 278 | u32 bit_width, acpi_integer * value) |
278 | { | 279 | { |
279 | acpi_status status; | 280 | acpi_status status; |
280 | acpi_status status2; | 281 | acpi_status status2; |
@@ -1007,7 +1008,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, | |||
1007 | * | 1008 | * |
1008 | * PARAMETERS: walk_namespace callback | 1009 | * PARAMETERS: walk_namespace callback |
1009 | * | 1010 | * |
1010 | * DESCRIPTION: Run _REg method for region objects of the requested space_iD | 1011 | * DESCRIPTION: Run _REG method for region objects of the requested space_iD |
1011 | * | 1012 | * |
1012 | ******************************************************************************/ | 1013 | ******************************************************************************/ |
1013 | 1014 | ||