Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp263929pxa; Fri, 21 Aug 2020 06:46:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPDX34EJP+kW59SidQIcHuIxzWtYIpF7plX/QaCIiV42qW7cghEOXTOvctgvvFxDkJpYzH X-Received: by 2002:a17:906:80c:: with SMTP id e12mr3062072ejd.128.1598017572575; Fri, 21 Aug 2020 06:46:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598017572; cv=none; d=google.com; s=arc-20160816; b=NdT7afkqxylbHUk/MaAs6EVhU1IjHlBN6iER1uj5qek/qP255yhhI/TLv489EeruXk oIQN0p9hHyOVG7tzKNZT4K7nl8Z5FegihsNKRN49vGTgVTM+0+ihaW5PNC4l9pSvRu/M VZaAmY2anYaXMwj1oRaJCx8yvi1cq37fsUxLO7rQlAPowULjoC7IAMrJTW8Hjz2R6XVE hD5iiHO+SWEIakyzePQvp+GC8iGhrM++6x4Ru30PGiHHSWTee0wq5a+0Enw9zUDSHS4p Npf2Zru9ovvRp5wCvqoRZd+FbZ4iL3uNlBYHOnmSuvSFhOfLfbt93KZ5o6EG47fVhF3v 2WwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=rIUFQhQ64oF2ROvS3z6Ch/i8dVROC3dNchz1WEDXahs=; b=Httko86Aaa+uMMwrZr2Bfsmw3laQ9TV29rDJYqkruLLmhC8A1+xp5Qz1rWgvofV36w 2kn9KlotNgr63y+7DCkrj9Tg3rgE/UUmW6OAeTInOWhlK2mjLhZiHh+ZCbTrj4bVmIxI 5B9ZFYY9aXs9lIU1oDowRfqMHuePljxZvvRnOsBOAQl7vEUKOd4AWzlQfhbsBdxkp6FY wfSJt/YBkwn2/DP0N+BmYfpw7aQNPfq8TZq+0HKcq0uThk7F67K0zBBrWbIaKWH+cUc3 H9dqNlhUnJhwprcGn3apSo8+yF3Ylo3kRFEx7ZF79RvC7VRpWLwUe8hEm6fkL1fxkcmH dX0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=JIMfNJbL; 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 v20si1334367edl.269.2020.08.21.06.45.47; Fri, 21 Aug 2020 06:46:12 -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=JIMfNJbL; 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 S1728893AbgHUNon (ORCPT + 99 others); Fri, 21 Aug 2020 09:44:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728823AbgHUNoB (ORCPT ); Fri, 21 Aug 2020 09:44:01 -0400 Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 042F6C06179F for ; Fri, 21 Aug 2020 06:43:53 -0700 (PDT) Received: by mail-wm1-x341.google.com with SMTP id p14so1929894wmg.1 for ; Fri, 21 Aug 2020 06:43:52 -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=rIUFQhQ64oF2ROvS3z6Ch/i8dVROC3dNchz1WEDXahs=; b=JIMfNJbLBDBVprbj6hP+YwDOiktdi54ddXQtHQd4TxEeZisRo1G12DAW24cJRlAWpM uUQ+KDBh55tNG74uHOOdi8W6HHorpZyiOiIDN2PsCQiYn9Azuxd90KK2jmtB1XnWI83f fnqB+nLr8mMdIv4nZmBQ3qCgfbXMpGvV/20fM4YIEI5Se+Qf2LgHJHu974ZwG83DnO+l yhSdrIdB9+qRrSDBTXjfpEUhXBk0I8SYfRIcU2n4+Gc5PmYxaNji5+ReAj510BmlfDS7 p/8Z6nBgfDMDuEHRayRfQy+gFxavldymdpUHftK2SK4l7IB9jbk/n95OtSGq4o6BscKn LMlA== 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=rIUFQhQ64oF2ROvS3z6Ch/i8dVROC3dNchz1WEDXahs=; b=Q8+YDZLLCDJVcRXOB0OUQVxo5SUlkYTPOTjsk4nJ7dV/51W/itzbqqdG1mi0U8G3CS kk2I/ulchB8x16vwBw1gO9ARnaG9l+JYHhQhBPqdsd55C+mNqmmxzoIBAXVuZnacyXh2 NNQ/C52aDQZpgqBb9jBShQUM57+c+tivyHOWF7ctd163Ic41jrs0wG9Sj8J6FZhBP9ls e8DjgSkPmweDNNUg+HspMdmGULqidvXQWh3AIaMPRWAYzlPxCxY4GIz/C3NBQnDanQR4 ELIWiXmQAsW+KIq4fTpiYyJM+y9h0GRWTzhEV6N2QpfTMJvzpZ0APOUhM1BN3HDu2655 hc6A== X-Gm-Message-State: AOAM533p+0yBHVvtE1dADXpZ5JltpVvi6JF0Mn6VUWfvpqJDLp2L2oF7 746N7XaFv73/tHpuq1e+OMTYPw== X-Received: by 2002:a1c:f416:: with SMTP id z22mr3182547wma.62.1598017431660; Fri, 21 Aug 2020 06:43:51 -0700 (PDT) Received: from localhost.localdomain ([51.15.160.169]) by smtp.googlemail.com with ESMTPSA id 202sm5971179wmb.10.2020.08.21.06.43.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 21 Aug 2020 06:43:51 -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, Corentin Labbe Subject: [PATCH v5 08/18] crypto: sun8i-ce: move iv data to request context Date: Fri, 21 Aug 2020 13:43:25 +0000 Message-Id: <1598017415-39059-9-git-send-email-clabbe@baylibre.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1598017415-39059-1-git-send-email-clabbe@baylibre.com> References: <1598017415-39059-1-git-send-email-clabbe@baylibre.com> Sender: linux-crypto-owner@vger.kernel.org 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 b4d5fea27d20..2252604d821b 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