When firmware is not available, net device is not created. Upon
disconnect, we must check for net device existence before trying to
release net device private data.

Signed-off-by: Thomas Vegas <tho...@grouk.net>
---
 drivers/staging/rtl8712/usb_intf.c | 44 +++++++++++++++++++-------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/rtl8712/usb_intf.c 
b/drivers/staging/rtl8712/usb_intf.c
index ba74354..bec9d454 100644
--- a/drivers/staging/rtl8712/usb_intf.c
+++ b/drivers/staging/rtl8712/usb_intf.c
@@ -607,31 +607,31 @@ error:
 static void r871xu_dev_remove(struct usb_interface *pusb_intf)
 {
        struct net_device *pnetdev = usb_get_intfdata(pusb_intf);
-       struct _adapter *padapter = netdev_priv(pnetdev);
        struct usb_device *udev = interface_to_usbdev(pusb_intf);
 
-       usb_set_intfdata(pusb_intf, NULL);
-       if (padapter->fw_found)
-               release_firmware(padapter->fw);
-       /* never exit with a firmware callback pending */
-       wait_for_completion(&padapter->rtl8712_fw_ready);
-       if (drvpriv.drv_registered == true)
-               padapter->bSurpriseRemoved = true;
-       if (pnetdev != NULL) {
-               /* will call netdev_close() */
-               unregister_netdev(pnetdev);
+       if (pnetdev) {
+               struct _adapter *padapter = netdev_priv(pnetdev);
+
+               usb_set_intfdata(pusb_intf, NULL);
+               if (padapter->fw_found)
+                       release_firmware(padapter->fw);
+               /* never exit with a firmware callback pending */
+               wait_for_completion(&padapter->rtl8712_fw_ready);
+               if (drvpriv.drv_registered == true)
+                       padapter->bSurpriseRemoved = true;
+               unregister_netdev(pnetdev); /* will call netdev_close() */
+               flush_scheduled_work();
+               udelay(1);
+               /* Stop driver mlme relation timer */
+               if (padapter->fw_found)
+                       r8712_stop_drv_timers(padapter);
+               r871x_dev_unload(padapter);
+               r8712_free_drv_sw(padapter);
+
+               /* decrease the reference count of the usb device structure
+                * when disconnect */
+               usb_put_dev(udev);
        }
-       flush_scheduled_work();
-       udelay(1);
-       /*Stop driver mlme relation timer */
-       if (padapter->fw_found)
-               r8712_stop_drv_timers(padapter);
-       r871x_dev_unload(padapter);
-       r8712_free_drv_sw(padapter);
-       usb_set_intfdata(pusb_intf, NULL);
-       /* decrease the reference count of the usb device structure
-        * when disconnect */
-       usb_put_dev(udev);
        /* If we didn't unplug usb dongle and remove/insert module, driver
         * fails on sitesurvey for the first time when device is up.
         * Reset usb port for sitesurvey fail issue. */
-- 
1.8.5.5

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to