diff options
author | Pekka Enberg <penberg@cs.helsinki.fi> | 2009-04-16 11:43:14 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-05-09 02:39:27 (GMT) |
commit | 82fbb01cf3c2bd150262269bd017431d7dd74063 (patch) | |
tree | 9296a03b80bc2dd8febdfe9b079ce551c780a226 /drivers/staging | |
parent | 091bf7624d1c90cec9e578a18529f615213ff847 (diff) | |
download | linux-82fbb01cf3c2bd150262269bd017431d7dd74063.tar.xz |
Staging: w35und: unregister device from the ieee80211 stack upon ->disconnect()
Impact: fix module removal
This patch fixes an oops when the w35und module is removed from the
kernel and added back.
Reported-by: luoyi <luoyi.ly@gmail.com>
Tested-by: Sandro Bonazzola <sandro.bonazzola@gmail.com>
Cc: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/winbond/wbusb.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c index 9c3f9439..3b2d528 100644 --- a/drivers/staging/winbond/wbusb.c +++ b/drivers/staging/winbond/wbusb.c @@ -386,7 +386,7 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id if (err) goto error_free_hw; - usb_set_intfdata(intf, priv); + usb_set_intfdata(intf, dev); return 0; @@ -415,10 +415,15 @@ static void wb35_hw_halt(struct wbsoft_priv *adapter) static void wb35_disconnect(struct usb_interface *intf) { - struct wbsoft_priv *priv = usb_get_intfdata(intf); + struct ieee80211_hw *hw = usb_get_intfdata(intf); + struct wbsoft_priv *priv = hw->priv; wb35_hw_halt(priv); + ieee80211_stop_queues(hw); + ieee80211_unregister_hw(hw); + ieee80211_free_hw(hw); + usb_set_intfdata(intf, NULL); usb_put_dev(interface_to_usbdev(intf)); } |