]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/firewire/core-transaction.c
Merge branch 'for-2.6.40/splice' of git://git.kernel.dk/linux-2.6-block
[karo-tx-linux.git] / drivers / firewire / core-transaction.c
index 77275fdf6c1fb83fb6ce05fc69ca22c61b338e34..334b82a3542c18ddbc4c138deafdf1931068434d 100644 (file)
@@ -36,6 +36,7 @@
 #include <linux/string.h>
 #include <linux/timer.h>
 #include <linux/types.h>
+#include <linux/workqueue.h>
 
 #include <asm/byteorder.h>
 
@@ -1213,13 +1214,21 @@ static int __init fw_core_init(void)
 {
        int ret;
 
+       fw_workqueue = alloc_workqueue("firewire",
+                                      WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
+       if (!fw_workqueue)
+               return -ENOMEM;
+
        ret = bus_register(&fw_bus_type);
-       if (ret < 0)
+       if (ret < 0) {
+               destroy_workqueue(fw_workqueue);
                return ret;
+       }
 
        fw_cdev_major = register_chrdev(0, "firewire", &fw_device_ops);
        if (fw_cdev_major < 0) {
                bus_unregister(&fw_bus_type);
+               destroy_workqueue(fw_workqueue);
                return fw_cdev_major;
        }
 
@@ -1235,6 +1244,7 @@ static void __exit fw_core_cleanup(void)
 {
        unregister_chrdev(fw_cdev_major, "firewire");
        bus_unregister(&fw_bus_type);
+       destroy_workqueue(fw_workqueue);
        idr_destroy(&fw_device_idr);
 }