aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/events
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2006-05-12 17:12:00 -0400
committerLen Brown <len.brown@intel.com>2006-06-14 02:34:48 -0400
commit958dd242b691f64ab4632b4903dbb1e16fee8269 (patch)
treeddf4932fb4e3023dd0d1914571f17f2e3b03978d /drivers/acpi/events
parentb229cf92eee616c7cb5ad8cdb35a19b119f00bc8 (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.c8
-rw-r--r--drivers/acpi/events/evmisc.c10
-rw-r--r--drivers/acpi/events/evregion.c7
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
274acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, 275acpi_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