From: David Woodhouse <dwmw2@infradead.org>
To: netdev@vger.kernel.org
Cc: Francois Romieu <romieu@fr.zoreil.com>
Subject: [PATCH 1/7] 8139cp: Do not re-enable RX interrupts in cp_tx_timeout()
Date: Wed, 23 Sep 2015 09:43:41 +0100 [thread overview]
Message-ID: <1442997821.36485.45.camel@infradead.org> (raw)
In-Reply-To: <1442996049.36485.32.camel@infradead.org>
[-- Attachment #1: Type: text/plain, Size: 1753 bytes --]
From: David Woodhouse <David.Woodhouse@intel.com>
If an RX interrupt was already received but NAPI has not yet run when
the RX timeout happens, we end up in cp_tx_timeout() with RX interrupts
already disabled. Blindly re-enabling them will cause an IRQ storm.
(This is made particularly horrid by the fact that cp_interrupt() always
returns that it's handled the interrupt, even when it hasn't actually
done anything. If it didn't do that, the core IRQ code would have
detected the storm and handled it, I'd have had a clear smoking gun
backtrace instead of just a spontaneously resetting router, and I'd have
at *least* two days of my life back. Changing the return value of
cp_interrupt() will be argued about under separate cover.)
Unconditionally leave RX interrupts disabled after the reset, and
schedule NAPI to check the receive ring and re-enable them.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
---
drivers/net/ethernet/realtek/8139cp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
index ba3dab7..947932d 100644
--- a/drivers/net/ethernet/realtek/8139cp.c
+++ b/drivers/net/ethernet/realtek/8139cp.c
@@ -1262,9 +1262,10 @@ static void cp_tx_timeout(struct net_device *dev)
rc = cp_init_rings(cp);
cp_start_hw(cp);
__cp_set_rx_mode(dev);
- cp_enable_irq(cp);
+ cpw16_f(IntrMask, cp_norx_intr_mask);
netif_wake_queue(dev);
+ napi_schedule_irqoff(&cp->napi);
spin_unlock_irqrestore(&cp->lock, flags);
}
--
2.4.3
--
David Woodhouse Open Source Technology Centre
David.Woodhouse@intel.com Intel Corporation
[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 5691 bytes --]
next prev parent reply other threads:[~2015-09-23 8:43 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-17 23:19 [PATCH 1/2] 8139cp: Use dev_kfree_skb_any() instead of dev_kfree_skb() in cp_clean_rings() David Woodhouse
2015-09-17 23:21 ` [PATCH 2/2] 8139cp: Call __cp_set_rx_mode() from cp_tx_timeout() David Woodhouse
2015-09-18 11:37 ` [PATCH 3/2] 8139cp: Improve accuracy of cp_interrupt() return, to survive IRQ storms David Woodhouse
2015-09-18 12:17 ` [PATCH 4/2] 8139cp: Do not re-enable RX interrupts in cp_tx_timeout() David Woodhouse
2015-09-21 5:24 ` [PATCH 2/2] 8139cp: Call __cp_set_rx_mode() from cp_tx_timeout() David Miller
2015-09-21 13:59 ` David Woodhouse
2015-09-21 14:01 ` [PATCH 1/7] 8139cp: Improve accuracy of cp_interrupt() return, to survive IRQ storms David Woodhouse
2015-09-21 20:25 ` Francois Romieu
2015-09-21 20:52 ` David Woodhouse
2015-09-22 23:45 ` David Miller
2015-09-23 8:14 ` David Woodhouse
2015-09-23 8:43 ` David Woodhouse [this message]
2015-09-23 8:44 ` [PATCH 2/7] 8139cp: Fix tx_queued debug message to print correct slot numbers David Woodhouse
2015-09-23 8:44 ` [PATCH 3/7] 8139cp: Fix TSO/scatter-gather descriptor setup David Woodhouse
2015-09-23 8:44 ` [PATCH 4/7] 8139cp: Reduce duplicate csum/tso code in cp_start_xmit() David Woodhouse
2015-09-23 8:45 ` [PATCH 5/7] 8139cp: Fix DMA unmapping of transmitted buffers David Woodhouse
2015-09-23 8:45 ` [PATCH 6/7] 8139cp: Dump contents of descriptor ring on TX timeout David Woodhouse
2015-09-23 8:46 ` [PATCH 7/7] 8139cp: Enable offload features by default David Woodhouse
2015-09-23 17:58 ` [PATCH 1/7] 8139cp: Improve accuracy of cp_interrupt() return, to survive IRQ storms David Miller
2015-09-23 19:45 ` David Woodhouse
2015-09-23 21:48 ` David Miller
2015-09-23 22:00 ` David Woodhouse
2015-09-23 23:29 ` Francois Romieu
2015-09-24 8:58 ` [PATCH WTF] 8139cp: Fix GSO MSS handling David Woodhouse
2015-09-24 10:38 ` [PATCH v2 RFC] " David Woodhouse
2015-09-24 12:05 ` Eric Dumazet
2015-09-24 12:31 ` David Woodhouse
2015-09-28 5:37 ` Tom Herbert
2015-09-28 7:21 ` David Woodhouse
2015-09-27 5:38 ` David Miller
2015-09-23 22:02 ` [PATCH] 8139cp: Set GSO max size and enforce it David Woodhouse
2015-09-23 22:44 ` [PATCH 1/7] 8139cp: Improve accuracy of cp_interrupt() return, to survive IRQ storms Francois Romieu
2015-09-23 23:09 ` David Woodhouse
2015-10-28 8:47 ` David Woodhouse
2015-09-23 22:44 ` Francois Romieu
2015-09-23 23:18 ` David Woodhouse
2015-09-21 14:02 ` [PATCH 2/7] 8139cp: Do not re-enable RX interrupts in cp_tx_timeout() David Woodhouse
2015-09-22 23:46 ` David Miller
2015-09-21 14:02 ` [PATCH 3/7] 8139cp: Fix tx_queued debug message to print correct slot numbers David Woodhouse
2015-09-21 14:02 ` [PATCH 4/7] 8139cp: Fix TSO/scatter-gather descriptor setup David Woodhouse
2015-09-21 21:01 ` Francois Romieu
2015-09-21 21:06 ` David Woodhouse
2015-09-21 21:47 ` David Woodhouse
2015-09-22 21:59 ` Francois Romieu
2015-09-21 14:03 ` [PATCH 5/7] 8139cp: Fix DMA unmapping of transmitted buffers David Woodhouse
2015-09-21 14:03 ` [PATCH 6/7] 8139cp: Dump contents of descriptor ring on TX timeout David Woodhouse
2015-09-21 14:05 ` [PATCH 7/7] 8139cp: Avoid gratuitous writes to TxPoll register when already running David Woodhouse
2015-09-21 20:54 ` Francois Romieu
2015-09-21 21:10 ` David Woodhouse
2015-09-21 14:11 ` [PATCH 2/2] 8139cp: Call __cp_set_rx_mode() from cp_tx_timeout() David Woodhouse
2015-09-21 5:24 ` [PATCH 1/2] 8139cp: Use dev_kfree_skb_any() instead of dev_kfree_skb() in cp_clean_rings() David Miller
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=1442997821.36485.45.camel@infradead.org \
--to=dwmw2@infradead.org \
--cc=netdev@vger.kernel.org \
--cc=romieu@fr.zoreil.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).