summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
diff options
context:
space:
mode:
authorHante Meuleman2013-06-06 13:17:58 +0200
committerJohn W. Linville2013-06-12 21:02:20 +0200
commit0d24b0eade7d4b6a5d06fe02645449b1fd0f8e17 (patch)
treea2b9d8c735db01af2d79784f6c6bb246bad2ca56 /drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
parentbrcmfmac: fix invalid ifp lookup in firmware-signalling (diff)
downloadkernel-qcow2-linux-0d24b0eade7d4b6a5d06fe02645449b1fd0f8e17.tar.gz
kernel-qcow2-linux-0d24b0eade7d4b6a5d06fe02645449b1fd0f8e17.tar.xz
kernel-qcow2-linux-0d24b0eade7d4b6a5d06fe02645449b1fd0f8e17.zip
brcmfmac: Accept only first creditmap event.
During P2P testing it turned out that the firmware sents multiple multiple creditmap event messages. Only the first message from the firmware should be processed. Otherwise the firmware-signalled flow control can run haywire when it has packets outstanding in firmware. Reviewed-by: Arend Van Spriel <arend@broadcom.com> Signed-off-by: Hante Meuleman <meuleman@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
index 5f3874288d6b..bba4ff04ee19 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c
@@ -434,6 +434,7 @@ struct brcmf_fws_info {
u32 fifo_delay_map;
unsigned long borrow_defer_timestamp;
bool bus_flow_blocked;
+ bool creditmap_received;
};
/*
@@ -1356,6 +1357,10 @@ static int brcmf_fws_notify_credit_map(struct brcmf_if *ifp,
brcmf_err("event payload too small (%d)\n", e->datalen);
return -EINVAL;
}
+ if (fws->creditmap_received)
+ return 0;
+
+ fws->creditmap_received = true;
brcmf_dbg(TRACE, "enter: credits %pM\n", credits);
brcmf_fws_lock(ifp->drvr, flags);