Skip to content

Commit

Permalink
ACPI: simplify deferred execution path
Browse files Browse the repository at this point in the history
We had two functions, acpi_os_execute_deferred() and
acpi_os_execute_hp_deferred() that differed only in that the
latter did acpi_os_wait_events_complete(NULL) before executing
the deferred function.

This patch consolidates those two functions and uses a flag in
the struct acpi_os_dpc to determine whether to do the wait.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Bjorn Helgaas authored and Len Brown committed Sep 19, 2009
1 parent d26f052 commit 9ac6185
Showing 1 changed file with 5 additions and 18 deletions.
23 changes: 5 additions & 18 deletions drivers/acpi/osl.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ struct acpi_os_dpc {
acpi_osd_exec_callback function;
void *context;
struct work_struct work;
int wait;
};

#ifdef CONFIG_ACPI_CUSTOM_DSDT
Expand Down Expand Up @@ -703,21 +704,8 @@ static void acpi_os_execute_deferred(struct work_struct *work)
return;
}

dpc->function(dpc->context);
kfree(dpc);

return;
}

static void acpi_os_execute_hp_deferred(struct work_struct *work)
{
struct acpi_os_dpc *dpc = container_of(work, struct acpi_os_dpc, work);
if (!dpc) {
printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
return;
}

acpi_os_wait_events_complete(NULL);
if (dpc->wait)
acpi_os_wait_events_complete(NULL);

dpc->function(dpc->context);
kfree(dpc);
Expand Down Expand Up @@ -746,7 +734,6 @@ static acpi_status __acpi_os_execute(acpi_execute_type type,
acpi_status status = AE_OK;
struct acpi_os_dpc *dpc;
struct workqueue_struct *queue;
work_func_t func;
int ret;
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
"Scheduling function [%p(%p)] for deferred execution.\n",
Expand Down Expand Up @@ -779,8 +766,8 @@ static acpi_status __acpi_os_execute(acpi_execute_type type,
*/
queue = hp ? kacpi_hotplug_wq :
(type == OSL_NOTIFY_HANDLER ? kacpi_notify_wq : kacpid_wq);
func = hp ? acpi_os_execute_hp_deferred : acpi_os_execute_deferred;
INIT_WORK(&dpc->work, func);
dpc->wait = hp ? 1 : 0;
INIT_WORK(&dpc->work, acpi_os_execute_deferred);
ret = queue_work(queue, &dpc->work);

if (!ret) {
Expand Down

0 comments on commit 9ac6185

Please sign in to comment.