mwifiex: update adapter->bss_prio_tbl[j].bss_prio_cur correctly
authorAmitkumar Karwar <akarwar@marvell.com>
Tue, 11 Sep 2012 01:30:44 +0000 (18:30 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 11 Sep 2012 19:31:53 +0000 (15:31 -0400)
"adapter->bss_prio_tbl[j].bss_prio_head" points to linked list of
interfaces with priority 'j'. "bss_prio_tbl[j].bss_prio_cur" is
supposed to point to next interface every time the routine for
dequeuing the packet is called. This ensures that each interface
gets fair chance.

Currently we have AP and station interfaces with priority '0'.
Therefore "adapter->bss_prio_tbl[0].bss_prio_cur" should
alternately point to AP and station nodes. Since "bss_prio_cur"
is not correctly updated, for each packet picked for AP, two
packets are picked for station interface.

This patch fixes the problem by correctly updating "bss_prio_cur".

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/wmm.c

index 8ccd6999fa9f1972bccf8692337cd22b1b58f892..766d45294c8687b38dc2cc7f4f2b25ee9054b96e 100644 (file)
@@ -907,17 +907,16 @@ mwifiex_wmm_get_highest_priolist_ptr(struct mwifiex_adapter *adapter,
                if (adapter->bss_prio_tbl[j].bss_prio_cur ==
                    (struct mwifiex_bss_prio_node *)
                    &adapter->bss_prio_tbl[j].bss_prio_head) {
-                       bssprio_node =
+                       adapter->bss_prio_tbl[j].bss_prio_cur =
                                list_first_entry(&adapter->bss_prio_tbl[j]
                                                 .bss_prio_head,
                                                 struct mwifiex_bss_prio_node,
                                                 list);
-                       bssprio_head = bssprio_node;
-               } else {
-                       bssprio_node = adapter->bss_prio_tbl[j].bss_prio_cur;
-                       bssprio_head = bssprio_node;
                }
 
+               bssprio_node = adapter->bss_prio_tbl[j].bss_prio_cur;
+               bssprio_head = bssprio_node;
+
                do {
                        priv_tmp = bssprio_node->priv;
                        hqp = &priv_tmp->wmm.highest_queued_prio;