aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHante Meuleman2013-06-06 13:17:58 +0200
committerJohn W. Linville2013-06-12 15:02:20 -0400
commit0d24b0eade7d4b6a5d06fe02645449b1fd0f8e17 (patch)
treea2b9d8c735db01af2d79784f6c6bb246bad2ca56
parent402e3ba20285f0ebe4f4bebdecb7ab24999f3626 (diff)
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>
-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);