at76c50x-usb: additional disconnect fixes
Additional attempts to fix Oops on disconnect, that appear to be successful. However, some may be extraneous. The cancel_delayed_work call is probably the most necessary. The device_unplugged check may not be necessary. del_timer_sync may not be necessary either, but the Oops I was receiving was related to timers. Hence the addition. Signed-off-by: Jason Andryuk <jandryuk@gmail.com> Signed-off-by: Kalle Valo <kalle.valo@iki.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
5a2137ddcc
commit
1cc198fee9
@@ -1497,6 +1497,9 @@ static void at76_work_set_promisc(struct work_struct *work)
|
|||||||
work_set_promisc);
|
work_set_promisc);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
if (priv->device_unplugged)
|
||||||
|
return;
|
||||||
|
|
||||||
mutex_lock(&priv->mtx);
|
mutex_lock(&priv->mtx);
|
||||||
|
|
||||||
priv->mib_buf.type = MIB_LOCAL;
|
priv->mib_buf.type = MIB_LOCAL;
|
||||||
@@ -2290,6 +2293,7 @@ static void at76_delete_device(struct at76_priv *priv)
|
|||||||
tasklet_kill(&priv->rx_tasklet);
|
tasklet_kill(&priv->rx_tasklet);
|
||||||
|
|
||||||
if (priv->mac80211_registered) {
|
if (priv->mac80211_registered) {
|
||||||
|
cancel_delayed_work(&priv->dwork_hw_scan);
|
||||||
flush_workqueue(priv->hw->workqueue);
|
flush_workqueue(priv->hw->workqueue);
|
||||||
ieee80211_unregister_hw(priv->hw);
|
ieee80211_unregister_hw(priv->hw);
|
||||||
}
|
}
|
||||||
@@ -2307,6 +2311,8 @@ static void at76_delete_device(struct at76_priv *priv)
|
|||||||
|
|
||||||
kfree(priv->bulk_out_buffer);
|
kfree(priv->bulk_out_buffer);
|
||||||
|
|
||||||
|
del_timer_sync(&ledtrig_tx_timer);
|
||||||
|
|
||||||
if (priv->rx_skb)
|
if (priv->rx_skb)
|
||||||
kfree_skb(priv->rx_skb);
|
kfree_skb(priv->rx_skb);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user