Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1831707pxb; Fri, 5 Feb 2021 02:34:10 -0800 (PST) X-Google-Smtp-Source: ABdhPJzD0TG53oarGiJJ1PhCqAw4DdM3a2cAlQrl8Run+1jdeOCzbts0l6U1ZjTh3WnlOtcOfX5d X-Received: by 2002:aa7:c9c9:: with SMTP id i9mr2899122edt.160.1612521250217; Fri, 05 Feb 2021 02:34:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612521250; cv=none; d=google.com; s=arc-20160816; b=pYHxB/xNZ8kcXFGgeb6JUC4fdHq0mypIEo0xTzrF74JnyzcgO7nQ8SAwymj5ucN9Sf Jqrs8/XmbhxWHh5Onkpp9Jct1kcvTjpZ4uFNBXVL56t4VOBAYsjyBb992BI50kV5aEDQ O66l/ND/Y1LmyNJ/rts3OXBISovTl87XeXS9CyfsslsqzES+BTpuhcG/SFUg9WvofBWB 2T1jXCpxrhaeqoBPtJQ/XC01BAZQIhnRSna5sjCnr2d/UbNpUjZz+fN2zEsbj9ieuul6 DKMkIevFvuIZo7u/vvsUhLuSNc+1f13BPliM03leD6oaTr5Fvon3NM92OgyDz8HZtgQ0 IZ+Q== 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:cc:to:from; bh=C6cSAjIgdivqgdYPXV3yRyYr/RYBoPXeD6H/x3uyE8E=; b=eu7rRI+eJIeWIgjZFJxTauCrk5rmk/t+HWkLjhRAfYgB7b3OhC3VLHuJij3tTAGGBH 8uj985nlZXR3wrA5HqvRWFvzlKjF/K4Qd5WAfCxOEBxQq4jobl16T/rbUIXxoom9nkGt 4Kuc7aBHGUq90uXSpUJ2iOP1R4aI0q76P1ECkjE+5mHTiFsCR+tKsoWrG7zCQ9xaw044 VvCSHdxMZNo1YoThSxf51c5D5Vuz1EJgmaOTiDXPBM6ampsB4sCFjzqvwxHqFu1CKpkF X5vFjXZV7YplJbwcbpueYFov0gak0POkTl97AV7vLfbRAKH+Yt4ab/3J2Yz9o64bKgjp Oe1g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a14si4765048ejt.519.2021.02.05.02.33.37; Fri, 05 Feb 2021 02:34:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230466AbhBEKdA (ORCPT + 99 others); Fri, 5 Feb 2021 05:33:00 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:12856 "EHLO szxga07-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230377AbhBEKQC (ORCPT ); Fri, 5 Feb 2021 05:16:02 -0500 Received: from DGGEMS410-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4DXB8l5fqQz7hTw; Fri, 5 Feb 2021 18:13:59 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by DGGEMS410-HUB.china.huawei.com (10.3.19.210) with Microsoft SMTP Server id 14.3.498.0; Fri, 5 Feb 2021 18:15:13 +0800 From: Weili Qian To: , CC: , , , Subject: [PATCH 2/6] crypto: hisilicon/qm - fix request missing error Date: Fri, 5 Feb 2021 18:12:54 +0800 Message-ID: <1612519978-33340-3-git-send-email-qianweili@huawei.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1612519978-33340-1-git-send-email-qianweili@huawei.com> References: <1612519978-33340-1-git-send-email-qianweili@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.165.24] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Add 'qp_stop_fail_cb' to ensure it is called as device is resetting. Signed-off-by: Weili Qian Reviewed-by: Zaibo Xu --- drivers/crypto/hisilicon/qm.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c index e659436..108fc0e 100644 --- a/drivers/crypto/hisilicon/qm.c +++ b/drivers/crypto/hisilicon/qm.c @@ -622,6 +622,9 @@ static void qm_cq_head_update(struct hisi_qp *qp) static void qm_poll_qp(struct hisi_qp *qp, struct hisi_qm *qm) { + if (unlikely(atomic_read(&qp->qp_status.flags) == QP_STOP)) + return; + if (qp->event_cb) { qp->event_cb(qp); return; @@ -1868,6 +1871,28 @@ int hisi_qm_start_qp(struct hisi_qp *qp, unsigned long arg) EXPORT_SYMBOL_GPL(hisi_qm_start_qp); /** + * qp_stop_fail_cb() - call request cb. + * @qp: stopped failed qp. + * + * Callback function should be called whether task completed or not. + */ +static void qp_stop_fail_cb(struct hisi_qp *qp) +{ + int qp_used = atomic_read(&qp->qp_status.used); + u16 cur_tail = qp->qp_status.sq_tail; + u16 cur_head = (cur_tail + QM_Q_DEPTH - qp_used) % QM_Q_DEPTH; + struct hisi_qm *qm = qp->qm; + u16 pos; + int i; + + for (i = 0; i < qp_used; i++) { + pos = (i + cur_head) % QM_Q_DEPTH; + qp->req_cb(qp, qp->sqe + (u32)(qm->sqe_size * pos)); + atomic_dec(&qp->qp_status.used); + } +} + +/** * qm_drain_qp() - Drain a qp. * @qp: The qp we want to drain. * @@ -1962,6 +1987,9 @@ static int qm_stop_qp_nolock(struct hisi_qp *qp) else flush_work(&qp->qm->work); + if (unlikely(qp->is_resetting && atomic_read(&qp->qp_status.used))) + qp_stop_fail_cb(qp); + dev_dbg(dev, "stop queue %u!", qp->qp_id); return 0; -- 2.8.1