Commit 0cc053dd authored by Sergio Paracuellos's avatar Sergio Paracuellos Committed by Greg Kroah-Hartman

staging: ks7010: fix error paths in ks7010_sdio_remove function

This commit reviews and fixes error paths in ks7010_sdio_remove
driver function. It change logic to handle error directly
after priv dereference to avoid one level indentation. It also
removes a temporal netdev variable which wasn't being used in all
of the function calls. Also if send_stop_request call fails it
was making a direct 'return' instead of doing a properly cleaning.
Because of this a new 'err_free_card' label has been added.
Signed-off-by: default avatarSergio Paracuellos <sergio.paracuellos@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 31d7b1b1
......@@ -1112,39 +1112,39 @@ static void ks7010_sdio_remove(struct sdio_func *func)
return;
priv = card->priv;
if (priv) {
struct net_device *netdev = priv->net_dev;
if (!priv)
goto err_free_card;
ks_wlan_net_stop(netdev);
ks_wlan_net_stop(priv->net_dev);
/* interrupt disable */
sdio_claim_host(func);
sdio_writeb(func, 0, INT_ENABLE_REG, &ret);
sdio_writeb(func, 0xff, INT_PENDING_REG, &ret);
sdio_release_host(func);
/* interrupt disable */
sdio_claim_host(func);
sdio_writeb(func, 0, INT_ENABLE_REG, &ret);
sdio_writeb(func, 0xff, INT_PENDING_REG, &ret);
sdio_release_host(func);
ret = send_stop_request(func);
if (ret) /* memory allocation failure */
return;
ret = send_stop_request(func);
if (ret) /* memory allocation failure */
goto err_free_card;
if (priv->wq) {
flush_workqueue(priv->wq);
destroy_workqueue(priv->wq);
}
if (priv->wq) {
flush_workqueue(priv->wq);
destroy_workqueue(priv->wq);
}
hostif_exit(priv);
hostif_exit(priv);
unregister_netdev(netdev);
unregister_netdev(priv->net_dev);
trx_device_exit(priv);
free_netdev(priv->net_dev);
card->priv = NULL;
}
trx_device_exit(priv);
free_netdev(priv->net_dev);
card->priv = NULL;
sdio_claim_host(func);
sdio_release_irq(func);
sdio_disable_func(func);
sdio_release_host(func);
err_free_card:
sdio_set_drvdata(func, NULL);
kfree(card);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment