Received: by 2002:a25:d783:0:0:0:0:0 with SMTP id o125csp654249ybg; Thu, 19 Mar 2020 06:28:48 -0700 (PDT) X-Google-Smtp-Source: ADFU+vuC3Z4wSH7jKYkFwxsMug6pWHVnIAahOpzW1PSL8WoDqWoZjrgbgdHc1UTYdxJI2fmGUR3t X-Received: by 2002:a9d:67c3:: with SMTP id c3mr2330337otn.340.1584624528757; Thu, 19 Mar 2020 06:28:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584624528; cv=none; d=google.com; s=arc-20160816; b=fFxjkdGaDYfrlOxqAQYjSGdIihZ1xLpRYAGT6jDUdfXwk2GZjtjgZ1d7SR0ZIpM57b 3GI/dBEMOG9ONLu2Org335sBCLE1yZPnX/0ArjB6IcPX4xqv0GDWKenTA8xBubOdSNNB dlQG8jxVqDOp02lbmptFZVSwTrK75k0HqF0EBS57Dk5QbUOjJAJharntYccGr6La3iD3 E6kVtQh5ieL6PLpWcC/bCI4zTVsQVKfXRTGW4pMuY5TNutWV3T3e1J6cJea1AMfJBVSi BkTDiBVEBQ0HM8wvTTAYMkOPvBOrhc8ZOLBZ0fIfsWdj6cQ5/WIOrqRNOKFilwz4mjTu cs5w== 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=000pEIfDItdC7xwxu6AqHK5dNIX9QSyVCKb8dUNJGLw=; b=oPvwCbF+Zn/EC2bcp5tTFKo3woN4eLeUpovuXWj1llwZJXG191X3IIin/ju+QmcgWM KQ9IrL7hCHHZpkqS1RFG1czwRJ9R+0m9yZFS5wEyZy1zRa3qxHCti4FGeSInfLiizmbx WhkW6cbbHwAgLQGYxmZX24OtXJ7rJbGhHI5uimGFAeDQ6DDOhmAUDC/UlTXgod2bDaFR JYmAoioUTij3IfD7vf+OUyVY2SxiT+JbEMvUpCnXbmE2fcj/AWWhbK3u/syHrS5f3+cU ipBVLuYkhRE1uTxooe/FBYtFh1GevjgcRt9AZL4gxEeVyzAm2xJqMs1QmALtZRSV/THp PwmQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="NnSO92M/"; 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 2si1011402ois.104.2020.03.19.06.28.36; Thu, 19 Mar 2020 06:28:48 -0700 (PDT) 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="NnSO92M/"; 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 S1730861AbgCSN1O (ORCPT + 99 others); Thu, 19 Mar 2020 09:27:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:55332 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730725AbgCSN1K (ORCPT ); Thu, 19 Mar 2020 09:27:10 -0400 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 6FBD021835; Thu, 19 Mar 2020 13:27:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1584624429; bh=apxNGTTawxO88AhaRt5S23Z7rTLns5Lk95jgyvF3/SA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NnSO92M/k1uoCXnFEJMV8TTq01OPstxiHUsyIw8ZOLKeL4WlhdIxgD1fgZZ4y2TZg axWQYQwiKd8Cyj6bERX6BqmIWdOEDYwlHeSsF3P4h5Xda+4yXVONqQvlVncpQ7KYuF wJMwainYXJ5yd9rU69YfzDLJTTqRwzx8o/KAKcoI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Esben Haabendal , "David S. Miller" , Sasha Levin Subject: [PATCH 5.5 29/65] net: ll_temac: Fix race condition causing TX hang Date: Thu, 19 Mar 2020 14:04:11 +0100 Message-Id: <20200319123935.546705776@linuxfoundation.org> X-Mailer: git-send-email 2.25.2 In-Reply-To: <20200319123926.466988514@linuxfoundation.org> References: <20200319123926.466988514@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: Esben Haabendal [ Upstream commit 84823ff80f7403752b59e00bb198724100dc611c ] It is possible that the interrupt handler fires and frees up space in the TX ring in between checking for sufficient TX ring space and stopping the TX queue in temac_start_xmit. If this happens, the queue wake from the interrupt handler will occur before the queue is stopped, causing a lost wakeup and the adapter's transmit hanging. To avoid this, after stopping the queue, check again whether there is sufficient space in the TX ring. If so, wake up the queue again. This is a port of the similar fix in axienet driver, commit 7de44285c1f6 ("net: axienet: Fix race condition causing TX hang"). Fixes: 23ecc4bde21f ("net: ll_temac: fix checksum offload logic") Signed-off-by: Esben Haabendal Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/xilinx/ll_temac_main.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/xilinx/ll_temac_main.c b/drivers/net/ethernet/xilinx/ll_temac_main.c index 21c1b4322ea78..fd578568b3bff 100644 --- a/drivers/net/ethernet/xilinx/ll_temac_main.c +++ b/drivers/net/ethernet/xilinx/ll_temac_main.c @@ -788,6 +788,9 @@ static void temac_start_xmit_done(struct net_device *ndev) stat = be32_to_cpu(cur_p->app0); } + /* Matches barrier in temac_start_xmit */ + smp_mb(); + netif_wake_queue(ndev); } @@ -830,9 +833,19 @@ temac_start_xmit(struct sk_buff *skb, struct net_device *ndev) cur_p = &lp->tx_bd_v[lp->tx_bd_tail]; if (temac_check_tx_bd_space(lp, num_frag + 1)) { - if (!netif_queue_stopped(ndev)) - netif_stop_queue(ndev); - return NETDEV_TX_BUSY; + if (netif_queue_stopped(ndev)) + return NETDEV_TX_BUSY; + + netif_stop_queue(ndev); + + /* Matches barrier in temac_start_xmit_done */ + smp_mb(); + + /* Space might have just been freed - check again */ + if (temac_check_tx_bd_space(lp, num_frag)) + return NETDEV_TX_BUSY; + + netif_wake_queue(ndev); } cur_p->app0 = 0; -- 2.20.1