Skip to content

Commit

Permalink
at76c50x-usb: additional disconnect fixes
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jason Andryuk authored and John W. Linville committed Feb 27, 2009
1 parent 5a2137d commit 1cc198f
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/net/wireless/at76c50x-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1497,6 +1497,9 @@ static void at76_work_set_promisc(struct work_struct *work)
work_set_promisc);
int ret = 0;

if (priv->device_unplugged)
return;

mutex_lock(&priv->mtx);

priv->mib_buf.type = MIB_LOCAL;
Expand Down Expand Up @@ -2290,6 +2293,7 @@ static void at76_delete_device(struct at76_priv *priv)
tasklet_kill(&priv->rx_tasklet);

if (priv->mac80211_registered) {
cancel_delayed_work(&priv->dwork_hw_scan);
flush_workqueue(priv->hw->workqueue);
ieee80211_unregister_hw(priv->hw);
}
Expand All @@ -2307,6 +2311,8 @@ static void at76_delete_device(struct at76_priv *priv)

kfree(priv->bulk_out_buffer);

del_timer_sync(&ledtrig_tx_timer);

if (priv->rx_skb)
kfree_skb(priv->rx_skb);

Expand Down

0 comments on commit 1cc198f

Please sign in to comment.