From: "Arend van Spriel" <arend@broadcom.com>
To: "John W. Linville" <linville@tuxdriver.com>
Cc: "Linux Wireless List" <linux-wireless@vger.kernel.org>,
"Piotr Haber" <phaber@broadcom.com>,
"Arend van Spriel" <arend@broadcom.com>
Subject: [PATCH 04/11] brcmsmac: fix bounds checking in tx/rx
Date: Wed, 28 Nov 2012 21:44:07 +0100 [thread overview]
Message-ID: <1354135454-7035-5-git-send-email-arend@broadcom.com> (raw)
In-Reply-To: <1354135454-7035-1-git-send-email-arend@broadcom.com>
From: Piotr Haber <phaber@broadcom.com>
brcms_b_txstatus and brcms_b_recv are off by one when
doing bounds checking on number of packets to process
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Piotr Haber <phaber@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
---
drivers/net/wireless/brcm80211/brcmsmac/main.c | 30 ++++++++++++++----------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index 054e1da..8fce687 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
@@ -1044,11 +1044,17 @@ brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal)
s1 = bcma_read32(core, D11REGOFFS(frmtxstatus));
while (!(*fatal)
&& (s1 & TXS_V)) {
+ /* !give others some time to run! */
+ if (n >= max_tx_num) {
+ morepending = true;
+ break;
+ }
if (s1 == 0xffffffff) {
brcms_err(core, "wl%d: %s: dead chip\n", wlc_hw->unit,
__func__);
- return morepending;
+ *fatal = true;
+ return false;
}
s2 = bcma_read32(core, D11REGOFFS(frmtxstatus2));
@@ -1060,17 +1066,12 @@ brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal)
*fatal = brcms_c_dotxstatus(wlc_hw->wlc, txs);
- /* !give others some time to run! */
- if (++n >= max_tx_num)
- break;
s1 = bcma_read32(core, D11REGOFFS(frmtxstatus));
+ n++;
}
if (*fatal)
- return 0;
-
- if (n >= max_tx_num)
- morepending = true;
+ return false;
return morepending;
}
@@ -7631,16 +7632,19 @@ brcms_b_recv(struct brcms_hardware *wlc_hw, uint fifo, bool bound)
uint n = 0;
uint bound_limit = bound ? RXBND : -1;
+ bool morepending;
skb_queue_head_init(&recv_frames);
/* gather received frames */
- while (dma_rx(wlc_hw->di[fifo], &recv_frames)) {
-
+ do {
/* !give others some time to run! */
- if (++n >= bound_limit)
+ if (n >= bound_limit)
break;
- }
+
+ morepending = dma_rx(wlc_hw->di[fifo], &recv_frames);
+ n++;
+ } while (morepending);
/* post more rbufs */
dma_rxfill(wlc_hw->di[fifo]);
@@ -7670,7 +7674,7 @@ brcms_b_recv(struct brcms_hardware *wlc_hw, uint fifo, bool bound)
brcms_c_recv(wlc_hw->wlc, p);
}
- return n >= bound_limit;
+ return morepending;
}
/* second-level interrupt processing
--
1.7.10.4
next prev parent reply other threads:[~2012-11-28 20:44 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-28 20:44 [PATCH 00/11] brcm80211: bugfixes, cleanup, and bcm4313 iPA support Arend van Spriel
2012-11-28 20:44 ` [PATCH 01/11] brcm80211: update the MAINTAINERS file Arend van Spriel
2012-11-28 20:44 ` [PATCH 02/11] brcmsmac: handle packet drop during transmit correctly Arend van Spriel
2012-11-28 20:44 ` [PATCH 03/11] brcmsmac: cleanup in isr code Arend van Spriel
2012-11-28 20:44 ` Arend van Spriel [this message]
2012-11-28 20:44 ` [PATCH 05/11] brcmsmac: hardware info in debugfs Arend van Spriel
2012-11-29 17:08 ` Seth Forshee
2012-11-29 17:59 ` Arend van Spriel
2012-11-28 20:44 ` [PATCH 06/11] brcmsmac: move PHY functions Arend van Spriel
2012-11-28 20:44 ` [PATCH 07/11] brcmsmac: support 4313iPA Arend van Spriel
2012-11-28 20:44 ` [PATCH 08/11] brcmfmac: get rid of struct brcmf_cfg80211_info::link_up attribute Arend van Spriel
2012-11-28 20:44 ` [PATCH 09/11] brcmfmac: remove mode from struct brcmf_cfg80211_conf Arend van Spriel
2012-11-28 20:44 ` [PATCH 10/11] brcmfmac: fix bug in setting mgmt ie and parsing vndrs ie Arend van Spriel
2012-11-28 20:44 ` [PATCH 11/11] brcmfmac: change debug output for received event Arend van Spriel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1354135454-7035-5-git-send-email-arend@broadcom.com \
--to=arend@broadcom.com \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=phaber@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).