On Wed, 2012-08-01 at 17:22 -0600, Daniel Drake wrote: > Here is what happens: > > NETDEV_GOING_DOWN > cfg80211_disconnected() called, disconnect event work queued > NETDEV_DOWN > cleanup work queued > NETDEV_UNREGISTER > *** cfg80211_netdev_notifier_call now calls: list_del_rcu(&wdev->list); > disconnect even work runs, calls cfg80211_process_rdev_events() but > the wdev is already removed from rdev->netdev_list as above > cleanup work runs > > The bit I marked with *** is what is causing the difficulties - it > runs before the work items do. Oh, hm. I didn't think it could unregister before we give up our reference, but I guess that makes sense after all. I'm not sure there's an easy way to fix it other than making the driver not call cfg80211_disconnected() in case the disconnect was requested by cfg80211 -- that call isn't needed and will not do anything at all, but I'm not sure how easy that would be in the driver? johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html