Skip to content

Commit

Permalink
can: etas_es58x: add es58x_free_netdevs() to factorize code
Browse files Browse the repository at this point in the history
Both es58x_probe() and es58x_disconnect() use a similar code snippet
to release the netdev resources. Factorize it in an helper function
named es58x_free_netdevs().

Link: https://lore.kernel.org/r/20210628155420.1176217-5-mailhol.vincent@wanadoo.fr
Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
  • Loading branch information
Vincent Mailhol authored and Marc Kleine-Budde committed Jul 25, 2021
1 parent 6bde4c7 commit 004653f
Showing 1 changed file with 24 additions and 22 deletions.
46 changes: 24 additions & 22 deletions drivers/net/can/usb/etas_es58x/es58x_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -2107,6 +2107,25 @@ static int es58x_init_netdev(struct es58x_device *es58x_dev, int channel_idx)
return ret;
}

/**
* es58x_free_netdevs() - Release all network resources of the device.
* @es58x_dev: ES58X device.
*/
static void es58x_free_netdevs(struct es58x_device *es58x_dev)
{
int i;

for (i = 0; i < es58x_dev->num_can_ch; i++) {
struct net_device *netdev = es58x_dev->netdev[i];

if (!netdev)
continue;
unregister_candev(netdev);
es58x_dev->netdev[i] = NULL;
free_candev(netdev);
}
}

/**
* es58x_get_product_info() - Get the product information and print them.
* @es58x_dev: ES58X device.
Expand Down Expand Up @@ -2240,18 +2259,11 @@ static int es58x_probe(struct usb_interface *intf,

for (ch_idx = 0; ch_idx < es58x_dev->num_can_ch; ch_idx++) {
ret = es58x_init_netdev(es58x_dev, ch_idx);
if (ret)
goto cleanup_candev;
}

return ret;

cleanup_candev:
for (ch_idx = 0; ch_idx < es58x_dev->num_can_ch; ch_idx++)
if (es58x_dev->netdev[ch_idx]) {
unregister_candev(es58x_dev->netdev[ch_idx]);
free_candev(es58x_dev->netdev[ch_idx]);
if (ret) {
es58x_free_netdevs(es58x_dev);
return ret;
}
}

return ret;
}
Expand All @@ -2266,21 +2278,11 @@ static int es58x_probe(struct usb_interface *intf,
static void es58x_disconnect(struct usb_interface *intf)
{
struct es58x_device *es58x_dev = usb_get_intfdata(intf);
struct net_device *netdev;
int i;

dev_info(&intf->dev, "Disconnecting %s %s\n",
es58x_dev->udev->manufacturer, es58x_dev->udev->product);

for (i = 0; i < es58x_dev->num_can_ch; i++) {
netdev = es58x_dev->netdev[i];
if (!netdev)
continue;
unregister_candev(netdev);
es58x_dev->netdev[i] = NULL;
free_candev(netdev);
}

es58x_free_netdevs(es58x_dev);
es58x_free_urbs(es58x_dev);
usb_set_intfdata(intf, NULL);
}
Expand Down

0 comments on commit 004653f

Please sign in to comment.