Commit 76f3915b authored by Gregory Greenman's avatar Gregory Greenman Committed by David S. Miller

iwlwifi: Fix uCode error on association

The problem is that priv->assoc_id is set when assoc. resp frame is
received. But, when it is set, LQ cmd is still not sent to the uCode, it is
done from bg_post_assoc, which is called through a workqueue.

On the other hand, when a tx arrives at the moment when this flag is set,
but LQ is still not sent, the if condition in tx_skb will not hold and
the frame will not be dropped.  Thus, it will be sent through
which is still not in the sta table in the uCoded.
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 25c03d8e
...@@ -790,7 +790,6 @@ struct iwl3945_priv { ...@@ -790,7 +790,6 @@ struct iwl3945_priv {
u16 active_rate_basic; u16 active_rate_basic;
u8 call_post_assoc_from_beacon; u8 call_post_assoc_from_beacon;
u8 assoc_station_added;
/* Rate scaling data */ /* Rate scaling data */
s8 data_retry_limit; s8 data_retry_limit;
u8 retry_rate; u8 retry_rate;
......
...@@ -2806,7 +2806,7 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv, ...@@ -2806,7 +2806,7 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv,
#endif #endif
/* drop all data frame if we are not associated */ /* drop all data frame if we are not associated */
if (!iwl3945_is_associated(priv) && !priv->assoc_id && if ((!iwl3945_is_associated(priv) || !priv->assoc_id) &&
((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) { ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) {
IWL_DEBUG_DROP("Dropping - !iwl3945_is_associated\n"); IWL_DEBUG_DROP("Dropping - !iwl3945_is_associated\n");
goto drop_unlock; goto drop_unlock;
......
...@@ -2933,8 +2933,10 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv, ...@@ -2933,8 +2933,10 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv,
#endif #endif
/* drop all data frame if we are not associated */ /* drop all data frame if we are not associated */
if (!iwl4965_is_associated(priv) && !priv->assoc_id && if (((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) &&
((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) { (!iwl4965_is_associated(priv) ||
!priv->assoc_id ||
!priv->assoc_station_added)) {
IWL_DEBUG_DROP("Dropping - !iwl4965_is_associated\n"); IWL_DEBUG_DROP("Dropping - !iwl4965_is_associated\n");
goto drop_unlock; goto drop_unlock;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment