aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArend van Spriel <arend@broadcom.com>2013-04-17 15:25:58 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-22 15:20:24 -0400
commit047445c579dc28772aadaac6b7b37289aad72b22 (patch)
treecefe248a7167e10dca03e8d23dae2ab9c6e1c1ff
parent88f656fa10563688978c8269ffb11ceb83a56ba2 (diff)
brcmfmac: stop dequeue upon sk_buff commit failure
In the dequeue worker the function brcmf_commit_skb() is called. However, instead of increment the credit count upon success it should break the for loop upon failure. Otherwise, it will result in an endless loop. Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
index 25eaa1305db2..8ae7da8bf688 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
@@ -1850,10 +1850,9 @@ static void brcmf_fws_dequeue_worker(struct work_struct *worker)
1850 fws->fifo_credit[fifo]); 1850 fws->fifo_credit[fifo]);
1851 for (credit = 0; credit < fws->fifo_credit[fifo]; /* nop */) { 1851 for (credit = 0; credit < fws->fifo_credit[fifo]; /* nop */) {
1852 skb = brcmf_fws_deq(fws, fifo); 1852 skb = brcmf_fws_deq(fws, fifo);
1853 if (!skb) 1853 if (!skb || brcmf_fws_commit_skb(fws, fifo, skb))
1854 break; 1854 break;
1855 if (!brcmf_fws_commit_skb(fws, fifo, skb) && 1855 if (brcmf_skbcb(skb)->if_flags &
1856 brcmf_skbcb(skb)->if_flags &
1857 BRCMF_SKB_IF_FLAGS_CREDITCHECK_MASK) 1856 BRCMF_SKB_IF_FLAGS_CREDITCHECK_MASK)
1858 credit++; 1857 credit++;
1859 } 1858 }