Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3985130imw; Mon, 18 Jul 2022 19:07:44 -0700 (PDT) X-Google-Smtp-Source: AGRyM1t6MCl3oFhjYjgKIdhKlYmuNxs9+n+GwY+VatcANtw2phBE5IKlZD3wIMcVnLm3DHEa9yrX X-Received: by 2002:a17:907:b590:b0:72e:d8ca:5b8d with SMTP id qx16-20020a170907b59000b0072ed8ca5b8dmr23653590ejc.629.1658196464432; Mon, 18 Jul 2022 19:07:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658196464; cv=none; d=google.com; s=arc-20160816; b=wxjHA8JyBjKQcoUuatkPFrD4XgPXHKnntwvNq70uk6NFfi35ZgaTtSGVovwpOgGLG0 jE13LruhAnaSugYOOSRi7iWIfja8rogOGpuo4z4qwvhOk/3QRs5mmoUBxCSJ9AFG/eVG hrrBBMtPJDimmSEQ77Ou1PdrtkfzixsZjbI7WAUB8rYydrHZTWZpv+kGEpw+Pl7DiTUZ aCoZxg7LlcbuOgpNXID0PRg+5BgaDGnFQ7dVf91NGgpdX+zLGDddXvjxHSfUwsLXqU0v QIIW1AdBUd9vlT8G0xr/2EjsbglzRa/nqcotO+2S4/WuqzW9nln3y7HegC4L9Mk4phLp rF5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=JBlOg9g40YTiWjCjfEFG21qctkOB0IbTnJdCFfay+OU=; b=mWIAwCKadphmZRoeAZxWDkIPIDI7co1uf4Ah0ulsztDDh2y9Ym8qm0WBE2DZkAFucc V23xTO1C+k2IgvWiZAtDlIvEc7rBkmE66w7YM2feIoyqjtlFUcEKISUcf3KrVmv69ipj jD/AT+cuK7ZrP54azPWP2OSESTRCJjh9sXyfxv8wyXfJgTMIqcl0KYIeBEcHGwNotFg5 nMNAxYt1iTex82uimv5UUZOn4CGzvaVlXK3cAktRFWUzcqaFKgEVjmu5Nd/KKLgapGeD D9xffTPcKHCr3kkTcrAEsyh8j6jfIDAJrftTU2HyY4jPC2Kdya/QmBH0wzvVNJtMzcj5 4MgQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-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 tc28-20020a1709078d1c00b00726cf00b7ddsi13491481ejc.803.2022.07.18.19.07.04; Mon, 18 Jul 2022 19:07:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-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-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-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 S236475AbiGSCGh (ORCPT + 99 others); Mon, 18 Jul 2022 22:06:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42388 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235991AbiGSCGh (ORCPT ); Mon, 18 Jul 2022 22:06:37 -0400 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AC7F73C17B; Mon, 18 Jul 2022 19:06:35 -0700 (PDT) Received: from dggpeml500026.china.huawei.com (unknown [172.30.72.55]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4Ln2Gp1T5jzFqBD; Tue, 19 Jul 2022 10:05:22 +0800 (CST) Received: from huawei.com (10.175.101.6) by dggpeml500026.china.huawei.com (7.185.36.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Tue, 19 Jul 2022 10:06:23 +0800 From: Zhengchao Shao To: , , , , CC: , , , Subject: [PATCH] crypto: hisilicon/hpre - don't use GFP_KERNEL to alloc mem during softirq Date: Tue, 19 Jul 2022 10:10:42 +0800 Message-ID: <20220719021042.250882-1-shaozhengchao@huawei.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.101.6] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggpeml500026.china.huawei.com (7.185.36.106) 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-crypto@vger.kernel.org The hpre encryption driver may be used to encrypt and decrypt packets during the rx softirq, it is not allowed to use GFP_KERNEL. Fixes: c8b4b477079d ("crypto: hisilicon - add HiSilicon HPRE accelerator") Signed-off-by: Zhengchao Shao This patch is not tested, compiled only. --- drivers/crypto/hisilicon/hpre/hpre_crypto.c | 28 +++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/drivers/crypto/hisilicon/hpre/hpre_crypto.c b/drivers/crypto/hisilicon/hpre/hpre_crypto.c index 97d54c1465c2..cf098fa673f4 100644 --- a/drivers/crypto/hisilicon/hpre/hpre_crypto.c +++ b/drivers/crypto/hisilicon/hpre/hpre_crypto.c @@ -241,7 +241,7 @@ static int hpre_get_data_dma_addr(struct hpre_asym_request *hpre_req, static int hpre_prepare_dma_buf(struct hpre_asym_request *hpre_req, struct scatterlist *data, unsigned int len, - int is_src, dma_addr_t *tmp) + int is_src, dma_addr_t *tmp, gfp_t flags) { struct hpre_ctx *ctx = hpre_req->ctx; struct device *dev = ctx->dev; @@ -252,7 +252,7 @@ static int hpre_prepare_dma_buf(struct hpre_asym_request *hpre_req, if (unlikely(shift < 0)) return -EINVAL; - ptr = dma_alloc_coherent(dev, ctx->key_sz, tmp, GFP_KERNEL); + ptr = dma_alloc_coherent(dev, ctx->key_sz, tmp, flags); if (unlikely(!ptr)) return -ENOMEM; @@ -268,7 +268,7 @@ static int hpre_prepare_dma_buf(struct hpre_asym_request *hpre_req, static int hpre_hw_data_init(struct hpre_asym_request *hpre_req, struct scatterlist *data, unsigned int len, - int is_src, int is_dh) + int is_src, int is_dh, u32 flags) { struct hpre_sqe *msg = &hpre_req->req; struct hpre_ctx *ctx = hpre_req->ctx; @@ -280,7 +280,9 @@ static int hpre_hw_data_init(struct hpre_asym_request *hpre_req, ((is_dh && !is_src) || !is_dh)) ret = hpre_get_data_dma_addr(hpre_req, data, len, is_src, &tmp); else - ret = hpre_prepare_dma_buf(hpre_req, data, len, is_src, &tmp); + ret = hpre_prepare_dma_buf(hpre_req, data, len, is_src, &tmp, + (flags & CRYPTO_TFM_REQ_MAY_SLEEP) ? + GFP_KERNEL : GFP_ATOMIC); if (unlikely(ret)) return ret; @@ -585,14 +587,16 @@ static int hpre_dh_compute_value(struct kpp_request *req) return ret; if (req->src) { - ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 1); + ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 1, + req->base.flags); if (unlikely(ret)) goto clear_all; } else { msg->in = cpu_to_le64(ctx->dh.dma_g); } - ret = hpre_hw_data_init(hpre_req, req->dst, req->dst_len, 0, 1); + ret = hpre_hw_data_init(hpre_req, req->dst, req->dst_len, 0, 1, + req->base.flags); if (unlikely(ret)) goto clear_all; @@ -800,11 +804,13 @@ static int hpre_rsa_enc(struct akcipher_request *req) msg->dw0 |= cpu_to_le32(HPRE_ALG_NC_NCRT); msg->key = cpu_to_le64(ctx->rsa.dma_pubkey); - ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 0); + ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 0, + req->base.flags); if (unlikely(ret)) goto clear_all; - ret = hpre_hw_data_init(hpre_req, req->dst, req->dst_len, 0, 0); + ret = hpre_hw_data_init(hpre_req, req->dst, req->dst_len, 0, 0, + req->base.flags); if (unlikely(ret)) goto clear_all; @@ -855,11 +861,13 @@ static int hpre_rsa_dec(struct akcipher_request *req) HPRE_ALG_NC_NCRT); } - ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 0); + ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 0, + req->base.flags); if (unlikely(ret)) goto clear_all; - ret = hpre_hw_data_init(hpre_req, req->dst, req->dst_len, 0, 0); + ret = hpre_hw_data_init(hpre_req, req->dst, req->dst_len, 0, 0, + req->base.flags); if (unlikely(ret)) goto clear_all; -- 2.17.1