diff options
author | Len Brown <len.brown@intel.com> | 2008-02-07 09:11:47 +0100 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-02-07 09:11:47 +0100 |
commit | 7924e4f6519dd5b349ed146fe9fe35206730be67 (patch) | |
tree | 4f4c5b814abc02f55ec50cceb90331061948c887 /drivers/acpi/osl.c | |
parent | Merge branches 'release' and 'dmi' into release (diff) | |
parent | ACPI: Defer enabling of level GPE until all pending notifies done (diff) | |
download | linux-7924e4f6519dd5b349ed146fe9fe35206730be67.tar.xz linux-7924e4f6519dd5b349ed146fe9fe35206730be67.zip |
Merge branches 'release' and 'gpe-ack' into release
Diffstat (limited to 'drivers/acpi/osl.c')
-rw-r--r-- | drivers/acpi/osl.c | 42 |
1 files changed, 8 insertions, 34 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 9772a48f36f1..07c18dbde698 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -665,25 +665,6 @@ static void acpi_os_execute_deferred(struct work_struct *work) dpc->function(dpc->context); kfree(dpc); - /* Yield cpu to notify thread */ - cond_resched(); - - return; -} - -static void acpi_os_execute_notify(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; - } - - dpc->function(dpc->context); - - kfree(dpc); - return; } @@ -707,7 +688,7 @@ acpi_status acpi_os_execute(acpi_execute_type type, { acpi_status status = AE_OK; struct acpi_os_dpc *dpc; - + struct workqueue_struct *queue; ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Scheduling function [%p(%p)] for deferred execution.\n", function, context)); @@ -731,20 +712,13 @@ acpi_status acpi_os_execute(acpi_execute_type type, dpc->function = function; dpc->context = context; - if (type == OSL_NOTIFY_HANDLER) { - INIT_WORK(&dpc->work, acpi_os_execute_notify); - if (!queue_work(kacpi_notify_wq, &dpc->work)) { - status = AE_ERROR; - kfree(dpc); - } - } else { - INIT_WORK(&dpc->work, acpi_os_execute_deferred); - if (!queue_work(kacpid_wq, &dpc->work)) { - ACPI_DEBUG_PRINT((ACPI_DB_ERROR, - "Call to queue_work() failed.\n")); - status = AE_ERROR; - kfree(dpc); - } + INIT_WORK(&dpc->work, acpi_os_execute_deferred); + queue = (type == OSL_NOTIFY_HANDLER) ? kacpi_notify_wq : kacpid_wq; + if (!queue_work(queue, &dpc->work)) { + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, + "Call to queue_work() failed.\n")); + status = AE_ERROR; + kfree(dpc); } return_ACPI_STATUS(status); } |