On Wed, 20 Dec 2006 14:43:51 +0800, Hong Liu wrote: > The local->scan_work.data is not clear after scan is completed. > > This will cause softlockup when removing driver module because > the local->scan_work is not initialized for hw_scan card > and we are trying to cancel the scan_work with an uninitialized timer_list.
I think this is a better fix: --- Subject: [PATCH] d80211: do not cancel uninitialized work When ops->hw_scan is set, scan_work is never initialized thus canceling it causes weird problems. Signed-off-by: Jiri Benc <[EMAIL PROTECTED]> --- net/d80211/ieee80211.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) --- dscape.orig/net/d80211/ieee80211.c +++ dscape/net/d80211/ieee80211.c @@ -2082,7 +2082,8 @@ void ieee80211_if_shutdown(struct net_de case IEEE80211_IF_TYPE_IBSS: sdata->u.sta.state = IEEE80211_DISABLED; cancel_delayed_work(&sdata->u.sta.work); - if (local->scan_work.data == sdata->dev) { + if (!local->ops->hw_scan && + local->scan_work.data == sdata->dev) { local->sta_scanning = 0; cancel_delayed_work(&local->scan_work); flush_scheduled_work(); @@ -4660,7 +4661,7 @@ void ieee80211_unregister_hw(struct ieee if (local->stat_time) del_timer_sync(&local->stat_timer); - if (local->scan_work.data) { + if (!local->ops->hw_scan && local->scan_work.data) { local->sta_scanning = 0; cancel_delayed_work(&local->scan_work); flush_scheduled_work(); Thanks, Jiri -- Jiri Benc SUSE Labs - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html