Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1007989pxb; Wed, 1 Sep 2021 15:09:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwLlJFUuKkRK4mvnOiEX1beZOhY/plyW0fDRjughgfyhPi4GDJyrxwsA1qPiltj7P0xZ2WP X-Received: by 2002:a05:6402:27cd:: with SMTP id c13mr118132ede.266.1630534144713; Wed, 01 Sep 2021 15:09:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630534144; cv=none; d=google.com; s=arc-20160816; b=W9SLiU3eJZYk1woznFcfF37xUmXgDH4wWpnNkJcUXHB+UOsF+dsZIZ3YymweLWljyZ UFHHEvHZ1XE4n47KX8WJ6FfrgXYl/B2tY2pg9a4Of3v0+U+XqGfXcrOzvN9udng6534e Tiv+whBCTfnC9LyUwgZ/pSLFaFo+w/+g+NU0cbansOfgSGvDQ+wznDZo1I08wWwMPl77 B4Xk7joYtplqf7w4Sw03mib4s66gEsIc+iVczyP33HOxYC+4lLOB5UcjPAM+yJCL45oH lfczU1Ypg+AFjezNUv7eW4dGnDtCpuQpSYB6BIKlZ3QjthQ7nJCQDWT+8uimaZJlzOVG 1i6A== 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=AiabOqMdd4yONlkiFzlpDz79/QQffwIF7irBDiCtZe0=; b=WRo8CMbbYQIjdfE7gYzdUeVMKnSvPcVohtct1p2EUfeSc5v71byZtPwkEFIzyOIkhw 8q6kwy0L3atuz/trFmbWSFeQTsY385wiA18V7OwH0BuSknT9ESlJL6xhpZ+Mg+/tqcoL kk4G6r+fuIxxaOagm+UEs8YhsnmDT09V2WrBk3e96qnueMsr2Iomw/i5cCoriL/5VbUi 88CoR6ar1+ITz65LP+dwcqg7huKZhXSbMoc9Y8RDyAC8h+SUmihCLIpOrPe6dhdGrUkm 1OcJjA9Fu0Lu/XEA1Md5OrtEWjSbrvQIboE1+fJfP7r9DCtt0dnIOi5nZbEUA8z9LN2e lMQA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=FP9W1zTu; 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 jg30si985663ejc.709.2021.09.01.15.08.39; Wed, 01 Sep 2021 15:09:04 -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=FP9W1zTu; 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 S1345090AbhIAMvh (ORCPT + 99 others); Wed, 1 Sep 2021 08:51:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:48350 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344569AbhIAMqp (ORCPT ); Wed, 1 Sep 2021 08:46:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8B4AF61102; Wed, 1 Sep 2021 12:40:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1630500009; bh=dqH+u+yPN9IzpdDnt2/tN+yeRwSbWdbhLz0AUOGkTjE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FP9W1zTuXK1rEHFOcB7qLOdHA3+mh16ft/xdmE2KWWLYkfUGr8sbZiT1ENJDtU4+m BwwqsB8auZBuRq9W3CWlza50xTr4kkviKHRvqlUQutjLnaT49gSoeEb1wRDwuofZeJ 0r5LumMp06FVWx3Eta/ajGGkEFCHrBJ/oz/x+1O4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yufeng Mo , Guangbin Huang , Jakub Kicinski , Sasha Levin Subject: [PATCH 5.13 061/113] net: hns3: add waiting time before cmdq memory is released Date: Wed, 1 Sep 2021 14:28:16 +0200 Message-Id: <20210901122303.998874355@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210901122301.984263453@linuxfoundation.org> References: <20210901122301.984263453@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 a96d9330b02a3d051ae689bc2c5e7d3a2ba25594 ] After the cmdq registers are cleared, the firmware may take time to clear out possible left over commands in the cmdq. Driver must release cmdq memory only after firmware has completed processing of left over commands. Fixes: 232d0d55fca6 ("net: hns3: uninitialize command queue while unloading PF driver") Signed-off-by: Yufeng Mo Signed-off-by: Guangbin Huang Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin --- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c | 6 +++++- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | 1 + drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c | 7 ++++++- drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.h | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c index 76a482456f1f..91445521dde1 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c @@ -564,9 +564,13 @@ static void hclge_cmd_uninit_regs(struct hclge_hw *hw) void hclge_cmd_uninit(struct hclge_dev *hdev) { + set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); + /* wait to ensure that the firmware completes the possible left + * over commands. + */ + msleep(HCLGE_CMDQ_CLEAR_WAIT_TIME); spin_lock_bh(&hdev->hw.cmq.csq.lock); spin_lock(&hdev->hw.cmq.crq.lock); - set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); hclge_cmd_uninit_regs(&hdev->hw); spin_unlock(&hdev->hw.cmq.crq.lock); spin_unlock_bh(&hdev->hw.cmq.csq.lock); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h index 8e055e1ce793..a836bdba5a4d 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h @@ -9,6 +9,7 @@ #include "hnae3.h" #define HCLGE_CMDQ_TX_TIMEOUT 30000 +#define HCLGE_CMDQ_CLEAR_WAIT_TIME 200 #define HCLGE_DESC_DATA_LEN 6 struct hclge_dev; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c index d8c5c5810b99..2267832037d8 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c @@ -505,12 +505,17 @@ static void hclgevf_cmd_uninit_regs(struct hclgevf_hw *hw) void hclgevf_cmd_uninit(struct hclgevf_dev *hdev) { + set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); + /* wait to ensure that the firmware completes the possible left + * over commands. + */ + msleep(HCLGEVF_CMDQ_CLEAR_WAIT_TIME); spin_lock_bh(&hdev->hw.cmq.csq.lock); spin_lock(&hdev->hw.cmq.crq.lock); - set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); hclgevf_cmd_uninit_regs(&hdev->hw); spin_unlock(&hdev->hw.cmq.crq.lock); spin_unlock_bh(&hdev->hw.cmq.csq.lock); + hclgevf_free_cmd_desc(&hdev->hw.cmq.csq); hclgevf_free_cmd_desc(&hdev->hw.cmq.crq); } diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.h index c6dc11b32aa7..59f4c19bd846 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.h @@ -8,6 +8,7 @@ #include "hnae3.h" #define HCLGEVF_CMDQ_TX_TIMEOUT 30000 +#define HCLGEVF_CMDQ_CLEAR_WAIT_TIME 200 #define HCLGEVF_CMDQ_RX_INVLD_B 0 #define HCLGEVF_CMDQ_RX_OUTVLD_B 1 -- 2.30.2