status = WLAN_STATUS_REQUEST_DECLINED;
 
+       if (test_sta_flags(sta, WLAN_STA_SUSPEND)) {
+#ifdef CONFIG_MAC80211_HT_DEBUG
+               printk(KERN_DEBUG "Suspend in progress. "
+                      "Denying ADDBA request\n");
+#endif
+               goto end_no_lock;
+       }
+
        /* sanity check for incoming parameters:
         * check if configuration can support the BA policy
         * and if buffer size does not exceeds max value */
 
                goto unlock;
        }
 
+       if (test_sta_flags(sta, WLAN_STA_SUSPEND)) {
+#ifdef CONFIG_MAC80211_HT_DEBUG
+               printk(KERN_DEBUG "Suspend in progress. "
+                      "Denying BA session request\n");
+#endif
+               ret = -EINVAL;
+               goto unlock;
+       }
+
        spin_lock_bh(&sta->lock);
 
        sdata = sta->sdata;
 
        list_for_each_entry(sdata, &local->interfaces, list)
                ieee80211_disable_keys(sdata);
 
+       /* Tear down aggregation sessions */
+
+       rcu_read_lock();
+
+       if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) {
+               list_for_each_entry_rcu(sta, &local->sta_list, list) {
+                       set_sta_flags(sta, WLAN_STA_SUSPEND);
+                       ieee80211_sta_tear_down_BA_sessions(sta);
+               }
+       }
+
+       rcu_read_unlock();
+
        /* remove STAs */
        if (local->ops->sta_notify) {
                spin_lock_irqsave(&local->sta_lock, flags);
                spin_unlock_irqrestore(&local->sta_lock, flags);
        }
 
+       /* Clear Suspend state so that ADDBA requests can be processed */
+
+       rcu_read_lock();
+
+       if (hw->flags & IEEE80211_HW_AMPDU_AGGREGATION) {
+               list_for_each_entry_rcu(sta, &local->sta_list, list) {
+                       clear_sta_flags(sta, WLAN_STA_SUSPEND);
+               }
+       }
+
+       rcu_read_unlock();
+
        /* add back keys */
        list_for_each_entry(sdata, &local->interfaces, list)
                if (netif_running(sdata->dev))
 
  *     IEEE80211_TX_CTL_CLEAR_PS_FILT control flag) when the next
  *     frame to this station is transmitted.
  * @WLAN_STA_MFP: Management frame protection is used with this STA.
+ * @WLAN_STA_SUSPEND: Set/cleared during a suspend/resume cycle.
+ *     Used to deny ADDBA requests (both TX and RX).
  */
 enum ieee80211_sta_info_flags {
        WLAN_STA_AUTH           = 1<<0,
        WLAN_STA_PSPOLL         = 1<<8,
        WLAN_STA_CLEAR_PS_FILT  = 1<<9,
        WLAN_STA_MFP            = 1<<10,
+       WLAN_STA_SUSPEND        = 1<<11
 };
 
 #define STA_TID_NUM 16