diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 2de8870..457f5207 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -129,6 +129,7 @@ void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata)
 {
 	struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
 
+	mlme_dbg(sdata, "%s:%d\n", __func__, __LINE__);
 	if (unlikely(!sdata->u.mgd.associated))
 		return;
 
@@ -137,6 +138,9 @@ void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata)
 	if (sdata->local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR)
 		return;
 
+	mlme_dbg(sdata, "%s:%d\n", __func__, __LINE__);
+
+	dump_stack();
 	mod_timer(&sdata->u.mgd.conn_mon_timer,
 		  round_jiffies_up(jiffies + IEEE80211_CONNECTION_IDLE_TIME));
 }
@@ -1933,28 +1937,13 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
 	sdata->encrypt_headroom = IEEE80211_ENCRYPT_HEADROOM;
 }
 
-void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
-			     struct ieee80211_hdr *hdr)
-{
-	/*
-	 * We can postpone the mgd.timer whenever receiving unicast frames
-	 * from AP because we know that the connection is working both ways
-	 * at that time. But multicast frames (and hence also beacons) must
-	 * be ignored here, because we need to trigger the timer during
-	 * data idle periods for sending the periodic probe request to the
-	 * AP we're connected to.
-	 */
-	if (is_multicast_ether_addr(hdr->addr1))
-		return;
-
-	ieee80211_sta_reset_conn_monitor(sdata);
-}
-
 static void ieee80211_reset_ap_probe(struct ieee80211_sub_if_data *sdata)
 {
 	struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
 	struct ieee80211_local *local = sdata->local;
 
+	mlme_dbg(sdata, "%s:%d start\n", __func__, __LINE__);
+
 	mutex_lock(&local->mtx);
 	if (!(ifmgd->flags & IEEE80211_STA_CONNECTION_POLL))
 		goto out;
@@ -1975,13 +1964,27 @@ static void ieee80211_reset_ap_probe(struct ieee80211_sub_if_data *sdata)
 	 */
 	ieee80211_sta_reset_beacon_monitor(sdata);
 
-	mod_timer(&ifmgd->conn_mon_timer,
-		  round_jiffies_up(jiffies +
-				   IEEE80211_CONNECTION_IDLE_TIME));
 out:
 	mutex_unlock(&local->mtx);
 }
 
+void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
+			     struct ieee80211_hdr *hdr)
+{
+	/*
+	 * We can postpone the mgd.timer whenever receiving unicast frames
+	 * from AP because we know that the connection is working both ways
+	 * at that time. But multicast frames (and hence also beacons) must
+	 * be ignored here, because we need to trigger the timer during
+	 * data idle periods for sending the periodic probe request to the
+	 * AP we're connected to.
+	 */
+	if (is_multicast_ether_addr(hdr->addr1))
+		return;
+
+	ieee80211_reset_ap_probe(sdata);
+}
+
 void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata,
 			     struct ieee80211_hdr *hdr, bool ack)
 {
@@ -1990,16 +1993,20 @@ void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata,
 
 	if (ieee80211_is_nullfunc(hdr->frame_control) &&
 	    sdata->u.mgd.probe_send_count > 0) {
-		if (ack)
+		if (ack) {
+			mlme_dbg(sdata, "%s:%d Reseting conn mon\n", __func__, __LINE__);
 			ieee80211_sta_reset_conn_monitor(sdata);
+		}
 		else
 			sdata->u.mgd.nullfunc_failed = true;
 		ieee80211_queue_work(&sdata->local->hw, &sdata->work);
 		return;
 	}
 
-	if (ack)
+	if (ack) {
+		mlme_dbg(sdata, "%s:%d Reseting conn mon\n", __func__, __LINE__);
 		ieee80211_sta_reset_conn_monitor(sdata);
+	}
 }
 
 static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)
@@ -3682,6 +3689,7 @@ static void ieee80211_sta_conn_mon_timer(unsigned long data)
 		(struct ieee80211_sub_if_data *) data;
 	struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
 	struct ieee80211_local *local = sdata->local;
+	mlme_dbg(sdata, "%s:%d\n", __func__, __LINE__);
 
 	if (local->quiescing)
 		return;
@@ -3689,6 +3697,7 @@ static void ieee80211_sta_conn_mon_timer(unsigned long data)
 	if (sdata->vif.csa_active)
 		return;
 
+	mlme_dbg(sdata, "%s:%d  KICKING PROBE\n", __func__, __LINE__);
 	ieee80211_queue_work(&local->hw, &ifmgd->monitor_work);
 }
 
@@ -3698,6 +3707,7 @@ static void ieee80211_sta_monitor_work(struct work_struct *work)
 		container_of(work, struct ieee80211_sub_if_data,
 			     u.mgd.monitor_work);
 
+	mlme_dbg(sdata, "%s:%d\n", __func__, __LINE__);
 	ieee80211_mgd_probe_ap(sdata, false);
 }
 
