From patchwork Wed Aug 1 10:00:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: tanhuazhong X-Patchwork-Id: 952062 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=huawei.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41gV7h3wXGz9s3q for ; Wed, 1 Aug 2018 20:35:28 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387702AbeHAMUd (ORCPT ); Wed, 1 Aug 2018 08:20:33 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:6398 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387654AbeHAMUc (ORCPT ); Wed, 1 Aug 2018 08:20:32 -0400 Received: from DGGEMM406-HUB.china.huawei.com (unknown [172.30.72.54]) by Forcepoint Email with ESMTP id B73C897E87A52; Wed, 1 Aug 2018 18:00:11 +0800 (CST) Received: from DGGEMM424-HUB.china.huawei.com (10.1.198.41) by DGGEMM406-HUB.china.huawei.com (10.3.20.214) with Microsoft SMTP Server (TLS) id 14.3.382.0; Wed, 1 Aug 2018 18:00:12 +0800 Received: from DGGEMM511-MBX.china.huawei.com ([169.254.1.16]) by dggemm424-hub.china.huawei.com ([10.1.198.41]) with mapi id 14.03.0382.000; Wed, 1 Aug 2018 18:00:05 +0800 From: tanhuazhong To: tanhuazhong , "davem@davemloft.net" CC: "netdev@vger.kernel.org" , Linuxarm Subject: =?gb2312?b?tPC4tDogW1BhdGNoIG5ldC1uZXh0XSBuZXQ6IGhuczM6IGZpeCBy?= =?gb2312?b?ZXR1cm4gdmFsdWUgZXJyb3Igd2hpbGUgaGNsZ2VfY21kX2NzcV9j?= =?gb2312?b?bGVhbiBmYWlsZWQ=?= Thread-Topic: [Patch net-next] net: hns3: fix return value error while hclge_cmd_csq_clean failed Thread-Index: AQHUKX3E3vUJb7WHzEW7cabhD3XvlqSqqXUQ Date: Wed, 1 Aug 2018 10:00:05 +0000 Message-ID: <71BFC6CB37D69B45A6C87FB2E31733AC01A8FAF2@dggemm511-mbx.china.huawei.com> References: <1533117208-164535-1-git-send-email-tanhuazhong@huawei.com> In-Reply-To: <1533117208-164535-1-git-send-email-tanhuazhong@huawei.com> Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.74.149.191] MIME-Version: 1.0 X-CFilter-Loop: Reflected Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Sorry, please ignore this patch. I will resend it. -----邮件原件----- 发件人: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org] 代表 Huazhong Tan 发送时间: 2018年8月1日 17:53 收件人: davem@davemloft.net 抄送: netdev@vger.kernel.org; Linuxarm 主题: [Patch net-next] net: hns3: fix return value error while hclge_cmd_csq_clean failed From: fredalu While cleaning the command queue, the value of the HEAD register is not in the range of next_to_clean and next_to_use, meaning that this value is invalid. This also means that there is a hardware error and the hardware will trigger a reset soon. At this time we should return an error code instead of 0, and HCLGE_STATE_CMD_DISABLE needs to be set to prevent sending command again. Fixes: 3ff504908f95 ("net: hns3: fix a dead loop in hclge_cmd_csq_clean") Signed-off-by: Huazhong Tan wq --- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) /* Clean the command send queue */ handle = hclge_cmd_csq_clean(hw); - if (handle != num) { + if (handle < 0) + retval = handle; + else if (handle != num) dev_warn(&hdev->pdev->dev, "cleaned %d, need to clean %d\n", handle, num); - } spin_unlock_bh(&hw->cmq.csq.lock); -- 2.7.4 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c index 165c3d5..ac13cb2 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c @@ -147,7 +147,12 @@ static int hclge_cmd_csq_clean(struct hclge_hw *hw) if (!is_valid_csq_clean_head(csq, head)) { dev_warn(&hdev->pdev->dev, "wrong cmd head (%d, %d-%d)\n", head, csq->next_to_use, csq->next_to_clean); - return 0; + dev_warn(&hdev->pdev->dev, + "Disabling any further commands to IMP firmware\n"); + set_bit(HCLGE_STATE_CMD_DISABLE, &hdev->state); + dev_warn(&hdev->pdev->dev, + "IMP firmware watchdog reset soon expected!\n"); + return -EIO; } clean = (head - csq->next_to_clean + csq->desc_num) % csq->desc_num; @@ -267,10 +272,11 @@ int hclge_cmd_send(struct hclge_hw *hw, struct hclge_desc *desc, int num)