mirror of
https://github.com/torvalds/linux.git
synced 2024-11-08 13:11:45 +00:00
wl12xx: don't indicate up PS-filtered dummy packets
Dummy packets are currently only sent on the system_hlid link. The system_hlid link should never be filtered for PS (as it is not a STA link). Even so, for correctness, don't indicate dummy packets up. The skb does not belong to mac80211 and as such does not contain a correct skb->cb. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
20a33e52ed
commit
f8e0af6b87
@ -199,15 +199,19 @@ static void wl1271_ps_filter_frames(struct wl1271 *wl, u8 hlid)
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int filtered[NUM_TX_QUEUES];
|
int filtered[NUM_TX_QUEUES];
|
||||||
|
|
||||||
/* filter all frames currently the low level queus for this hlid */
|
/* filter all frames currently in the low level queues for this hlid */
|
||||||
for (i = 0; i < NUM_TX_QUEUES; i++) {
|
for (i = 0; i < NUM_TX_QUEUES; i++) {
|
||||||
filtered[i] = 0;
|
filtered[i] = 0;
|
||||||
while ((skb = skb_dequeue(&wl->links[hlid].tx_queue[i]))) {
|
while ((skb = skb_dequeue(&wl->links[hlid].tx_queue[i]))) {
|
||||||
|
filtered[i]++;
|
||||||
|
|
||||||
|
if (WARN_ON(wl12xx_is_dummy_packet(wl, skb)))
|
||||||
|
continue;
|
||||||
|
|
||||||
info = IEEE80211_SKB_CB(skb);
|
info = IEEE80211_SKB_CB(skb);
|
||||||
info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
|
info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
|
||||||
info->status.rates[0].idx = -1;
|
info->status.rates[0].idx = -1;
|
||||||
ieee80211_tx_status_ni(wl->hw, skb);
|
ieee80211_tx_status_ni(wl->hw, skb);
|
||||||
filtered[i]++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl, u8 hlid)
|
|||||||
wl1271_ps_link_start(wl, hlid, true);
|
wl1271_ps_link_start(wl, hlid, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb)
|
bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
return wl->dummy_packet == skb;
|
return wl->dummy_packet == skb;
|
||||||
}
|
}
|
||||||
|
@ -214,5 +214,6 @@ u32 wl1271_tx_min_rate_get(struct wl1271 *wl);
|
|||||||
u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct sk_buff *skb);
|
u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct sk_buff *skb);
|
||||||
void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid);
|
void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid);
|
||||||
void wl1271_handle_tx_low_watermark(struct wl1271 *wl);
|
void wl1271_handle_tx_low_watermark(struct wl1271 *wl);
|
||||||
|
bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user