From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Jiangfeng Xiao <xiaojiangfeng@huawei.com>,
"David S . Miller" <davem@davemloft.net>,
Sasha Levin <sashal@kernel.org>,
netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 4.19 80/84] net: hisilicon: Fix a BUG trigered by wrong bytes_compl
Date: Fri, 27 Dec 2019 12:43:48 -0500 [thread overview]
Message-ID: <20191227174352.6264-80-sashal@kernel.org> (raw)
In-Reply-To: <20191227174352.6264-1-sashal@kernel.org>
From: Jiangfeng Xiao <xiaojiangfeng@huawei.com>
[ Upstream commit 90b3b339364c76baa2436445401ea9ade040c216 ]
When doing stress test, we get the following trace:
kernel BUG at lib/dynamic_queue_limits.c:26!
Internal error: Oops - BUG: 0 [#1] SMP ARM
Modules linked in: hip04_eth
CPU: 0 PID: 2003 Comm: tDblStackPcap0 Tainted: G O L 4.4.197 #1
Hardware name: Hisilicon A15
task: c3637668 task.stack: de3bc000
PC is at dql_completed+0x18/0x154
LR is at hip04_tx_reclaim+0x110/0x174 [hip04_eth]
pc : [<c041abfc>] lr : [<bf0003a8>] psr: 800f0313
sp : de3bdc2c ip : 00000000 fp : c020fb10
r10: 00000000 r9 : c39b4224 r8 : 00000001
r7 : 00000046 r6 : c39b4000 r5 : 0078f392 r4 : 0078f392
r3 : 00000047 r2 : 00000000 r1 : 00000046 r0 : df5d5c80
Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: 32c5387d Table: 1e189b80 DAC: 55555555
Process tDblStackPcap0 (pid: 2003, stack limit = 0xde3bc190)
Stack: (0xde3bdc2c to 0xde3be000)
[<c041abfc>] (dql_completed) from [<bf0003a8>] (hip04_tx_reclaim+0x110/0x174 [hip04_eth])
[<bf0003a8>] (hip04_tx_reclaim [hip04_eth]) from [<bf0012c0>] (hip04_rx_poll+0x20/0x388 [hip04_eth])
[<bf0012c0>] (hip04_rx_poll [hip04_eth]) from [<c04c8d9c>] (net_rx_action+0x120/0x374)
[<c04c8d9c>] (net_rx_action) from [<c021eaf4>] (__do_softirq+0x218/0x318)
[<c021eaf4>] (__do_softirq) from [<c021eea0>] (irq_exit+0x88/0xac)
[<c021eea0>] (irq_exit) from [<c0240130>] (msa_irq_exit+0x11c/0x1d4)
[<c0240130>] (msa_irq_exit) from [<c0267ba8>] (__handle_domain_irq+0x110/0x148)
[<c0267ba8>] (__handle_domain_irq) from [<c0201588>] (gic_handle_irq+0xd4/0x118)
[<c0201588>] (gic_handle_irq) from [<c0558360>] (__irq_svc+0x40/0x58)
Exception stack(0xde3bdde0 to 0xde3bde28)
dde0: 00000000 00008001 c3637668 00000000 00000000 a00f0213 dd3627a0 c0af6380
de00: c086d380 a00f0213 c0a22a50 de3bde6c 00000002 de3bde30 c0558138 c055813c
de20: 600f0213 ffffffff
[<c0558360>] (__irq_svc) from [<c055813c>] (_raw_spin_unlock_irqrestore+0x44/0x54)
Kernel panic - not syncing: Fatal exception in interrupt
Pre-modification code:
int hip04_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
{
[...]
[1] priv->tx_head = TX_NEXT(tx_head);
[2] count++;
[3] netdev_sent_queue(ndev, skb->len);
[...]
}
An rx interrupt occurs if hip04_mac_start_xmit just executes to the line 2,
tx_head has been updated, but corresponding 'skb->len' has not been
added to dql_queue.
And then
hip04_mac_interrupt->__napi_schedule->hip04_rx_poll->hip04_tx_reclaim
In hip04_tx_reclaim, because tx_head has been updated,
bytes_compl will plus an additional "skb-> len"
which has not been added to dql_queue. And then
trigger the BUG_ON(bytes_compl > num_queued - dql->num_completed).
To solve the problem described above, we put
"netdev_sent_queue(ndev, skb->len);"
before
"priv->tx_head = TX_NEXT(tx_head);"
Fixes: a41ea46a9a12 ("net: hisilicon: new hip04 ethernet driver")
Signed-off-by: Jiangfeng Xiao <xiaojiangfeng@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/hisilicon/hip04_eth.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/hisilicon/hip04_eth.c b/drivers/net/ethernet/hisilicon/hip04_eth.c
index e8936ae46add..718afa4be2a0 100644
--- a/drivers/net/ethernet/hisilicon/hip04_eth.c
+++ b/drivers/net/ethernet/hisilicon/hip04_eth.c
@@ -456,9 +456,9 @@ hip04_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
skb_tx_timestamp(skb);
hip04_set_xmit_desc(priv, phys);
- priv->tx_head = TX_NEXT(tx_head);
count++;
netdev_sent_queue(ndev, skb->len);
+ priv->tx_head = TX_NEXT(tx_head);
stats->tx_bytes += skb->len;
stats->tx_packets++;
--
2.20.1
prev parent reply other threads:[~2019-12-27 17:45 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20191227174352.6264-1-sashal@kernel.org>
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 05/84] mwifiex: fix possible heap overflow in mwifiex_process_country_ie() Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 07/84] netfilter: ctnetlink: netns exit must wait for callbacks Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 08/84] mwifiex: Fix heap overflow in mmwifiex_process_tdls_action_frame() Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 12/84] netfilter: nf_queue: enqueue skbs with NULL dst Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 19/84] netfilter: nft_set_rbtree: bogus lookup/get on consecutive elements in named sets Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 20/84] netfilter: nf_tables: validate NFT_SET_ELEM_INTERVAL_END Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 21/84] netfilter: nf_tables: validate NFT_DATA_VALUE after nft_data_init() Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 22/84] netfilter: bridge: make sure to pull arp header in br_nf_forward_arp() Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 26/84] selftests: forwarding: Delete IPv6 address at the end Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 28/84] af_packet: set defaule value for tmo Sasha Levin
2019-12-27 17:42 ` [PATCH AUTOSEL 4.19 29/84] fjes: fix missed check in fjes_acpi_add Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 32/84] bnxt_en: Return error if FW returns more data than dump length Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 33/84] net: ena: fix napi handler misbehavior when the napi budget is zero Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 34/84] bpf, mips: Limit to 33 tail calls Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 37/84] samples: bpf: Replace symbol compare of trace_event Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 38/84] samples: bpf: fix syscall_tp due to unused syscall Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 40/84] net: usb: lan78xx: Fix suspend/resume PHY register access error Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 41/84] qede: Fix multicast mac configuration Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 45/84] bpf: Clear skb->tstamp in bpf_redirect when necessary Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 46/84] tcp/dccp: fix possible race __inet_lookup_established() Sasha Levin
2020-01-02 8:01 ` Naresh Kamboju
2020-01-09 15:32 ` Sasha Levin
2020-01-09 17:07 ` Michal Kubecek
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 47/84] 6pack,mkiss: fix possible deadlock Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 48/84] net: marvell: mvpp2: phylink requires the link interrupt Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 49/84] bnx2x: Do not handle requests from VFs after parity Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 50/84] bnx2x: Fix logic to get total no. of PFs per engine Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 51/84] bonding: fix active-backup transition after link failure Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 52/84] gtp: do not allow adding duplicate tid and ms_addr pdp context Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 53/84] gtp: fix wrong condition in gtp_genl_dump_pdp() Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 54/84] gtp: avoid zero size hashtable Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 55/84] cxgb4: Fix kernel panic while accessing sge_info Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 56/84] net: usb: lan78xx: Fix error message format specifier Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 58/84] rfkill: Fix incorrect check to avoid NULL pointer dereference Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 61/84] net: gemini: Fix memory leak in gmac_setup_txqs Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 67/84] net: qlogic: Fix error paths in ql_alloc_large_buffers() Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 68/84] net: nfc: nci: fix a possible sleep-in-atomic-context bug in nci_uart_tty_receive() Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 69/84] net: stmmac: Do not accept invalid MTU values Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 70/84] net: stmmac: xgmac: Clear previous RX buffer size Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 71/84] net: stmmac: RX buffer size must be 16 byte aligned Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 72/84] net: stmmac: Always arm TX Timer at end of transmission start Sasha Levin
2019-12-27 17:43 ` [PATCH AUTOSEL 4.19 75/84] net, sysctl: Fix compiler warning when only cBPF is present Sasha Levin
2019-12-27 17:43 ` Sasha Levin [this message]
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=20191227174352.6264-80-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=xiaojiangfeng@huawei.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).