aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/moxa/moxart_ether.h
diff options
context:
space:
mode:
authorJonas Jensen <jonas.jensen@gmail.com>2017-03-28 12:12:38 +0200
committerDavid S. Miller <davem@davemloft.net>2017-03-28 18:02:05 -0700
commitc2b341a620018d4eaeb0e85c16274ac4e5f153d4 (patch)
tree28b751d30475eecc67268570c3d0f114b460a49f /drivers/net/ethernet/moxa/moxart_ether.h
parentisdn: kcapi: avoid uninitialized data (diff)
downloadlinux-dev-c2b341a620018d4eaeb0e85c16274ac4e5f153d4.tar.xz
linux-dev-c2b341a620018d4eaeb0e85c16274ac4e5f153d4.zip
net: moxa: fix TX overrun memory leak
moxart_mac_start_xmit() doesn't care where tx_tail is, tx_head can catch and pass tx_tail, which is bad because moxart_tx_finished() isn't guaranteed to catch up on freeing resources from tx_tail. Add a check in moxart_mac_start_xmit() stopping the queue at the end of the circular buffer. Also add a check in moxart_tx_finished() waking the queue if the buffer has TX_WAKE_THRESHOLD or more free descriptors. While we're at it, move spin_lock_irq() to happen before our descriptor pointer is assigned in moxart_mac_start_xmit(). Addresses https://bugzilla.kernel.org/show_bug.cgi?id=99451 Signed-off-by: Jonas Jensen <jonas.jensen@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/moxa/moxart_ether.h')
-rw-r--r--drivers/net/ethernet/moxa/moxart_ether.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/ethernet/moxa/moxart_ether.h b/drivers/net/ethernet/moxa/moxart_ether.h
index 93a9563ac7c6..afc32ec998c0 100644
--- a/drivers/net/ethernet/moxa/moxart_ether.h
+++ b/drivers/net/ethernet/moxa/moxart_ether.h
@@ -59,6 +59,7 @@
#define TX_NEXT(N) (((N) + 1) & (TX_DESC_NUM_MASK))
#define TX_BUF_SIZE 1600
#define TX_BUF_SIZE_MAX (TX_DESC1_BUF_SIZE_MASK+1)
+#define TX_WAKE_THRESHOLD 16
#define RX_DESC_NUM 64
#define RX_DESC_NUM_MASK (RX_DESC_NUM-1)