Skip to content

Commit

Permalink
staging: rtl8712: fix error handling in r871xu_drv_init
Browse files Browse the repository at this point in the history
Previous error handling path was unique for all
possible errors and there was unnecessary branching.
Also, one step for freeing drv_sw was missing. All
these problems was fixed by restructuring error
handling path.

Also, moved out free_netdev() from r8712_free_drv_sw() for
correct error handling.

Fixes: 2865d42 ("staging: r8712u: Add the new driver to the mainline kernel")
Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
Link: https://lore.kernel.org/r/febb00f72354449bb4d305f373d6d2f47e539ab4.1623620630.git.paskripkin@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Pavel Skripkin authored and Greg Kroah-Hartman committed Jun 14, 2021
1 parent 69d998f commit d1d3e3c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 13 deletions.
4 changes: 0 additions & 4 deletions drivers/staging/rtl8712/os_intfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -328,8 +328,6 @@ int r8712_init_drv_sw(struct _adapter *padapter)

void r8712_free_drv_sw(struct _adapter *padapter)
{
struct net_device *pnetdev = padapter->pnetdev;

r8712_free_cmd_priv(&padapter->cmdpriv);
r8712_free_evt_priv(&padapter->evtpriv);
r8712_DeInitSwLeds(padapter);
Expand All @@ -339,8 +337,6 @@ void r8712_free_drv_sw(struct _adapter *padapter)
_r8712_free_sta_priv(&padapter->stapriv);
_r8712_free_recv_priv(&padapter->recvpriv);
mp871xdeinit(padapter);
if (pnetdev)
free_netdev(pnetdev);
}

static void enable_video_mode(struct _adapter *padapter, int cbw40_value)
Expand Down
22 changes: 13 additions & 9 deletions drivers/staging/rtl8712/usb_intf.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
/* step 1. */
pnetdev = r8712_init_netdev();
if (!pnetdev)
goto error;
goto put_dev;
padapter = netdev_priv(pnetdev);
disable_ht_for_spec_devid(pdid, padapter);
pdvobjpriv = &padapter->dvobjpriv;
Expand All @@ -382,12 +382,12 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,

status = padapter->dvobj_init(padapter);
if (status != _SUCCESS)
goto error;
goto free_netdev;

/* step 4. */
status = r8712_init_drv_sw(padapter);
if (status)
goto error;
goto dvobj_deinit;
/* step 5. read efuse/eeprom data and get mac_addr */
{
int i, offset;
Expand Down Expand Up @@ -567,17 +567,20 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
}
/* step 6. Load the firmware asynchronously */
if (rtl871x_load_fw(padapter))
goto error;
goto deinit_drv_sw;
spin_lock_init(&padapter->lock_rx_ff0_filter);
mutex_init(&padapter->mutex_start);
return 0;
error:

deinit_drv_sw:
r8712_free_drv_sw(padapter);
dvobj_deinit:
padapter->dvobj_deinit(padapter);
free_netdev:
free_netdev(pnetdev);
put_dev:
usb_put_dev(udev);
usb_set_intfdata(pusb_intf, NULL);
if (padapter && padapter->dvobj_deinit)
padapter->dvobj_deinit(padapter);
if (pnetdev)
free_netdev(pnetdev);
return -ENODEV;
}

Expand Down Expand Up @@ -609,6 +612,7 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
r8712_stop_drv_timers(padapter);
r871x_dev_unload(padapter);
r8712_free_drv_sw(padapter);
free_netdev(pnetdev);

/* decrease the reference count of the usb device structure
* when disconnect
Expand Down

0 comments on commit d1d3e3c

Please sign in to comment.