--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
-@@ -1129,6 +1129,8 @@ void ieee80211_tx_status_ext(struct ieee
+@@ -991,10 +991,6 @@ static void __ieee80211_tx_status(struct
+ if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked)
+ ieee80211_frame_acked(sta, skb);
+
+- if ((sta->sdata->vif.type == NL80211_IFTYPE_STATION) &&
+- ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS))
+- ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data,
+- acked, info->status.tx_time);
+ }
+
+ /* SNMP counters
+@@ -1129,11 +1125,18 @@ void ieee80211_tx_status_ext(struct ieee
noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED);
if (pubsta) {
if (!acked && !noack_success)
sta->status_stats.retry_failed++;
sta->status_stats.retry_count += retry_count;
-@@ -1143,6 +1145,13 @@ void ieee80211_tx_status_ext(struct ieee
+
+ if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
++ if (sdata->vif.type == NL80211_IFTYPE_STATION &&
++ skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP))
++ ieee80211_sta_tx_notify(sdata, (void *) skb->data,
++ acked, info->status.tx_time);
++
+ if (acked) {
+ sta->status_stats.last_ack = jiffies;
+
+@@ -1143,6 +1146,11 @@ void ieee80211_tx_status_ext(struct ieee
/* Track when last packet was ACKed */
sta->status_stats.last_pkt_time = jiffies;
+ /* Reset connection monitor */
+ if (sdata->vif.type == NL80211_IFTYPE_STATION &&
-+ unlikely(sdata->u.mgd.probe_send_count > 0)) {
++ unlikely(sdata->u.mgd.probe_send_count > 0))
+ sdata->u.mgd.probe_send_count = 0;
-+ ieee80211_queue_work(&local->hw, &sdata->work);
-+ }
+
if (info->status.is_valid_ack_signal) {
sta->status_stats.last_ack_signal =
(s8)info->status.ack_signal;
+--- a/net/mac80211/mlme.c
++++ b/net/mac80211/mlme.c
+@@ -2508,7 +2508,9 @@ void ieee80211_sta_tx_notify(struct ieee
+ !sdata->u.mgd.probe_send_count)
+ return;
+
+- if (!ack)
++ if (ack)
++ sdata->u.mgd.probe_send_count = 0;
++ else
+ sdata->u.mgd.nullfunc_failed = true;
+ ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+ }