diff options
author | Ulrich Kunitz <kune@deine-taler.de> | 2006-09-12 21:42:12 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2006-09-25 16:52:17 -0400 |
commit | bc5f06a8aaa29a79c9da2cedb5b9779b8081289c (patch) | |
tree | ebfe3c0f62aa90ea11d59cfb3196a4e9ae0a2a3f | |
parent | 44976c66bb2b44e4cf29a259a0cd6adadf8eb031 (diff) |
[PATCH] zd1211rw: Added workqueue
For housekeeping and watchdog tasks a workqueue is created. The
central workqueue is not used to prevent crashes creates by bugs.
It might be changed, when the housekeeping is stabilized.
Signed-off-by: Ulrich Kunitz <kune@deine-taler.de>
Signed-off-by: Daniel Drake <dsd@gentoo.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.h | 2 |
2 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index 31027e52b04b..5c265ad0485a 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/errno.h> | 24 | #include <linux/errno.h> |
25 | #include <linux/skbuff.h> | 25 | #include <linux/skbuff.h> |
26 | #include <linux/usb.h> | 26 | #include <linux/usb.h> |
27 | #include <linux/workqueue.h> | ||
27 | #include <net/ieee80211.h> | 28 | #include <net/ieee80211.h> |
28 | 29 | ||
29 | #include "zd_def.h" | 30 | #include "zd_def.h" |
@@ -1112,12 +1113,20 @@ static struct usb_driver driver = { | |||
1112 | .disconnect = disconnect, | 1113 | .disconnect = disconnect, |
1113 | }; | 1114 | }; |
1114 | 1115 | ||
1116 | struct workqueue_struct *zd_workqueue; | ||
1117 | |||
1115 | static int __init usb_init(void) | 1118 | static int __init usb_init(void) |
1116 | { | 1119 | { |
1117 | int r; | 1120 | int r; |
1118 | 1121 | ||
1119 | pr_debug("usb_init()\n"); | 1122 | pr_debug("usb_init()\n"); |
1120 | 1123 | ||
1124 | zd_workqueue = create_singlethread_workqueue(driver.name); | ||
1125 | if (zd_workqueue == NULL) { | ||
1126 | printk(KERN_ERR "%s: couldn't create workqueue\n", driver.name); | ||
1127 | return -ENOMEM; | ||
1128 | } | ||
1129 | |||
1121 | r = usb_register(&driver); | 1130 | r = usb_register(&driver); |
1122 | if (r) { | 1131 | if (r) { |
1123 | printk(KERN_ERR "usb_register() failed. Error number %d\n", r); | 1132 | printk(KERN_ERR "usb_register() failed. Error number %d\n", r); |
@@ -1132,6 +1141,7 @@ static void __exit usb_exit(void) | |||
1132 | { | 1141 | { |
1133 | pr_debug("usb_exit()\n"); | 1142 | pr_debug("usb_exit()\n"); |
1134 | usb_deregister(&driver); | 1143 | usb_deregister(&driver); |
1144 | destroy_workqueue(zd_workqueue); | ||
1135 | } | 1145 | } |
1136 | 1146 | ||
1137 | module_init(usb_init); | 1147 | module_init(usb_init); |
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.h b/drivers/net/wireless/zd1211rw/zd_usb.h index ded39de5f72d..e81a2d3cfffd 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.h +++ b/drivers/net/wireless/zd1211rw/zd_usb.h | |||
@@ -238,4 +238,6 @@ int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs, | |||
238 | 238 | ||
239 | int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits); | 239 | int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits); |
240 | 240 | ||
241 | extern struct workqueue_struct *zd_workqueue; | ||
242 | |||
241 | #endif /* _ZD_USB_H */ | 243 | #endif /* _ZD_USB_H */ |