aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRon Rindjunsky <ron.rindjunsky@intel.com>2008-01-30 05:58:45 -0500
committerJohn W. Linville <linville@tuxdriver.com>2008-02-29 15:37:05 -0500
commita9af2013ca791b40e38a33f94724b87826f17460 (patch)
treee77fbe0e0871a199dadda21dcd5314b8557422f5
parent3d30d949cf3f9763393f3457721bca3ac2426e42 (diff)
mac80211: adjustable number of bits for qdisc pool
This fix allows to control the number of bits that qdiscs book keeping can be done for with respect to the qdisc pool Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/mac80211/wme.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c
index 425aa8588ea0..8cc036decc82 100644
--- a/net/mac80211/wme.c
+++ b/net/mac80211/wme.c
@@ -25,7 +25,7 @@ const int ieee802_1d_to_ac[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
25 25
26struct ieee80211_sched_data 26struct ieee80211_sched_data
27{ 27{
28 unsigned long qdisc_pool; 28 unsigned long qdisc_pool[BITS_TO_LONGS(TC_80211_MAX_QUEUES)];
29 struct tcf_proto *filter_list; 29 struct tcf_proto *filter_list;
30 struct Qdisc *queues[TC_80211_MAX_QUEUES]; 30 struct Qdisc *queues[TC_80211_MAX_QUEUES];
31 struct sk_buff_head requeued[TC_80211_MAX_QUEUES]; 31 struct sk_buff_head requeued[TC_80211_MAX_QUEUES];
@@ -158,7 +158,7 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd)
158 if (sta) { 158 if (sta) {
159 int ampdu_queue = sta->tid_to_tx_q[tid]; 159 int ampdu_queue = sta->tid_to_tx_q[tid];
160 if ((ampdu_queue < local->hw.queues) && 160 if ((ampdu_queue < local->hw.queues) &&
161 test_bit(ampdu_queue, &q->qdisc_pool)) { 161 test_bit(ampdu_queue, q->qdisc_pool)) {
162 queue = ampdu_queue; 162 queue = ampdu_queue;
163 pkt_data->flags |= IEEE80211_TXPD_AMPDU; 163 pkt_data->flags |= IEEE80211_TXPD_AMPDU;
164 } else { 164 } else {
@@ -191,7 +191,7 @@ static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd)
191 if (sta) { 191 if (sta) {
192 int ampdu_queue = sta->tid_to_tx_q[tid]; 192 int ampdu_queue = sta->tid_to_tx_q[tid];
193 if ((ampdu_queue < local->hw.queues) && 193 if ((ampdu_queue < local->hw.queues) &&
194 test_bit(ampdu_queue, &q->qdisc_pool)) { 194 test_bit(ampdu_queue, q->qdisc_pool)) {
195 queue = ampdu_queue; 195 queue = ampdu_queue;
196 pkt_data->flags |= IEEE80211_TXPD_AMPDU; 196 pkt_data->flags |= IEEE80211_TXPD_AMPDU;
197 } else { 197 } else {
@@ -272,7 +272,7 @@ static struct sk_buff *wme_qdiscop_dequeue(struct Qdisc* qd)
272 &local->state[queue])) || 272 &local->state[queue])) ||
273 (test_bit(IEEE80211_LINK_STATE_PENDING, 273 (test_bit(IEEE80211_LINK_STATE_PENDING,
274 &local->state[queue])) || 274 &local->state[queue])) ||
275 (!test_bit(queue, &q->qdisc_pool))) 275 (!test_bit(queue, q->qdisc_pool)))
276 continue; 276 continue;
277 277
278 /* there is space - try and get a frame */ 278 /* there is space - try and get a frame */
@@ -396,7 +396,7 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
396 396
397 /* reserve all legacy QoS queues */ 397 /* reserve all legacy QoS queues */
398 for (i = 0; i < min(IEEE80211_TX_QUEUE_DATA4, queues); i++) 398 for (i = 0; i < min(IEEE80211_TX_QUEUE_DATA4, queues); i++)
399 set_bit(i, &q->qdisc_pool); 399 set_bit(i, q->qdisc_pool);
400 400
401 return err; 401 return err;
402} 402}
@@ -657,7 +657,7 @@ int ieee80211_ht_agg_queue_add(struct ieee80211_local *local,
657 657
658 /* try to get a Qdisc from the pool */ 658 /* try to get a Qdisc from the pool */
659 for (i = IEEE80211_TX_QUEUE_BEACON; i < local->hw.queues; i++) 659 for (i = IEEE80211_TX_QUEUE_BEACON; i < local->hw.queues; i++)
660 if (!test_and_set_bit(i, &q->qdisc_pool)) { 660 if (!test_and_set_bit(i, q->qdisc_pool)) {
661 ieee80211_stop_queue(local_to_hw(local), i); 661 ieee80211_stop_queue(local_to_hw(local), i);
662 sta->tid_to_tx_q[tid] = i; 662 sta->tid_to_tx_q[tid] = i;
663 663
@@ -668,9 +668,9 @@ int ieee80211_ht_agg_queue_add(struct ieee80211_local *local,
668#ifdef CONFIG_MAC80211_HT_DEBUG 668#ifdef CONFIG_MAC80211_HT_DEBUG
669 if (net_ratelimit()) 669 if (net_ratelimit())
670 printk(KERN_DEBUG "allocated aggregation queue" 670 printk(KERN_DEBUG "allocated aggregation queue"
671 " %d tid %d addr %s pool=0x%lX\n", 671 " %d tid %d addr %s pool=0x%lX",
672 i, tid, print_mac(mac, sta->addr), 672 i, tid, print_mac(mac, sta->addr),
673 q->qdisc_pool); 673 q->qdisc_pool[0]);
674#endif /* CONFIG_MAC80211_HT_DEBUG */ 674#endif /* CONFIG_MAC80211_HT_DEBUG */
675 return 0; 675 return 0;
676 } 676 }
@@ -690,7 +690,7 @@ void ieee80211_ht_agg_queue_remove(struct ieee80211_local *local,
690 int agg_queue = sta->tid_to_tx_q[tid]; 690 int agg_queue = sta->tid_to_tx_q[tid];
691 691
692 /* return the qdisc to the pool */ 692 /* return the qdisc to the pool */
693 clear_bit(agg_queue, &q->qdisc_pool); 693 clear_bit(agg_queue, q->qdisc_pool);
694 sta->tid_to_tx_q[tid] = local->hw.queues; 694 sta->tid_to_tx_q[tid] = local->hw.queues;
695 695
696 if (requeue) 696 if (requeue)