]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/pci/hotplug/pciehp_core.c
Merge branch 'master' into tk71
[mv-sheeva.git] / drivers / pci / hotplug / pciehp_core.c
index aa5f3ff629ff4b798d3b2e473e3e6dfb025be823..7ac8358df8fdd1a6591f259bb0216f37ca44cf65 100644 (file)
@@ -43,6 +43,7 @@ int pciehp_poll_mode;
 int pciehp_poll_time;
 int pciehp_force;
 struct workqueue_struct *pciehp_wq;
+struct workqueue_struct *pciehp_ordered_wq;
 
 #define DRIVER_VERSION "0.4"
 #define DRIVER_AUTHOR  "Dan Zink <dan.zink@compaq.com>, Greg Kroah-Hartman <greg@kroah.com>, Dely Sy <dely.l.sy@intel.com>"
@@ -340,18 +341,33 @@ static int __init pcied_init(void)
 {
        int retval = 0;
 
+       pciehp_wq = alloc_workqueue("pciehp", 0, 0);
+       if (!pciehp_wq)
+               return -ENOMEM;
+
+       pciehp_ordered_wq = alloc_ordered_workqueue("pciehp_ordered", 0);
+       if (!pciehp_ordered_wq) {
+               destroy_workqueue(pciehp_wq);
+               return -ENOMEM;
+       }
+
        pciehp_firmware_init();
        retval = pcie_port_service_register(&hpdriver_portdrv);
        dbg("pcie_port_service_register = %d\n", retval);
        info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
-       if (retval)
+       if (retval) {
+               destroy_workqueue(pciehp_ordered_wq);
+               destroy_workqueue(pciehp_wq);
                dbg("Failure to register service\n");
+       }
        return retval;
 }
 
 static void __exit pcied_cleanup(void)
 {
        dbg("unload_pciehpd()\n");
+       destroy_workqueue(pciehp_ordered_wq);
+       destroy_workqueue(pciehp_wq);
        pcie_port_service_unregister(&hpdriver_portdrv);
        info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n");
 }