Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 159105
b: refs/heads/master
c: b770b43
h: refs/heads/master
i:
  159103: ea684a9
v: v3
  • Loading branch information
Luis R. Rodriguez authored and John W. Linville committed Jul 24, 2009
1 parent d161531 commit 4ca9deb
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fe643414dbf330d6d910e01edd48dd93dc6f2942
refs/heads/master: b770b43e95a66587fbd8c1841de83da87fbf23ea
11 changes: 11 additions & 0 deletions trunk/include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -2110,6 +2110,17 @@ rate_lowest_index(struct ieee80211_supported_band *sband,
return 0;
}

static inline
bool rate_usable_index_exists(struct ieee80211_supported_band *sband,
struct ieee80211_sta *sta)
{
unsigned int i;

for (i = 0; i < sband->n_bitrates; i++)
if (rate_supported(sta, sband->band, i))
return true;
return false;
}

int ieee80211_rate_control_register(struct rate_control_ops *ops);
void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
Expand Down
20 changes: 20 additions & 0 deletions trunk/net/mac80211/tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
int i, len;
bool inval = false, rts = false, short_preamble = false;
struct ieee80211_tx_rate_control txrc;
u32 sta_flags;

memset(&txrc, 0, sizeof(txrc));

Expand Down Expand Up @@ -544,7 +545,26 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
(tx->sta && test_sta_flags(tx->sta, WLAN_STA_SHORT_PREAMBLE))))
txrc.short_preamble = short_preamble = true;

sta_flags = tx->sta ? get_sta_flags(tx->sta) : 0;

/*
* Lets not bother rate control if we're associated and cannot
* talk to the sta. This should not happen.
*/
if (WARN((tx->local->sw_scanning) &&
(sta_flags & WLAN_STA_ASSOC) &&
!rate_usable_index_exists(sband, &tx->sta->sta),
"%s: Dropped data frame as no usable bitrate found while "
"scanning and associated. Target station: "
"%pM on %d GHz band\n",
tx->dev->name, hdr->addr1,
tx->channel->band ? 5 : 2))
return TX_DROP;

/*
* If we're associated with the sta at this point we know we can at
* least send the frame at the lowest bit rate.
*/
rate_control_get_rate(tx->sdata, tx->sta, &txrc);

if (unlikely(info->control.rates[0].idx < 0))
Expand Down

0 comments on commit 4ca9deb

Please sign in to comment.