Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1745114ybl; Sat, 11 Jan 2020 01:58:35 -0800 (PST) X-Google-Smtp-Source: APXvYqwM3NWYEPuNC+IyxQAIMU8M2TXNlzOW22bCwSsI8ohTomNcLjD2j1UxqiKHV61RPVWsJ3c7 X-Received: by 2002:aca:50cd:: with SMTP id e196mr5826094oib.178.1578736715604; Sat, 11 Jan 2020 01:58:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578736715; cv=none; d=google.com; s=arc-20160816; b=g/0/IgtfowS/KAlNCd/6THj2yu6RnPYOwT4GT8M7WO60skRM+DmrNDE/yD768kBP2T X7f1IQPoHxfyg7BpfQUGEjTGxL8XxWDc3STPBWhaXPEC2aRCp1GqyNCHKHZXzPWMNt/9 L9gQV/x3Hv/HlaQcVDwDQblK0PCVE8igzXOzfe1Jxr7EfOmWcZHu6tnGAjTQoMhXBIVz 2GFnvuW1OaVQoXfohHZHY17zqhxbIETKXqO6U2r0/oux8htNU7x8whFFjG4DAkf86G9Y ya2IC74NZcJEWwkdhAQwVCYGnaIuZooObxAhB4HXY0rX2oDJOR9XRCHEemPZihb2LiUw IzrQ== 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=buBX12RCcgkcFjtGVnWxt7AY9rqaNzc1SScWFPqmxc4=; b=sgh95Vau9z8W7haVcZg47AgUeoVsUky2YlsZzLcM+MMqAHHZ4FJdQMhkzPHqXvT3vT yWzczD0b6XlqoKsdAOwuKUc/6+QoIBtAAC2CQbmDJVPl00uqAXfzBlVEwKcp/G5Q59gU QCJFWWpFL3+fmhLfMNAf6bU3WM0JWzyzX79FuLNVbvpzSoFPExgRHibVolGQBgdbQQ0u sHkE5++ASxFoSwC1s3TxbvSCcJOeFMQKR107uUzP1RXcOIXmdfSRaayIFgiH1EnEhXv4 r4PQ5FxvRnfWwiQvIxzGT8ZEGXIFYhfuRUBtj9+Gvvy+yWbiQ8b3X409roivgxrLgikR JD7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="GGu6XO/w"; 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 h3si3212379otq.203.2020.01.11.01.58.24; Sat, 11 Jan 2020 01:58:35 -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="GGu6XO/w"; 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 S1729179AbgAKJ5b (ORCPT + 99 others); Sat, 11 Jan 2020 04:57:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:49920 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728825AbgAKJ5b (ORCPT ); Sat, 11 Jan 2020 04:57:31 -0500 Received: from localhost (unknown [62.119.166.9]) (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 5EB9A2077C; Sat, 11 Jan 2020 09:57:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578736650; bh=XeHyWWEnQOTi2O9lBiQmY2LxGna8vP21Mi46u6Rip+I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GGu6XO/wlpz4RuMi1UDdZuIjQDoMPMoVLcxrDpdySSorzj9lE8+cUwSN8fKPFqNvy WvfKbCG0aOCuvdAKKndwV6GzpP9sB2kdqoj/tnJqXvNP2r4xRoDFTJV0IFDwCtcEBf o5lM5ZTI3ClgcA5+xoo498IsDYplKiXbfg81oGUE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Manish Chopra , Ariel Elior , Jakub Kicinski , Sasha Levin Subject: [PATCH 4.4 40/59] bnx2x: Do not handle requests from VFs after parity Date: Sat, 11 Jan 2020 10:49:49 +0100 Message-Id: <20200111094846.118726829@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200111094835.417654274@linuxfoundation.org> References: <20200111094835.417654274@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: Manish Chopra [ Upstream commit 7113f796bbbced2470cd6d7379d50d7a7a78bf34 ] Parity error from the hardware will cause PF to lose the state of their VFs due to PF's internal reload and hardware reset following the parity error. Restrict any configuration request from the VFs after the parity as it could cause unexpected hardware behavior, only way for VFs to recover would be to trigger FLR on VFs and reload them. Signed-off-by: Manish Chopra Signed-off-by: Ariel Elior Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin --- drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 12 ++++++++++-- drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h | 1 + drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c | 12 ++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 82960603da33..026c72e62c18 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -9942,10 +9942,18 @@ static void bnx2x_recovery_failed(struct bnx2x *bp) */ static void bnx2x_parity_recover(struct bnx2x *bp) { - bool global = false; u32 error_recovered, error_unrecovered; - bool is_parity; + bool is_parity, global = false; +#ifdef CONFIG_BNX2X_SRIOV + int vf_idx; + + for (vf_idx = 0; vf_idx < bp->requested_nr_virtfn; vf_idx++) { + struct bnx2x_virtf *vf = BP_VF(bp, vf_idx); + if (vf) + vf->state = VF_LOST; + } +#endif DP(NETIF_MSG_HW, "Handling parity\n"); while (1) { switch (bp->recovery_state) { diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h index 6f6f13dc2be3..ab8339594cd3 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h @@ -139,6 +139,7 @@ struct bnx2x_virtf { #define VF_ACQUIRED 1 /* VF acquired, but not initialized */ #define VF_ENABLED 2 /* VF Enabled */ #define VF_RESET 3 /* VF FLR'd, pending cleanup */ +#define VF_LOST 4 /* Recovery while VFs are loaded */ bool flr_clnup_stage; /* true during flr cleanup */ diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c index a12a4236b143..e9fc3b09dba8 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_vfpf.c @@ -2095,6 +2095,18 @@ static void bnx2x_vf_mbx_request(struct bnx2x *bp, struct bnx2x_virtf *vf, { int i; + if (vf->state == VF_LOST) { + /* Just ack the FW and return if VFs are lost + * in case of parity error. VFs are supposed to be timedout + * on waiting for PF response. + */ + DP(BNX2X_MSG_IOV, + "VF 0x%x lost, not handling the request\n", vf->abs_vfid); + + storm_memset_vf_mbx_ack(bp, vf->abs_vfid); + return; + } + /* check if tlv type is known */ if (bnx2x_tlv_supported(mbx->first_tlv.tl.type)) { /* Lock the per vf op mutex and note the locker's identity. -- 2.20.1