Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp993001pxk; Fri, 18 Sep 2020 00:26:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzsjJq5P9TR7gfhEPeVQBIluuFUgRPRr57EadYgkkGbDvV1LWtPXH2S0KWFQUXAWhY6t32k X-Received: by 2002:aa7:cc8d:: with SMTP id p13mr38438775edt.136.1600413970450; Fri, 18 Sep 2020 00:26:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600413970; cv=none; d=google.com; s=arc-20160816; b=Mv6xHuC/pakbJEgw1U6Y+PMvhJ8to869aHH5R9EL1UQPC9Yq1X2TvpllK/yQ8cBIqG A6fLPyeXEHd174KROq3Lau5ZR/bHcH6QX3swZ4dqYd+V8HpkS0s9gkRVIktATUqW2JR+ 6iQ6F6Flw5EuJeqbKq1ri9m/PNd3OW0nrNLgCuiEFu6zC4ToKp1lu5ZH9J+Qz4u2r0rE Poe+PMq7ojZ+HSpeP0IG4xnWcsXinN7ZWNWx1nYrMbsi+yV/6+p8BzANgePm1JA6lfmk pOZk3j9QNKcJ6mPjt1Ap5iz8Kkm0AkekrvYtlkK+OrW9kAWwt9w3di2tVKCNxmg9Qidv wd2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature; bh=Ds6HxnTNtu5m/JrQcsrg/mLcJSOWOvZ9q6npwKYcwqQ=; b=0sfYP82SjgEHpHxIOiiP6bS8aj+8T0EAuQBoqAcEWih2ZeqCI1wVuXYbmJzfebjigA m2H6tGJcqkAv7BQHYdDEJxlQB7+CfcK60vhG8wzqqmsrVJ9ExLbvZlUZL4sA2L/b56mk W86Szw/9tUiGTVTb40bBTh5moPxZwPX7XQIbVmXyBrV+6FIWolDR7T4SeyJ6XYpIBt6F gR4Dq6oIeafL65+wRSCDiLOXoZDqErZO2+uuR5XYqBXeD6pIHibfVDla3yoI5PDIDJDx 7Vr3gm3go472Ums/NrkX1070zv3yaQLk4k3/cR4OgZXSqos6SELHQP0WWb2WDHVsHQEp ol4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=xxWvHISf; 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 a4si1667374edb.358.2020.09.18.00.25.47; Fri, 18 Sep 2020 00:26:10 -0700 (PDT) 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; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=xxWvHISf; 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 S1726761AbgIRHYc (ORCPT + 99 others); Fri, 18 Sep 2020 03:24:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726470AbgIRHXh (ORCPT ); Fri, 18 Sep 2020 03:23:37 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 82D4DC061352 for ; Fri, 18 Sep 2020 00:23:35 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id a17so4509850wrn.6 for ; Fri, 18 Sep 2020 00:23:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Ds6HxnTNtu5m/JrQcsrg/mLcJSOWOvZ9q6npwKYcwqQ=; b=xxWvHISf9R/b7B6NfWT/en0tKPTu1nWiMjIW6SWF6jnjc1qzr6bxUUpNbeVit/ZWm2 jWCpIR1kDlDSZuw8vyFM4fBKtkFq/o/ii53+NJC/RwyfBU0Q4lwDuzOO4U8W+GRdFi0L T5YJffQtAeTXmQF8a7cUU1B7ecSWrQKz1KloM3Cr8ah0R22/YCXS/7+xBDRjiWZovCZ0 BfmPSytDc039DkfapBGRkScuGvgI/THAPQnUupAlRLy0Ao/9MpXX3Nig8A6ZdccglxXf e/Z1Y6XImGz/3IYIeGSpEXBWeHUUKMFT771w085tjcg9tvoY7lk03z07ho5QXyZFqPG/ TGMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Ds6HxnTNtu5m/JrQcsrg/mLcJSOWOvZ9q6npwKYcwqQ=; b=dzJGrtigN/ptPvxUBYiyeU30conV6LO1+BvWioAN3osoa/Ib0DmVyakJjeBYIFVTov UppBKgmh3tKNnpim+sCkqbVDY51wx/hlmZ/Np/iPuN+JJvJ5CbloY8dPPAYWP0na7MHJ zj2psKhnd9cBLen2/0xEvrDbOnrQ/Hv6Ouumpi8flzSRHQdfGHATAxiBBjJFXWoCww83 96zL3XAjUhCifneea3oEboSnh3yqR46Iw+KgLjuqH3AlNaIKeYDPuubZcEBGwysGmwFv IQ8x76cGX6WO+w6axkWbmaD+Rsk2q4/q78A64onwvAksumblqQTrA4gGvYvUBZOndXfn xMGw== X-Gm-Message-State: AOAM532MYepcdhe7H4a3tJSkBg6CluwdS/mF8afAqka3twnEx53WKq0I qsX4TnhV/n3tlfDMIYv3By/a2A== X-Received: by 2002:adf:f548:: with SMTP id j8mr37635681wrp.114.1600413814234; Fri, 18 Sep 2020 00:23:34 -0700 (PDT) Received: from localhost.localdomain ([51.15.160.169]) by smtp.googlemail.com with ESMTPSA id z19sm3349546wmi.3.2020.09.18.00.23.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Sep 2020 00:23:33 -0700 (PDT) From: Corentin Labbe To: davem@davemloft.net, herbert@gondor.apana.org.au, mripard@kernel.org, wens@csie.org Cc: linux-arm-kernel@lists.infradead.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com, Corentin Labbe Subject: [PATCH v7 08/17] crypto: sun8i-ce: move iv data to request context Date: Fri, 18 Sep 2020 07:23:06 +0000 Message-Id: <1600413795-39256-9-git-send-email-clabbe@baylibre.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1600413795-39256-1-git-send-email-clabbe@baylibre.com> References: <1600413795-39256-1-git-send-email-clabbe@baylibre.com> Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Instead of storing IV data in the channel context, store them in the request context. Storing them in the channel structure was conceptualy wrong since they are per request related. Signed-off-by: Corentin Labbe --- .../allwinner/sun8i-ce/sun8i-ce-cipher.c | 27 +++++++++---------- drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h | 10 ++++--- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c index f996dc3d7dcc..f699b135de74 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c @@ -88,7 +88,6 @@ static int sun8i_ce_cipher(struct skcipher_request *areq) struct scatterlist *sg; unsigned int todo, len, offset, ivsize; dma_addr_t addr_iv = 0, addr_key = 0; - void *backup_iv = NULL; u32 common, sym; int flow, i; int nr_sgs = 0; @@ -151,24 +150,24 @@ static int sun8i_ce_cipher(struct skcipher_request *areq) ivsize = crypto_skcipher_ivsize(tfm); if (areq->iv && crypto_skcipher_ivsize(tfm) > 0) { - chan->ivlen = ivsize; - chan->bounce_iv = kzalloc(ivsize, GFP_KERNEL | GFP_DMA); - if (!chan->bounce_iv) { + rctx->ivlen = ivsize; + rctx->bounce_iv = kzalloc(ivsize, GFP_KERNEL | GFP_DMA); + if (!rctx->bounce_iv) { err = -ENOMEM; goto theend_key; } if (rctx->op_dir & CE_DECRYPTION) { - backup_iv = kzalloc(ivsize, GFP_KERNEL); - if (!backup_iv) { + rctx->backup_iv = kzalloc(ivsize, GFP_KERNEL); + if (!rctx->backup_iv) { err = -ENOMEM; goto theend_key; } offset = areq->cryptlen - ivsize; - scatterwalk_map_and_copy(backup_iv, areq->src, offset, - ivsize, 0); + scatterwalk_map_and_copy(rctx->backup_iv, areq->src, + offset, ivsize, 0); } - memcpy(chan->bounce_iv, areq->iv, ivsize); - addr_iv = dma_map_single(ce->dev, chan->bounce_iv, chan->ivlen, + memcpy(rctx->bounce_iv, areq->iv, ivsize); + addr_iv = dma_map_single(ce->dev, rctx->bounce_iv, rctx->ivlen, DMA_TO_DEVICE); cet->t_iv = cpu_to_le32(addr_iv); if (dma_mapping_error(ce->dev, addr_iv)) { @@ -249,17 +248,17 @@ static int sun8i_ce_cipher(struct skcipher_request *areq) theend_iv: if (areq->iv && ivsize > 0) { if (addr_iv) - dma_unmap_single(ce->dev, addr_iv, chan->ivlen, + dma_unmap_single(ce->dev, addr_iv, rctx->ivlen, DMA_TO_DEVICE); offset = areq->cryptlen - ivsize; if (rctx->op_dir & CE_DECRYPTION) { - memcpy(areq->iv, backup_iv, ivsize); - kfree_sensitive(backup_iv); + memcpy(areq->iv, rctx->backup_iv, ivsize); + kfree_sensitive(rctx->backup_iv); } else { scatterwalk_map_and_copy(areq->iv, areq->dst, offset, ivsize, 0); } - kfree(chan->bounce_iv); + kfree(rctx->bounce_iv); } theend_key: diff --git a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h index 963645fe4adb..f5555c4800e8 100644 --- a/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h +++ b/drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h @@ -129,8 +129,6 @@ struct ce_task { /* * struct sun8i_ce_flow - Information used by each flow * @engine: ptr to the crypto_engine for this flow - * @bounce_iv: buffer which contain the IV - * @ivlen: size of bounce_iv * @complete: completion for the current task on this flow * @status: set to 1 by interrupt if task is done * @t_phy: Physical address of task @@ -139,8 +137,6 @@ struct ce_task { */ struct sun8i_ce_flow { struct crypto_engine *engine; - void *bounce_iv; - unsigned int ivlen; struct completion complete; int status; dma_addr_t t_phy; @@ -183,11 +179,17 @@ struct sun8i_ce_dev { * struct sun8i_cipher_req_ctx - context for a skcipher request * @op_dir: direction (encrypt vs decrypt) for this request * @flow: the flow to use for this request + * @backup_iv: buffer which contain the next IV to store + * @bounce_iv: buffer which contain the IV + * @ivlen: size of bounce_iv * @fallback_req: request struct for invoking the fallback skcipher TFM */ struct sun8i_cipher_req_ctx { u32 op_dir; int flow; + void *backup_iv; + void *bounce_iv; + unsigned int ivlen; struct skcipher_request fallback_req; // keep at the end }; -- 2.26.2