]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/acpi/osl.c
Merge branch 'for-linus' of git://git.monstr.eu/linux-2.6-microblaze
[mv-sheeva.git] / drivers / acpi / osl.c
index c5b4f1ed9b71f4fb821232e547b48392f35e39c8..5633b86e3ed1cb97dab2777294beafd0802480cb 100644 (file)
@@ -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
@@ -192,7 +193,7 @@ acpi_status __init acpi_os_initialize(void)
 
 static void bind_to_cpu0(struct work_struct *work)
 {
-       set_cpus_allowed(current, cpumask_of_cpu(0));
+       set_cpus_allowed_ptr(current, cpumask_of(0));
        kfree(work);
 }
 
@@ -698,31 +699,12 @@ void acpi_os_derive_pci_id(acpi_handle rhandle,   /* upper bound  */
 static void acpi_os_execute_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;
-       }
 
-       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);
-
-       return;
 }
 
 /*******************************************************************************
@@ -746,15 +728,11 @@ 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",
                          function, context));
 
-       if (!function)
-               return AE_BAD_PARAMETER;
-
        /*
         * Allocate/initialize DPC structure.  Note that this memory will be
         * freed by the callee.  The kernel handles the work_struct list  in a
@@ -779,8 +757,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) {