|
@@ -1872,7 +1872,7 @@ static void ieee80211_beacon_connection_loss_work(struct work_struct *work)
|
|
|
rcu_read_unlock();
|
|
|
}
|
|
|
|
|
|
- if (sdata->local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR) {
|
|
|
+ if (ifmgd->connection_loss) {
|
|
|
sdata_info(sdata, "Connection to AP %pM lost\n",
|
|
|
ifmgd->bssid);
|
|
|
__ieee80211_disconnect(sdata);
|
|
@@ -1900,6 +1900,7 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif)
|
|
|
trace_api_beacon_loss(sdata);
|
|
|
|
|
|
WARN_ON(hw->flags & IEEE80211_HW_CONNECTION_MONITOR);
|
|
|
+ sdata->u.mgd.connection_loss = false;
|
|
|
ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ieee80211_beacon_loss);
|
|
@@ -1911,7 +1912,7 @@ void ieee80211_connection_loss(struct ieee80211_vif *vif)
|
|
|
|
|
|
trace_api_connection_loss(sdata);
|
|
|
|
|
|
- WARN_ON(!(hw->flags & IEEE80211_HW_CONNECTION_MONITOR));
|
|
|
+ sdata->u.mgd.connection_loss = true;
|
|
|
ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ieee80211_connection_loss);
|
|
@@ -3154,6 +3155,7 @@ static void ieee80211_sta_bcn_mon_timer(unsigned long data)
|
|
|
if (local->quiescing)
|
|
|
return;
|
|
|
|
|
|
+ sdata->u.mgd.connection_loss = false;
|
|
|
ieee80211_queue_work(&sdata->local->hw,
|
|
|
&sdata->u.mgd.beacon_connection_loss_work);
|
|
|
}
|