Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp278190ybi; Wed, 29 May 2019 21:14:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqy+wwaK/LPuVSvsB+kLbWqsxL0fEhLxtznj76XPMMFvocEG2vd5795y3ohP2NXFAjCjLNX0 X-Received: by 2002:a17:90a:248:: with SMTP id t8mr1542679pje.119.1559189660830; Wed, 29 May 2019 21:14:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559189660; cv=none; d=google.com; s=arc-20160816; b=KP5vQ+VWnTAiLczXGMgdQsOOEMke5zF+z+nzSzyeZwfBBePeuwSHbjBvKEhLHoiDw2 KZo5jBrNslVSOuFDhLVvGSU7p32ECnV/zV2KEXY2MaaW/0B+N2l/VazZZEK1QcBpXKyS If+caOYudplN07vzAymuXpNw+yZUF+pOy3YL3fnccXI9DzWCisrcuc/DtIOSKT5SATC3 NjN1u3EdLp8nIzdOg3XDiTamFM59fc+ApO2pm06N1ik+IEBwqmG3PzQEKSjXgMeK3Cft TdZ0XbWnSOt6yqj/QNCb7RllRM4y/U6F86Il5dd5pZPZuyobetKaKqGQg2y9rmNc32ES pkLA== 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=O4yAPYKLcMfN05ifidVKFZ6WFRBAlmcyQqwaUyBxzqU=; b=lrHRnP5EoSNJSk4U4Doxc71n8G0QJadFlxv3om71BfDjHeOAEybwYXkD2xYEL3S3ou mDVW01edUGvfm26uxZjDpnUzG0c/LOIV50Wxis7V4zOrfjt9zYtw2D1MNKjttlHEFWm/ vPgyutHKmo4vl6/0MgGtPCLCVfe1ZoxEg5KFonwWQOh0qGPDJckgNPj5aOudfWIUP6gL r/dMpyxG7+8rfyFESAhizq6OvoxbQdiCou6ShnLmBabEz/C29ct/VfFEe1pmb0jTefke EZpWVdGNwDKoGOA/z8sMos9AmzwXvIWlEBJHecXLfwHr+C3IGvHYnvmmzQOkEEVTZKZy fdfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=zBvskeIm; 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 36si2367102pla.80.2019.05.29.21.14.05; Wed, 29 May 2019 21:14:20 -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=zBvskeIm; 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 S1727842AbfE3ENA (ORCPT + 99 others); Thu, 30 May 2019 00:13:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:42540 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730673AbfE3DQ1 (ORCPT ); Wed, 29 May 2019 23:16:27 -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 E8CF52458C; Thu, 30 May 2019 03:16:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559186187; bh=kr1mZsj8ygrObG5nQgZ3wG80bWrkj5wGYBAuMQDFlWQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zBvskeImPKfmHsilzgw7fB8c0ygSmsW/bCxU+kO6Cd5obV5u9J3OzePAOtaG+3ugH IOjWqMrgAyRuFRE3g2CvK/n8KW+jSgO0pc26c3zhNicR4i/9yH4PghZmnWj93FHJPE q+RRLb2oHFKb41HoRPpNHHZJRece6xB/1QWJvNe0= 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 4.19 055/276] hv_netvsc: fix race that may miss tx queue wakeup Date: Wed, 29 May 2019 20:03:33 -0700 Message-Id: <20190530030528.713320653@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030523.133519668@linuxfoundation.org> References: <20190530030523.133519668@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 fb12b63439c67..35413041dcf81 100644 --- a/drivers/net/hyperv/netvsc.c +++ b/drivers/net/hyperv/netvsc.c @@ -872,12 +872,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", @@ -885,6 +879,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