Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp2664125imj; Mon, 11 Feb 2019 06:41:06 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib+sT4R8FUlD/EjY2VEY3qRcYwBlSM5oW3S7EozYOrJ449hEvwgVQ7exFsRD2uIik0eZoxd X-Received: by 2002:a63:d005:: with SMTP id z5mr33594746pgf.64.1549896066828; Mon, 11 Feb 2019 06:41:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549896066; cv=none; d=google.com; s=arc-20160816; b=inwiMDDSHoYBjiLBDRmj+LqYW+P7JBnacdxjGo2Jz7dCnEKMMHtIIfZor7zTWisdf2 dbqXtxxHbGPfHWBoj27AAdJ4Azb1nFmZy4JMEz+LlDoyyoAoaHo4OiCGFHdOkhE1CcYi gHTmDIusaomK/9GDoaoxzwzARuUBbXpVBRvpaHVZjV1fT0VcuD3wpUNCHG43+C4v1clw qKL9/0YBHsGbHdJCTtUaWXLUMEg2ZKUl3DqltTzk+o7yiWmD/zQ39nM3m1NB4isudbTR ixBWJswFohFJHyyALqOCgxaBqsoAv6o+6Leg6x7qMnhX+BSNxFJFhmnbQVRyOu8XUbIP LQQg== 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=22x1BXvz7R67FVzqmMs0W7jQBgtQOxyUS5i2xBV/wpE=; b=QHNovEJ7xMk56mOkn6Ea6ky8bYJVEusyJiYrJKZRI+/o/u2UHv4koOMoBYHRuUVsAR p+s8tfWc+j+K3NWXNb/mpX6cLTDCZ3D+9LnfOJr7UUyJX9U8lgOxHMmZ2U1Ow43c3d0q JDMOYq0Z1PC9u4D5xIOdxoVkEqmyrCGrFH135hrgTmVcrf+h+1TwYOQclVJVFDQ4g70I 0L61LhYn4ARpNKnAsFf+VYyOloACpytqCOksRXlDwCiQA5oWtkMwn0UUiZRnmroEJARW IwI41jR7wY69VGu52EbAjr7Mo4bEFThggq828lKIKhfuIpQDn9TV0qPsQomUhIuMNk+j UeRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Tg9pANFL; 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 z23si9444939pgu.151.2019.02.11.06.40.50; Mon, 11 Feb 2019 06:41:06 -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=Tg9pANFL; 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 S1731952AbfBKOjv (ORCPT + 99 others); Mon, 11 Feb 2019 09:39:51 -0500 Received: from mail.kernel.org ([198.145.29.99]:50340 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731224AbfBKOjt (ORCPT ); Mon, 11 Feb 2019 09:39:49 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 BBD5C20838; Mon, 11 Feb 2019 14:39:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1549895989; bh=xpQ2YgxfyAnFImw5jXxgJLzldlh7c1fIjPDnSO92Dlk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Tg9pANFLXb1OKtqJFTJj374xt0knIQA+pWFb/cbJAVowi/QF/Vva/OERP4zjwM16d B7z+B3HCpaWOTHuRAPo2NOF++agJgNodBi9fef8uiMzPEWWASmhONe8Hpws4bi93iz tRfPf+V3UMMzDpQ5TUzkVrc26ASkREsq0gUNJiyw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alan Brady , Andrew Bowers , Jeff Kirsher , Sasha Levin Subject: [PATCH 4.19 037/313] i40e: prevent overlapping tx_timeout recover Date: Mon, 11 Feb 2019 15:15:17 +0100 Message-Id: <20190211141855.978367503@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190211141852.749630980@linuxfoundation.org> References: <20190211141852.749630980@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore 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 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit d5585b7b6846a6d0f9517afe57be3843150719da ] If a TX hang occurs, we attempt to recover by incrementally resetting. If we're starved for CPU time, it's possible the reset doesn't actually complete (or even fire) before another tx_timeout fires causing us to fly through the different resets without actually doing them. This adds a bit to set and check if a timeout recovery is already pending and, if so, bail out of tx_timeout. The bit will get cleared at the end of i40e_rebuild when reset is complete. Signed-off-by: Alan Brady Tested-by: Andrew Bowers Signed-off-by: Jeff Kirsher Signed-off-by: Sasha Levin --- drivers/net/ethernet/intel/i40e/i40e.h | 1 + drivers/net/ethernet/intel/i40e/i40e_main.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h index 7a80652e2500..f84e2c2d02c0 100644 --- a/drivers/net/ethernet/intel/i40e/i40e.h +++ b/drivers/net/ethernet/intel/i40e/i40e.h @@ -122,6 +122,7 @@ enum i40e_state_t { __I40E_MDD_EVENT_PENDING, __I40E_VFLR_EVENT_PENDING, __I40E_RESET_RECOVERY_PENDING, + __I40E_TIMEOUT_RECOVERY_PENDING, __I40E_MISC_IRQ_REQUESTED, __I40E_RESET_INTR_RECEIVED, __I40E_REINIT_REQUESTED, diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index ed9d3fc4aaba..bfa5c525cf31 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -336,6 +336,10 @@ static void i40e_tx_timeout(struct net_device *netdev) (pf->tx_timeout_last_recovery + netdev->watchdog_timeo))) return; /* don't do any new action before the next timeout */ + /* don't kick off another recovery if one is already pending */ + if (test_and_set_bit(__I40E_TIMEOUT_RECOVERY_PENDING, pf->state)) + return; + if (tx_ring) { head = i40e_get_head(tx_ring); /* Read interrupt register */ @@ -9566,6 +9570,7 @@ end_core_reset: clear_bit(__I40E_RESET_FAILED, pf->state); clear_recovery: clear_bit(__I40E_RESET_RECOVERY_PENDING, pf->state); + clear_bit(__I40E_TIMEOUT_RECOVERY_PENDING, pf->state); } /** -- 2.19.1