Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13477761ybl; Sun, 29 Dec 2019 12:51:53 -0800 (PST) X-Google-Smtp-Source: APXvYqz3pJBtNFLGFDNQn6EFzjQI+QP99wsyTBq/+k93AnlmNumBQ23neCo/WPHfBwd3C+PqeXjN X-Received: by 2002:a05:6830:1e21:: with SMTP id t1mr51506446otr.194.1577652713394; Sun, 29 Dec 2019 12:51:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577652713; cv=none; d=google.com; s=arc-20160816; b=IC6n+ETyMqUkB4G6+ZREQwC7GnGJaM3d68IzkdlKw9lC6j6RJR3JIKdcHpHn9OxSKZ G+hdIh8rZ6OKGpf0z2N/Efd4dyP6yYtB7cY7wNLVoQxwan8QKjsF4OTjfYErg/9c/nY8 PTsP7RmKeo4PcpXRjAJCuBux1FPJgBsVx2VW81BVrQs7gSdMjR8RfGv8OGcDwFP5JbBO 7cJe0oZ8zTbFhCNhEGcwDGgGls6MX5c981NMysL9dfjvtWaTafyhZmT+usfdPXSf8QO/ FSSvUGFYIx4LonbDTpocyHgg/bHFSE/KNDHjHxyPINXApRwyGOw9k5lFDhCX6YsSJVRB yWLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=LhlvBFSXQ89/cUqtbe/EckNgfA5KfPfhxJBoC7cltuE=; b=R5GeR6wXBFPKn1qkXLrUrgiFfajPWAxOb1DVnyEEEJRtztTU8I/r5wt5NRCzytKHcY ZHYsrkcfNCzlxUAprg4BPPtGsnkyIK9KAmiPEKLEDxAPpU9mwPev+TN3RrCXFKIYz4JD FaEk6DP6cJkAUi0Sf3KLr7FBGH4BQ0bBPLIR+puKk7p+spnrkhtJXUIvRYqGYRa0myuv dPIaMrGgFseUfMLH3n7Yv8paQgUI5bumZSDndmIaHwuCrc2hnDimOhewOYJI0JHQzABU LihY/pBpjyPZb4C5AhW20du2m43TIj1E7dxJnb113GrF3vrW1jZ1SxL4eiCa6PhL8FzF +EuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=08W0ZxO0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x20si22637355otq.222.2019.12.29.12.51.42; Sun, 29 Dec 2019 12:51:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=08W0ZxO0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730427AbfL2SRx (ORCPT + 99 others); Sun, 29 Dec 2019 13:17:53 -0500 Received: from mail.kernel.org ([198.145.29.99]:39080 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726658AbfL2RWe (ORCPT ); Sun, 29 Dec 2019 12:22:34 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 245A420722; Sun, 29 Dec 2019 17:22:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577640153; bh=d97qlS8VxM98XOMAULtwb8+1EioCF1ED2DucKtX1+jc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=08W0ZxO0AWRTB3FZpS1sLyki+LoFQB1IQtc6FqPwoq025am4Tg90a8z6vXCSk1UYn b2oa/9VV8gnwtkBQ66dB8Lcv6oxIvNtbHY56XNATSCyx90N01U8V3icQ1nay3RYnBN fV7pWBu+aNaDQVevUWKx6Zjulya08rGnLahrw96U= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jiangfeng Xiao , "David S. Miller" Subject: [PATCH 4.14 005/161] net: hisilicon: Fix a BUG trigered by wrong bytes_compl Date: Sun, 29 Dec 2019 18:17:33 +0100 Message-Id: <20191229162357.225121321@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229162355.500086350@linuxfoundation.org> References: <20191229162355.500086350@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jiangfeng Xiao [ 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 : [] lr : [] 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) [] (dql_completed) from [] (hip04_tx_reclaim+0x110/0x174 [hip04_eth]) [] (hip04_tx_reclaim [hip04_eth]) from [] (hip04_rx_poll+0x20/0x388 [hip04_eth]) [] (hip04_rx_poll [hip04_eth]) from [] (net_rx_action+0x120/0x374) [] (net_rx_action) from [] (__do_softirq+0x218/0x318) [] (__do_softirq) from [] (irq_exit+0x88/0xac) [] (irq_exit) from [] (msa_irq_exit+0x11c/0x1d4) [] (msa_irq_exit) from [] (__handle_domain_irq+0x110/0x148) [] (__handle_domain_irq) from [] (gic_handle_irq+0xd4/0x118) [] (gic_handle_irq) from [] (__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 [] (__irq_svc) from [] (_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 Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/hisilicon/hip04_eth.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- 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 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++;