Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp876582pxb; Wed, 1 Sep 2021 11:53:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJypob4xw/u6dtUG3PyFGonPrQPtQUAcKaiiUk+tyOFQjnifnw+3rXDITIDuiAIaeqMgjsMr X-Received: by 2002:a17:906:504:: with SMTP id j4mr952793eja.245.1630522429123; Wed, 01 Sep 2021 11:53:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630522429; cv=none; d=google.com; s=arc-20160816; b=iqadd7AwCetC0By9BjTIX/J5DAy8Iv6dEr5yUykINobcIgh5Lo1s9kaoaYhJDCdwTy QQPr06CDjP7pNaX+oeDXhsT5hYiJWNp0S+SFdWiGVQtz4jvMifJV2iq/w3fHMiq8rPrz JkknVR0QVOWCnw29dEwVXPEeIZTBpyPnAJt9pB+fAwoMnKUWpacQn+TTX9vvdhR8VtHP bNXjDig1OoXXt/XQspuVVpwW+cpD1LW5EX7yLcJVQJxKzIm2et3VnaNiubGGheXC9FaC d2xFkEYCpxwG+hlcHFc38HgdlGNbNx/m0+NYpkbZTu6Vu5vvoPiEyE5eLBnzIINoVni0 mKHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=B5Dxy6AJNCqZaLGiSYqdlSHYRUK8+6GrEtiNu9z0jSI=; b=OtuJmEj7AM8QlHuBs8/+fRiZoyLaMYioqVE1Uzz1AHczU59ZEemEphDB4N94DvesWl cZY4HlXCUQoYoaJ1QOBj/0fjNDsIufYzzR8dOudAZJAdPKpb66ujB26n+9RMOD5ozf0N 7LWc2ctFrq1EkRefskb/DOnuka/FDad4B+Igfpfy/8pUyA6HPAm9thSnlY0YuH7/LJHS eyyu6EU4dwqJFWuuKGAQSBHn7BfImH55vmGmWZLsKFBe66CYV7z8u0XEswEWP0fl5CTY NAvR7jvBoF8LI6FXXIQFfVfmGK+fVTK94uvNk4B2pUuZLrn2dlCwnqHQNl9TplkFP0Pk MwSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=0gnQiImo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ar28si594434ejc.326.2021.09.01.11.53.25; Wed, 01 Sep 2021 11:53:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=0gnQiImo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245473AbhIAMgN (ORCPT + 99 others); Wed, 1 Sep 2021 08:36:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:60574 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244778AbhIAMcg (ORCPT ); Wed, 1 Sep 2021 08:32:36 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 198ED61090; Wed, 1 Sep 2021 12:31:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1630499498; bh=/XDQEDnQln0hiTBQHAQvOvFQW8FoxrwQCmgAZZU/al0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0gnQiImod4aeU7z1sRM1aW48HnkRLLBwkVW54GdQBWVFHXzqVWNEBGfxtDvPMXzFG Y5mT3k7LAieOuF4CYq8bvCDDHPI+mvRX4QzOh3gi+c3tMKfUM2BD/o/Yo1jP/6gmhy 7SYgf4J1TITUAyqJbFg+owPY/NJPVt4cUjspzpGE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yufeng Mo , Salil Mehta , Guangbin Huang , Jakub Kicinski , Sasha Levin Subject: [PATCH 5.4 22/48] net: hns3: clear hardware resource when loading driver Date: Wed, 1 Sep 2021 14:28:12 +0200 Message-Id: <20210901122254.140697782@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210901122253.388326997@linuxfoundation.org> References: <20210901122253.388326997@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yufeng Mo [ Upstream commit 1a6d281946c330cee2855f6d0cd796616e54601f ] If a PF is bonded to a virtual machine and the virtual machine exits unexpectedly, some hardware resource cannot be cleared. In this case, loading driver may cause exceptions. Therefore, the hardware resource needs to be cleared when the driver is loaded. Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support") Signed-off-by: Yufeng Mo Signed-off-by: Salil Mehta Signed-off-by: Guangbin Huang Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin --- .../hisilicon/hns3/hns3pf/hclge_cmd.h | 3 +++ .../hisilicon/hns3/hns3pf/hclge_main.c | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h index e34e0854635c..d64cded30eeb 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h @@ -257,6 +257,9 @@ enum hclge_opcode_type { /* Led command */ HCLGE_OPC_LED_STATUS_CFG = 0xB000, + /* clear hardware resource command */ + HCLGE_OPC_CLEAR_HW_RESOURCE = 0x700B, + /* NCL config command */ HCLGE_OPC_QUERY_NCL_CONFIG = 0x7011, /* M7 stats command */ diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index 93f3865b679b..28e260439196 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -9165,6 +9165,28 @@ static void hclge_clear_resetting_state(struct hclge_dev *hdev) } } +static int hclge_clear_hw_resource(struct hclge_dev *hdev) +{ + struct hclge_desc desc; + int ret; + + hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_CLEAR_HW_RESOURCE, false); + + ret = hclge_cmd_send(&hdev->hw, &desc, 1); + /* This new command is only supported by new firmware, it will + * fail with older firmware. Error value -EOPNOSUPP can only be + * returned by older firmware running this command, to keep code + * backward compatible we will override this value and return + * success. + */ + if (ret && ret != -EOPNOTSUPP) { + dev_err(&hdev->pdev->dev, + "failed to clear hw resource, ret = %d\n", ret); + return ret; + } + return 0; +} + static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) { struct pci_dev *pdev = ae_dev->pdev; @@ -9206,6 +9228,10 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) if (ret) goto err_cmd_uninit; + ret = hclge_clear_hw_resource(hdev); + if (ret) + goto err_cmd_uninit; + ret = hclge_get_cap(hdev); if (ret) { dev_err(&pdev->dev, "get hw capability error, ret = %d.\n", -- 2.30.2