On Fri, Jul 19, 2013 at 08:46:54PM +0200, Ortwin Glück wrote: > On 07/19/2013 02:08 PM, Stanislaw Gruszka wrote: > >I'm attaching patch, which should prevent crash (but not fix the issue, > >just workaround it), plese apply it. If it make suspend work, please then > >reload iwlwifi module with debug=0x3 option, suspend/resume machine and > >provide dmesg output after that. > > > Here the requested dmesg. Please note that two different WARN_ONs > trigger here directly after each other. > > To me it looks like iwlagn_mac_remove_interface() is called twice, > but I am not familiar with the code. We remove interface that we do not add in the driver. I think I found reason of that - I removed below code in bad commit: list_for_each_entry(sdata, &local->interfaces, list) { [snip] - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP_VLAN: - case NL80211_IFTYPE_MONITOR: - /* skip these */ - continue; Attached patch should correct that. Please test if it fixes the crash. Thanks Stanislaw
diff --git a/net/mac80211/pm.c b/net/mac80211/pm.c index 7fc5d0d..3401262 100644 --- a/net/mac80211/pm.c +++ b/net/mac80211/pm.c @@ -99,10 +99,13 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) } mutex_unlock(&local->sta_mtx); - /* remove all interfaces */ + /* remove all interfaces that were created in the driver */ list_for_each_entry(sdata, &local->interfaces, list) { - if (!ieee80211_sdata_running(sdata)) + if (!ieee80211_sdata_running(sdata) || + sdata->vif.type == NL80211_IFTYPE_AP_VLAN || + sdata->vif.type == NL80211_IFTYPE_MONITOR) continue; + drv_remove_interface(local, sdata); }