Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp310634ybi; Wed, 29 May 2019 22:01:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqxLxfVhkb90v0VHNy1qgcE2XHgM1172WEVr4u8qxATExnZH0gmQhmHVMiP4PHJB9MmCVEBn X-Received: by 2002:a17:902:f081:: with SMTP id go1mr1987806plb.211.1559192481677; Wed, 29 May 2019 22:01:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559192481; cv=none; d=google.com; s=arc-20160816; b=LU+Kdc96p6vC3IfUUFlIyAJ0xydPU8teR3+ZYEx47IZh+Ex161hdkbDO6uC0nYkRSr C5vv0LYtfDAmEmtypn3YNb6GOUvh6kgCJ4nBfNYT/hvPRR0hT1XiJ2BZL3vXmQ9ng0p3 SZzSCfXaY5IotpsGSWYkn00By7HuKYoVxgN1iLZrvPo7KA/mOAL89bAAxuCXrcUkUXnm e8yiJBcyHGqCvZcoyslTghblQub2w3uzxPNrZWG8H9MZu5719kS5ORkXCjiAncoPOFRL o1y+R64ZM+XBEIKVwhZyYPDl34pSIDQRcAVxwVjvEHYxDJgVwJNbiiIkUSj9/wz3hdx2 M/HA== 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=G7jqLNgdK2lH7d5f/6rrj9ioqJlYv4I7Y3VRGu2WKj4=; b=Nfq7d5S38qCLtlqdIiAE/AHMOS6CmKSvmBXUk+qGAIiWAhWd5sYfoAmxGNfcyKc/a0 4wC1FSKhl3HwrdhB2vIP0wfHlxoVlmXkgHzd5o5tfhgxBusdQff/yOjtt9ia6HQ6FKdl 3u7Qg6Dtot4NqijNo/Or53gT0++f9Prm4RuBIUEYYGcm21oVNpGDuk6lj452lZrTg/yA 8mKEJbtej2/rHRZzB044I96OcBRl6mTkaZ+5Q+VxzgMt209+N2ordGYYULha8LU9Ov6S HJjGDh1tq8AenmbkALvYUYWae42YrHfYoVgk31JkLs95ZRXwu2kjNWWrGed9Rn3ij5Yz ki1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Zrf4cth+; 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 f61si1931647pje.44.2019.05.29.22.01.03; Wed, 29 May 2019 22:01:21 -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=Zrf4cth+; 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 S2389177AbfE3E5w (ORCPT + 99 others); Thu, 30 May 2019 00:57:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:45658 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727839AbfE3DJx (ORCPT ); Wed, 29 May 2019 23:09:53 -0400 Received: from localhost (ip67-88-213-2.z213-88-67.customer.algx.net [67.88.213.2]) (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 CA4DB244A2; Thu, 30 May 2019 03:09:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559185792; bh=ZkNZh9SIMk+1zb+7Px4neMQcWkOjdcIr0kEfZFVoaqY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zrf4cth+hLZ0gRR18KlySnMtb3sdfZY2eAUq+6r/rWQn13oiCJWz8SrLp3aR5Pj1P +9UkL2zCclE82KfnAV6F66bF7WfxyG0wIN8NAyF9cR4kSn6r9LG2Vcxa2Y2qjW0RpS 9IyxHb7JLph6u3Jrad2rT0dp9nyYvD6wJMlHuW5o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Haiyang Zhang , "David S. Miller" , Sasha Levin , Stephan Klein Subject: [PATCH 5.1 066/405] hv_netvsc: fix race that may miss tx queue wakeup Date: Wed, 29 May 2019 20:01:04 -0700 Message-Id: <20190530030544.279942933@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030540.291644921@linuxfoundation.org> References: <20190530030540.291644921@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 [ Upstream commit 93aa4792c3908eac87ddd368ee0fe0564148232b ] When the ring buffer is almost full due to RX completion messages, a TX packet may reach the "low watermark" and cause the queue stopped. If the TX completion arrives earlier than queue stopping, the wakeup may be missed. This patch moves the check for the last pending packet to cover both EAGAIN and success cases, so the queue will be reliably waked up when necessary. Reported-and-tested-by: Stephan Klein Signed-off-by: Haiyang Zhang Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/hyperv/netvsc.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c index e0dce373cdd9d..3d4a166a49d58 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -875,12 +875,6 @@ static inline int netvsc_send_pkt( } else if (ret == -EAGAIN) { netif_tx_stop_queue(txq); ndev_ctx->eth_stats.stop_queue++; - if (atomic_read(&nvchan->queue_sends) < 1 && - !net_device->tx_disable) { - netif_tx_wake_queue(txq); - ndev_ctx->eth_stats.wake_queue++; - ret = -ENOSPC; - } } else { netdev_err(ndev, "Unable to send packet pages %u len %u, ret %d\n", @@ -888,6 +882,15 @@ static inline int netvsc_send_pkt( ret); } + if (netif_tx_queue_stopped(txq) && + atomic_read(&nvchan->queue_sends) < 1 && + !net_device->tx_disable) { + netif_tx_wake_queue(txq); + ndev_ctx->eth_stats.wake_queue++; + if (ret == -EAGAIN) + ret = -ENOSPC; + } + return ret; } -- 2.20.1