From: John W. Linville Date: Tue, 3 Jan 2012 20:16:34 +0000 (-0500) Subject: Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel... X-Git-Tag: v3.3-rc1~182^2~44 X-Git-Url: http://git.samba.org/samba.git/?a=commitdiff_plain;h=57adc1fcbae2c13104ce291b40f23e40a414fa87;p=sfrench%2Fcifs-2.6.git Merge branch 'master' of git://git./linux/kernel/git/linville/wireless-next into for-davem Conflicts: drivers/net/wireless/b43/dma.c drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c --- 57adc1fcbae2c13104ce291b40f23e40a414fa87 diff --cc drivers/net/wireless/b43/dma.c index af23968520b6,56d37dc967aa..b5f1b91002bb --- a/drivers/net/wireless/b43/dma.c +++ b/drivers/net/wireless/b43/dma.c @@@ -1465,8 -1465,10 +1465,10 @@@ int b43_dma_tx(struct b43_wldev *dev, s if ((free_slots(ring) < TX_SLOTS_PER_FRAME) || should_inject_overflow(ring)) { /* This TX ring is full. */ - ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb)); + unsigned int skb_mapping = skb_get_queue_mapping(skb); + ieee80211_stop_queue(dev->wl->hw, skb_mapping); + dev->wl->tx_queue_stopped[skb_mapping] = 1; - ring->stopped = 1; + ring->stopped = true; if (b43_debug(dev, B43_DBG_DMAVERBOSE)) { b43dbg(dev->wl, "Stopped TX ring %d\n", ring->index); } @@@ -1584,8 -1586,15 +1586,15 @@@ void b43_dma_handle_txstatus(struct b43 } if (ring->stopped) { B43_WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME); - ieee80211_wake_queue(dev->wl->hw, ring->queue_prio); - ring->stopped = 0; + ring->stopped = false; + } + + if (dev->wl->tx_queue_stopped[ring->queue_prio]) { + dev->wl->tx_queue_stopped[ring->queue_prio] = 0; + } else { + /* If the driver queue is running wake the corresponding + * mac80211 queue. */ + ieee80211_wake_queue(dev->wl->hw, ring->queue_prio); if (b43_debug(dev, B43_DBG_DMAVERBOSE)) { b43dbg(dev->wl, "Woke up TX ring %d\n", ring->index); } diff --cc drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index 2c3a99d6c9a6,72bee2c04957..eb9eb766ac27 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c @@@ -805,7 -784,7 +784,7 @@@ static int brcmf_netdev_stop(struct net return 0; /* Set state and stop OS transmissions */ - drvr->up = false; - drvr->bus_if->drvr_up = 0; ++ drvr->bus_if->drvr_up = false; netif_stop_queue(ndev); return 0; @@@ -842,8 -821,8 +821,8 @@@ static int brcmf_netdev_open(struct net } /* Allow transmit calls */ netif_start_queue(ndev); - drvr_priv->pub.up = true; - if (brcmf_cfg80211_up(drvr_priv->pub.config)) { - drvr->bus_if->drvr_up = 1; ++ drvr->bus_if->drvr_up = true; + if (brcmf_cfg80211_up(drvr->config)) { brcmf_dbg(ERROR, "failed to bring up cfg80211\n"); return -1; }