diff options
author | David S. Miller <davem@davemloft.net> | 2010-05-31 00:10:35 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-05-31 00:10:35 -0700 |
commit | 92b4522f72916ff2675060e29e4b24cf26ab59ce (patch) | |
tree | 8424a1c550a98ce09f127425fde9b7b5f2f5027a /drivers/net/wireless/ath/ar9170/usb.c | |
parent | 67a3e12b05e055c0415c556a315a3d3eb637e29e (diff) | |
parent | 2903037400a26e7c0cc93ab75a7d62abfacdf485 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Diffstat (limited to 'drivers/net/wireless/ath/ar9170/usb.c')
-rw-r--r-- | drivers/net/wireless/ath/ar9170/usb.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c index 82ab532a4923..a93dc18a45c3 100644 --- a/drivers/net/wireless/ath/ar9170/usb.c +++ b/drivers/net/wireless/ath/ar9170/usb.c @@ -739,17 +739,27 @@ err_out: static void ar9170_usb_firmware_failed(struct ar9170_usb *aru) { struct device *parent = aru->udev->dev.parent; + struct usb_device *udev; + + /* + * Store a copy of the usb_device pointer locally. + * This is because device_release_driver initiates + * ar9170_usb_disconnect, which in turn frees our + * driver context (aru). + */ + udev = aru->udev; complete(&aru->firmware_loading_complete); /* unbind anything failed */ if (parent) device_lock(parent); - device_release_driver(&aru->udev->dev); + + device_release_driver(&udev->dev); if (parent) device_unlock(parent); - usb_put_dev(aru->udev); + usb_put_dev(udev); } static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context) |