X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=package%2Fkernel%2Fmac80211%2Fpatches%2F363-0005-brcmfmac-block-the-correct-flowring-when-backup-queu.patch;fp=package%2Fkernel%2Fmac80211%2Fpatches%2F363-0005-brcmfmac-block-the-correct-flowring-when-backup-queu.patch;h=0000000000000000000000000000000000000000;hb=f3a1db04f0ebba577598f1577d3c8c756c8bf757;hp=2d5f7b9be741075527b58e6271b318eaf73409a8;hpb=5db86ba649298bef0066cac8e4d0e17834f6b7b0;p=15.05%2Fopenwrt.git diff --git a/package/kernel/mac80211/patches/363-0005-brcmfmac-block-the-correct-flowring-when-backup-queu.patch b/package/kernel/mac80211/patches/363-0005-brcmfmac-block-the-correct-flowring-when-backup-queu.patch deleted file mode 100644 index 2d5f7b9be7..0000000000 --- a/package/kernel/mac80211/patches/363-0005-brcmfmac-block-the-correct-flowring-when-backup-queu.patch +++ /dev/null @@ -1,48 +0,0 @@ -From: Franky Lin -Date: Thu, 20 Aug 2015 22:06:06 +0200 -Subject: [PATCH] brcmfmac: block the correct flowring when backup queue - overflow - -brcmf_flowring_block blocks the last active flowring under the same -interface instead of the one provided by caller. This could lead to a -dead lock of netif stop if there are more than one flowring under the -interface and the traffic is high enough so brcmf_flowring_enqueue can -not unblock the ring right away. - -Reviewed-by: Pieter-Paul Giesberts -Reviewed-by: Hante Meuleman -Signed-off-by: Franky Lin -Signed-off-by: Arend van Spriel -Signed-off-by: Kalle Valo ---- - ---- a/drivers/net/wireless/brcm80211/brcmfmac/flowring.c -+++ b/drivers/net/wireless/brcm80211/brcmfmac/flowring.c -@@ -194,11 +194,15 @@ static void brcmf_flowring_block(struct - spin_lock_irqsave(&flow->block_lock, flags); - - ring = flow->rings[flowid]; -+ if (ring->blocked == blocked) { -+ spin_unlock_irqrestore(&flow->block_lock, flags); -+ return; -+ } - ifidx = brcmf_flowring_ifidx_get(flow, flowid); - - currently_blocked = false; - for (i = 0; i < flow->nrofrings; i++) { -- if (flow->rings[i]) { -+ if ((flow->rings[i]) && (i != flowid)) { - ring = flow->rings[i]; - if ((ring->status == RING_OPEN) && - (brcmf_flowring_ifidx_get(flow, i) == ifidx)) { -@@ -209,8 +213,8 @@ static void brcmf_flowring_block(struct - } - } - } -- ring->blocked = blocked; -- if (currently_blocked == blocked) { -+ flow->rings[flowid]->blocked = blocked; -+ if (currently_blocked) { - spin_unlock_irqrestore(&flow->block_lock, flags); - return; - }