Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp8453192rwi; Tue, 25 Oct 2022 06:58:13 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7Gu0ZUUVKZLSoQx/paEr1XbZC7ZArRgqHAQe1YgCssnjJVR55vhW7awa1LWlBSxJeXG7SX X-Received: by 2002:a17:907:b0d:b0:7a1:d4f0:e7c9 with SMTP id h13-20020a1709070b0d00b007a1d4f0e7c9mr14371760ejl.473.1666706292940; Tue, 25 Oct 2022 06:58:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666706292; cv=none; d=google.com; s=arc-20160816; b=FmJRmgO2SjkiXD3BjFPBS1t+AVRkTUpMzJefn/kZDwnajshmt6YPfmMMahhRC7F81v PC19F37HLOGwYt62BRkgOdXlwKkpsHKjsh1TNW2kv/JLG0SDFjRn05+Y0JOZKS2cC9WQ ELxjjV3+e6tIo9B8vwVRCT9xA6Esadi2fiR7iCgOc05Es0KuQqXYaFsF9SvQNelQFnmA pnYJMVaR21OeRKkCfLraDHbCpByIUdtCGT+2GBAeoaDcse3r3sFzk5/lCpSv2gNq+1dn fear22f5jGYokTPD9ClaYgvCm94uZYY1Y+UDEcn0BPv66GqNhl3XGz2NPPFzA+S63YUJ CxnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:to:from; bh=FABGfEKanl4dppt9P0wBKFV2zIn2ZT6sCFvKSFX8YyA=; b=0M3FWmSI4Ev3w6vF57Xd289tjMkiWqcobSQOF6uZhpztdC+OBz54ZqwV6n7BqD91VJ 8DazVXagim6R16G6gVnV9JYrskijbKadTGOnj8Ruev62beccS1yPc2Gmv0ullLZeOGIf ik1XX9FRDs217wfFw3SGRcHa3iuYX6gDpeA6yEPieA2LIE51FukOpJYcMPkGYH5ioDLM TS0qztLRVIjPpTcp2AOt8AjmKfkAPCkKwZfSg1sQfyCjimi4RPR6WiAN01UuMJ9RP0Hx IIJ7tlAm6fTxJeWFAtCsERxUK33VLua1EmmSXT1yhNFoAjvGSykZ0TD92p5NNDzHb5Bx oPxg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d39-20020a056402402700b0045c0accb2b8si2828413eda.205.2022.10.25.06.57.47; Tue, 25 Oct 2022 06:58:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232433AbiJYMsH (ORCPT + 99 others); Tue, 25 Oct 2022 08:48:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232321AbiJYMrn (ORCPT ); Tue, 25 Oct 2022 08:47:43 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 052E71958FE for ; Tue, 25 Oct 2022 05:45:26 -0700 (PDT) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4MxWkW4tPXzVj6j; Tue, 25 Oct 2022 20:40:35 +0800 (CST) Received: from dggpeml100012.china.huawei.com (7.185.36.121) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 25 Oct 2022 20:45:21 +0800 Received: from huawei.com (10.67.165.24) by dggpeml100012.china.huawei.com (7.185.36.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 25 Oct 2022 20:45:21 +0800 From: Kai Ye To: , , , , , , Subject: [PATCH v9 3/3] crypto: hisilicon/qm - add the device isolation feature for acc Date: Tue, 25 Oct 2022 12:39:31 +0000 Message-ID: <20221025123931.42161-4-yekai13@huawei.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221025123931.42161-1-yekai13@huawei.com> References: <20221025123931.42161-1-yekai13@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml100012.china.huawei.com (7.185.36.121) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Record every AER error by uacce api. And isolate the device directly when the controller reset fail. The VF device use the PF device isolation strategy. Once the PF device is isolated, its VF device will also be isolated. Signed-off-by: Kai Ye --- drivers/crypto/hisilicon/qm.c | 66 ++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 9 deletions(-) diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c index 363a02810a16..aa953ce86f70 100644 --- a/drivers/crypto/hisilicon/qm.c +++ b/drivers/crypto/hisilicon/qm.c @@ -3397,6 +3397,29 @@ static void qm_set_sqctype(struct uacce_queue *q, u16 type) up_write(&qm->qps_lock); } +static int qm_uacce_isolate_init(struct hisi_qm *qm) +{ + struct pci_dev *pdev = qm->pdev; + struct uacce_device *pf_uacce, *uacce; + struct device *pf_dev = &(pci_physfn(pdev)->dev); + + uacce = qm->uacce; + if (uacce->is_vf) { + /* VF uses PF's isoalte data */ + pf_uacce = dev_to_uacce(pf_dev); + if (!pf_uacce) { + pci_err(pdev, "fail to PF device!\n"); + return -ENODEV; + } + + uacce->isolate_ctx = &pf_uacce->isolate_data; + } else { + uacce->isolate_ctx = &uacce->isolate_data; + } + + return 0; +} + static long hisi_qm_uacce_ioctl(struct uacce_queue *q, unsigned int cmd, unsigned long arg) { @@ -3450,6 +3473,14 @@ static const struct uacce_ops uacce_qm_ops = { .is_q_updated = hisi_qm_is_q_updated, }; +static void qm_remove_uacce(struct hisi_qm *qm) +{ + if (qm->use_sva) { + uacce_remove(qm->uacce); + qm->uacce = NULL; + } +} + static int qm_alloc_uacce(struct hisi_qm *qm) { struct pci_dev *pdev = qm->pdev; @@ -3511,7 +3542,14 @@ static int qm_alloc_uacce(struct hisi_qm *qm) qm->uacce = uacce; + ret = qm_uacce_isolate_init(qm); + if (ret) + goto err_rm_uacce; + return 0; +err_rm_uacce: + qm_remove_uacce(qm); + return ret; } /** @@ -5133,6 +5171,12 @@ static int qm_controller_reset_prepare(struct hisi_qm *qm) return ret; } + if (qm->use_sva) { + ret = uacce_hw_err_isolate(qm->uacce); + if (ret) + pci_err(pdev, "failed to isolate hw err!\n"); + } + ret = qm_wait_vf_prepare_finish(qm); if (ret) pci_err(pdev, "failed to stop by vfs in soft reset!\n"); @@ -5458,21 +5502,25 @@ static int qm_controller_reset(struct hisi_qm *qm) qm->err_ini->show_last_dfx_regs(qm); ret = qm_soft_reset(qm); - if (ret) { - pci_err(pdev, "Controller reset failed (%d)\n", ret); - qm_reset_bit_clear(qm); - return ret; - } + if (ret) + goto err_reset; ret = qm_controller_reset_done(qm); - if (ret) { - qm_reset_bit_clear(qm); - return ret; - } + if (ret) + goto err_reset; pci_info(pdev, "Controller reset complete\n"); return 0; +err_reset: + pci_info(pdev, "Controller reset failed (%d)\n", ret); + qm_reset_bit_clear(qm); + + /* if resetting fails, isolate the device */ + if (qm->use_sva && !qm->uacce->is_vf) + qm->uacce->isolate_ctx->is_isolate = true; + + return ret; } /** -- 2.17.1