aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/osl.c
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2008-02-07 03:11:47 -0500
committerLen Brown <len.brown@intel.com>2008-02-07 03:11:47 -0500
commit7924e4f6519dd5b349ed146fe9fe35206730be67 (patch)
tree4f4c5b814abc02f55ec50cceb90331061948c887 /drivers/acpi/osl.c
parent5531d28504461c4e96c6fbd80655a2bfd6481583 (diff)
parent17bc54eef91df29f0a22e8a1562a404cf7a68e74 (diff)
Merge branches 'release' and 'gpe-ack' into release
Diffstat (limited to 'drivers/acpi/osl.c')
-rw-r--r--drivers/acpi/osl.c42
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)
665 dpc->function(dpc->context); 665 dpc->function(dpc->context);
666 kfree(dpc); 666 kfree(dpc);
667 667
668 /* Yield cpu to notify thread */
669 cond_resched();
670
671 return;
672}
673
674static void acpi_os_execute_notify(struct work_struct *work)
675{
676 struct acpi_os_dpc *dpc = container_of(work, struct acpi_os_dpc, work);
677
678 if (!dpc) {
679 printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
680 return;
681 }
682
683 dpc->function(dpc->context);
684
685 kfree(dpc);
686
687 return; 668 return;
688} 669}
689 670
@@ -707,7 +688,7 @@ acpi_status acpi_os_execute(acpi_execute_type type,
707{ 688{
708 acpi_status status = AE_OK; 689 acpi_status status = AE_OK;
709 struct acpi_os_dpc *dpc; 690 struct acpi_os_dpc *dpc;
710 691 struct workqueue_struct *queue;
711 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 692 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
712 "Scheduling function [%p(%p)] for deferred execution.\n", 693 "Scheduling function [%p(%p)] for deferred execution.\n",
713 function, context)); 694 function, context));
@@ -731,20 +712,13 @@ acpi_status acpi_os_execute(acpi_execute_type type,
731 dpc->function = function; 712 dpc->function = function;
732 dpc->context = context; 713 dpc->context = context;
733 714
734 if (type == OSL_NOTIFY_HANDLER) { 715 INIT_WORK(&dpc->work, acpi_os_execute_deferred);
735 INIT_WORK(&dpc->work, acpi_os_execute_notify); 716 queue = (type == OSL_NOTIFY_HANDLER) ? kacpi_notify_wq : kacpid_wq;
736 if (!queue_work(kacpi_notify_wq, &dpc->work)) { 717 if (!queue_work(queue, &dpc->work)) {
737 status = AE_ERROR; 718 ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
738 kfree(dpc); 719 "Call to queue_work() failed.\n"));
739 } 720 status = AE_ERROR;
740 } else { 721 kfree(dpc);
741 INIT_WORK(&dpc->work, acpi_os_execute_deferred);
742 if (!queue_work(kacpid_wq, &dpc->work)) {
743 ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
744 "Call to queue_work() failed.\n"));
745 status = AE_ERROR;
746 kfree(dpc);
747 }
748 } 722 }
749 return_ACPI_STATUS(status); 723 return_ACPI_STATUS(status);
750} 724}