mwl8k: recheck if station still has valid rates
authorYogesh Ashok Powar <yogeshp@marvell.com>
Tue, 6 Nov 2012 13:52:35 +0000 (19:22 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 14 Nov 2012 19:56:08 +0000 (14:56 -0500)
We have 6.5 Mbps is minimum rate of the link
as the criterion for creation of BA.

Although we check this before creating the BA
stream, by the time amdpu_action is called from
the workqueue, the link can get affected in the
meantime.
Hence, add an additional check in amdpu_action.

Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Nishant Sarmukadam <nishants@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwl8k.c

index cb5594d433b88356bad23b8c3fc0bc1aa45e7b2f..996176596e0201a79364e183be481876c3bed982 100644 (file)
@@ -5085,6 +5085,7 @@ mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        struct mwl8k_priv *priv = hw->priv;
        struct mwl8k_ampdu_stream *stream;
        u8 *addr = sta->addr;
+       struct mwl8k_sta *sta_info = MWL8K_STA(sta);
 
        if (!(hw->flags & IEEE80211_HW_AMPDU_AGGREGATION))
                return -ENOTSUPP;
@@ -5127,6 +5128,15 @@ mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                /* Release the lock before we do the time consuming stuff */
                spin_unlock(&priv->stream_lock);
                for (i = 0; i < MAX_AMPDU_ATTEMPTS; i++) {
+
+                       /* Check if link is still valid */
+                       if (!sta_info->is_ampdu_allowed) {
+                               spin_lock(&priv->stream_lock);
+                               mwl8k_remove_stream(hw, stream);
+                               spin_unlock(&priv->stream_lock);
+                               return -EBUSY;
+                       }
+
                        rc = mwl8k_check_ba(hw, stream);
 
                        /* If HW restart is in progress mwl8k_post_cmd will