aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.c
diff options
context:
space:
mode:
authorMarco Porsch <marco.porsch@etit.tu-chemnitz.de>2012-03-16 10:30:26 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-04-09 16:06:00 -0400
commit52a3f20c09559465f821b54838decb397054e7de (patch)
tree92a0bf0179ea2be596d4feb976e2ebccf4627862 /net/mac80211/sta_info.c
parentfa444bf88ce2ba17d24dd0bb279e3106acf86bed (diff)
mac80211: end service period only after sending last buffered frame
Signed-off-by: Marco Porsch <marco.porsch@etit.tu-chemnitz.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/sta_info.c')
-rw-r--r--net/mac80211/sta_info.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 38137cb5f6f0..7fd7ac48f893 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1195,13 +1195,15 @@ ieee80211_sta_ps_deliver_response(struct sta_info *sta,
1195 ieee80211_is_qos_nullfunc(hdr->frame_control)) 1195 ieee80211_is_qos_nullfunc(hdr->frame_control))
1196 qoshdr = ieee80211_get_qos_ctl(hdr); 1196 qoshdr = ieee80211_get_qos_ctl(hdr);
1197 1197
1198 /* set EOSP for the frame */ 1198 /* end service period after last frame */
1199 if (reason == IEEE80211_FRAME_RELEASE_UAPSD && 1199 if (skb_queue_empty(&frames)) {
1200 qoshdr && skb_queue_empty(&frames)) 1200 if (reason == IEEE80211_FRAME_RELEASE_UAPSD &&
1201 *qoshdr |= IEEE80211_QOS_CTL_EOSP; 1201 qoshdr)
1202 1202 *qoshdr |= IEEE80211_QOS_CTL_EOSP;
1203 info->flags |= IEEE80211_TX_STATUS_EOSP | 1203
1204 IEEE80211_TX_CTL_REQ_TX_STATUS; 1204 info->flags |= IEEE80211_TX_STATUS_EOSP |
1205 IEEE80211_TX_CTL_REQ_TX_STATUS;
1206 }
1205 1207
1206 if (qoshdr) 1208 if (qoshdr)
1207 tids |= BIT(*qoshdr & IEEE80211_QOS_CTL_TID_MASK); 1209 tids |= BIT(*qoshdr & IEEE80211_QOS_CTL_TID_MASK);