Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp2878339ybf; Mon, 2 Mar 2020 17:39:00 -0800 (PST) X-Google-Smtp-Source: ADFU+vtANOcCcH9U9zrdISqLDOL5FC1hawfv+JS0dbn6Z7zbi8Ct8nFsSVPJHXlfSJeuo0uLXgU3 X-Received: by 2002:a9d:63c6:: with SMTP id e6mr1517565otl.365.1583199540042; Mon, 02 Mar 2020 17:39:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583199540; cv=none; d=google.com; s=arc-20160816; b=uZED1a3c9Vih8efJ+y7JstTvn/vVhN11UZZjHTew+pzWDVvhpKz4Woj/oSq/70q7NH 2+/BVOfnkRLCALjyh9FOypyPI/yvi6AQQsjFxkqHZDLnLS09j7AbB+5LcoXjdJ3XVXwY vXUbpJonOVOR0c83V//DwoWqiigq6FQo475ZlCowcDPcTh29rqq21I7qahbtUjVTsCsx ocia+WAiC5Cd7oCfIQFJsCU+ykILOjivukraZNBHJfORr0eGQUZV6da+jjDxkIRBhutu rU8ONBHn3qYeSeoAr06dmM39BTLhSak7/RG+Z2MsTYxnpdmLM2U1ej/fHzhZnWe6Ikd1 +aHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:in-reply-to :mime-version:user-agent:date:message-id:from:cc:references:to :subject; bh=o9oZe1dBLtL5v9Femhvy/RZL23TbWgsK76THFgqvZ4Y=; b=S9Pvkqxv67Q8cRlygysk7gc+Mte+UAFXZinO2+Sq9jrdBAqxDxOSDF9ot7cBGChh8N ouPmgRvbicZzdNS3hrwdkgCcLeyTXZNApyTBpUrbO4ZW72oBo/C/inLjjfgTxW4aEiRQ 2M+0GrqZ9C5PBAdd2Eb4CNhJZJK+9bHxRi7TAi1XucYQXk6lqyEIrWeNVe/dwQ6RkTpP mMDwXkEVHDH4xwDx2QeG6H0YPajDOWbpycfVxhefrCjr+Rnle+5/nADombNN3c4nxp2a sjTh+vMJMx8RPmxqs1LxFyWaq9PRmU5ldp2rEf2JnWQ6XxIiiVPSWz2pXCdVwcJ6TtEV ktSQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l26si3726401oil.11.2020.03.02.17.38.47; Mon, 02 Mar 2020 17:39:00 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726816AbgCCBir (ORCPT + 99 others); Mon, 2 Mar 2020 20:38:47 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:11134 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726773AbgCCBir (ORCPT ); Mon, 2 Mar 2020 20:38:47 -0500 Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id D4BF1EF4F5747829B44C; Tue, 3 Mar 2020 09:38:43 +0800 (CST) Received: from [127.0.0.1] (10.67.101.242) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.439.0; Tue, 3 Mar 2020 09:38:37 +0800 Subject: Re: [PATCH v2 1/5] crypto: hisilicon - Use one workqueue per qm instead of per qp To: Jonathan Cameron References: <1583129716-28382-1-git-send-email-xuzaibo@huawei.com> <1583129716-28382-2-git-send-email-xuzaibo@huawei.com> <20200302113946.000062f0@Huawei.com> CC: , , , , , , , , From: Xu Zaibo Message-ID: <4f1eae2f-c22a-0e65-e080-c0a473d91b7b@huawei.com> Date: Tue, 3 Mar 2020 09:38:37 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: <20200302113946.000062f0@Huawei.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.101.242] X-CFilter-Loop: Reflected Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Hi, On 2020/3/2 19:39, Jonathan Cameron wrote: > On Mon, 2 Mar 2020 14:15:12 +0800 > Zaibo Xu wrote: > >> From: Shukun Tan >> >> Because so many work queues are not needed. Using one workqueue >> per QM will reduce the number of kworker threads as well as >> reducing usage of CPU.This would not degrade any performance. >> >> Signed-off-by: Shukun Tan > Hi, this is more or less fine I think other than: > > 1) Needs a sign off from xuzaibo to reflect the handling of the patch. Okay > 2) The description doesn't mention that we aren't actually creating the > per QM workqueue in this patch (it comes later in the series) yes, will add description. > 3) The fallback to the system workqueue needs documentation inline. > > So tidy those up for v3 and I'm happy. > Reviewed-by: Jonathan Cameron > Okay, no problem. > >> --- >> drivers/crypto/hisilicon/qm.c | 38 +++++++++++++++----------------------- >> drivers/crypto/hisilicon/qm.h | 5 +++-- >> 2 files changed, 18 insertions(+), 25 deletions(-) >> >> diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c >> index ad7146a..13b0a6f 100644 >> --- a/drivers/crypto/hisilicon/qm.c >> +++ b/drivers/crypto/hisilicon/qm.c >> @@ -494,17 +494,9 @@ static void qm_poll_qp(struct hisi_qp *qp, struct hisi_qm *qm) >> } >> } >> >> -static void qm_qp_work_func(struct work_struct *work) >> +static void qm_work_process(struct work_struct *work) >> { >> - struct hisi_qp *qp; >> - >> - qp = container_of(work, struct hisi_qp, work); >> - qm_poll_qp(qp, qp->qm); >> -} >> - >> -static irqreturn_t qm_irq_handler(int irq, void *data) >> -{ >> - struct hisi_qm *qm = data; >> + struct hisi_qm *qm = container_of(work, struct hisi_qm, work); >> struct qm_eqe *eqe = qm->eqe + qm->status.eq_head; >> struct hisi_qp *qp; >> int eqe_num = 0; >> @@ -513,7 +505,7 @@ static irqreturn_t qm_irq_handler(int irq, void *data) >> eqe_num++; >> qp = qm_to_hisi_qp(qm, eqe); >> if (qp) >> - queue_work(qp->wq, &qp->work); >> + qm_poll_qp(qp, qm); >> >> if (qm->status.eq_head == QM_Q_DEPTH - 1) { >> qm->status.eqc_phase = !qm->status.eqc_phase; >> @@ -531,6 +523,16 @@ static irqreturn_t qm_irq_handler(int irq, void *data) >> } >> >> qm_db(qm, 0, QM_DOORBELL_CMD_EQ, qm->status.eq_head, 0); >> +} >> + >> +static irqreturn_t do_qm_irq(int irq, void *data) >> +{ >> + struct hisi_qm *qm = (struct hisi_qm *)data; >> + >> + if (qm->wq) >> + queue_work(qm->wq, &qm->work); >> + else >> + schedule_work(&qm->work); > This subtle difference between these two could do with an explanatory > comment. > > >From an initial look I'm not actually seeing qm->wq being set anywhere? > Ah it's in a later patch. Please add comment to say that in the introduction. Agree, will add comments here in V3. Thanks, Zaibo . > > > > > >> >> return IRQ_HANDLED; >> } >> @@ -540,7 +542,7 @@ static irqreturn_t qm_irq(int irq, void *data) >> struct hisi_qm *qm = data; >> >> if (readl(qm->io_base + QM_VF_EQ_INT_SOURCE)) >> - return qm_irq_handler(irq, data); >> + return do_qm_irq(irq, data); >> >> dev_err(&qm->pdev->dev, "invalid int source\n"); >> qm_db(qm, 0, QM_DOORBELL_CMD_EQ, qm->status.eq_head, 0); >> @@ -1159,20 +1161,9 @@ struct hisi_qp *hisi_qm_create_qp(struct hisi_qm *qm, u8 alg_type) >> >> qp->qp_id = qp_id; >> qp->alg_type = alg_type; >> - INIT_WORK(&qp->work, qm_qp_work_func); >> - qp->wq = alloc_workqueue("hisi_qm", WQ_UNBOUND | WQ_HIGHPRI | >> - WQ_CPU_INTENSIVE | WQ_MEM_RECLAIM, 0); >> - if (!qp->wq) { >> - ret = -EFAULT; >> - goto err_free_qp_mem; >> - } >> >> return qp; >> >> -err_free_qp_mem: >> - if (qm->use_dma_api) >> - dma_free_coherent(dev, qp->qdma.size, qp->qdma.va, >> - qp->qdma.dma); >> err_clear_bit: >> write_lock(&qm->qps_lock); >> qm->qp_array[qp_id] = NULL; >> @@ -1704,6 +1695,7 @@ int hisi_qm_init(struct hisi_qm *qm) >> qm->qp_in_used = 0; >> mutex_init(&qm->mailbox_lock); >> rwlock_init(&qm->qps_lock); >> + INIT_WORK(&qm->work, qm_work_process); >> >> dev_dbg(dev, "init qm %s with %s\n", pdev->is_physfn ? "pf" : "vf", >> qm->use_dma_api ? "dma api" : "iommu api"); >> diff --git a/drivers/crypto/hisilicon/qm.h b/drivers/crypto/hisilicon/qm.h >> index 1a4f208..c72c2e6 100644 >> --- a/drivers/crypto/hisilicon/qm.h >> +++ b/drivers/crypto/hisilicon/qm.h >> @@ -183,6 +183,9 @@ struct hisi_qm { >> u32 error_mask; >> u32 msi_mask; >> >> + struct workqueue_struct *wq; >> + struct work_struct work; >> + >> const char *algs; >> bool use_dma_api; >> bool use_sva; >> @@ -219,8 +222,6 @@ struct hisi_qp { >> void *qp_ctx; >> void (*req_cb)(struct hisi_qp *qp, void *data); >> void (*event_cb)(struct hisi_qp *qp); >> - struct work_struct work; >> - struct workqueue_struct *wq; >> >> struct hisi_qm *qm; >> u16 pasid; > > . >