From patchwork Thu Jan 12 12:59:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?T25kcmVqIE1vc27DocSNZWs=?= X-Patchwork-Id: 9513129 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D985560762 for ; Thu, 12 Jan 2017 13:00:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CBE5E2867A for ; Thu, 12 Jan 2017 13:00:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C0D27286A8; Thu, 12 Jan 2017 13:00:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6DAA328699 for ; Thu, 12 Jan 2017 13:00:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751329AbdALNAy (ORCPT ); Thu, 12 Jan 2017 08:00:54 -0500 Received: from mail-wj0-f194.google.com ([209.85.210.194]:35264 "EHLO mail-wj0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751389AbdALNAw (ORCPT ); Thu, 12 Jan 2017 08:00:52 -0500 Received: by mail-wj0-f194.google.com with SMTP id ey1so1788891wjd.2 for ; Thu, 12 Jan 2017 05:00:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=DiHw4DjdrVcUNtFsYIW2qci/WsrMuwTeu33CR1SCzV0=; b=EQnC5XARSrG28Rx0xFHP2vU0DAcU2XfEHcgUN+lQxBVUaT1uqrdhZD2wLy76F3df7L xYb/WANGUqlSuwd4yssVHt2h4TJoCKKXo5Tae6K+XdRg3yIp4NE4SobohvRmT47a5pBE Vc3QOYOMcL1vFQ3suzdPqtZSZPkBjN5sfumnysUggXrc9yqfnpnOnS4IfEd2WgfyFUEU DdtUV1yt3vtG8v+M5l+/vaJ+CfTvyMKL49YhoO7cf2+DHuDaI2rSU8KeUWVIHScuUv+a BQox5pKw8oDETMkT4kERvZKlt9dIeE8ez/+oIUUU+Zvdn+9SXXbL9Q+ZXVLFl8ta04nG GtrQ== 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:in-reply-to:references; bh=DiHw4DjdrVcUNtFsYIW2qci/WsrMuwTeu33CR1SCzV0=; b=PQFM64L5z9BVnB4h155O4eNLLpMnDcZwbuiSqK7p9QkJtllpIjmsNzFk7e9FCEe/+/ /ZZhAhs9qsvX1v6VYKtU8FPihi7/Ku2nacr2SXbd3H3bamiXkPyaMe09PEMY34ZwTnU8 v5DHgwjI9QUH5n671WtD8IXfvfClvhlE9yIQaCeU23J8XyKniNBhd9+2c9XU6IhSgqxw xLmN/+D/n1JFvMdeTji1RsOp83gXZFkUWlrmAhdgkJ3jbE7n2zQSI68axGM6uBk2vi6O qDiUAwvCqysyhswKyayPybhBtrr3PkOGk3g4JA5c3DXkoUOwDqloJcOVcQMk3cAv2FRU mKvQ== X-Gm-Message-State: AIkVDXK4RsL+L0M2HFKlyZXQ6sUf1Iq7WEOwWT1uVApK6FRLlw9PbKu67maLyJQRFu4Fug== X-Received: by 10.194.228.100 with SMTP id sh4mr8197837wjc.116.1484226050995; Thu, 12 Jan 2017 05:00:50 -0800 (PST) Received: from localhost.localdomain (bband-dyn163.178-41-43.t-com.sk. [178.41.43.163]) by smtp.gmail.com with ESMTPSA id 197sm3084398wmy.16.2017.01.12.05.00.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Jan 2017 05:00:49 -0800 (PST) From: Ondrej Mosnacek To: Herbert Xu Cc: Ondrej Mosnacek , linux-crypto@vger.kernel.org, dm-devel@redhat.com, Mike Snitzer , Milan Broz , Mikulas Patocka , Binoy Jayan Subject: [RFC PATCH 4/6] crypto: simd - Add bulk request support Date: Thu, 12 Jan 2017 13:59:56 +0100 Message-Id: <60721f64148bc1159c718d689dc356e8291f3dcc.1484215956.git.omosnacek@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds proper support for the new bulk requests to the SIMD helpers. Signed-off-by: Ondrej Mosnacek --- crypto/simd.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/crypto/simd.c b/crypto/simd.c index 8820337..2ae5930 100644 --- a/crypto/simd.c +++ b/crypto/simd.c @@ -100,6 +100,64 @@ static int simd_skcipher_decrypt(struct skcipher_request *req) return crypto_skcipher_decrypt(subreq); } +static int simd_skcipher_encrypt_bulk(struct skcipher_bulk_request *req) +{ + struct crypto_skcipher *tfm = crypto_skcipher_bulk_reqtfm(req); + struct simd_skcipher_ctx *ctx = crypto_skcipher_ctx(tfm); + struct skcipher_bulk_request *subreq; + struct crypto_skcipher *child; + + subreq = skcipher_bulk_request_ctx(req); + *subreq = *req; + + if (!may_use_simd() || + (in_atomic() && cryptd_skcipher_queued(ctx->cryptd_tfm))) + child = &ctx->cryptd_tfm->base; + else + child = cryptd_skcipher_child(ctx->cryptd_tfm); + + skcipher_bulk_request_set_tfm(subreq, child); + + return crypto_skcipher_encrypt_bulk(subreq); +} + +static int simd_skcipher_decrypt_bulk(struct skcipher_bulk_request *req) +{ + struct crypto_skcipher *tfm = crypto_skcipher_bulk_reqtfm(req); + struct simd_skcipher_ctx *ctx = crypto_skcipher_ctx(tfm); + struct skcipher_bulk_request *subreq; + struct crypto_skcipher *child; + + subreq = skcipher_bulk_request_ctx(req); + *subreq = *req; + + if (!may_use_simd() || + (in_atomic() && cryptd_skcipher_queued(ctx->cryptd_tfm))) + child = &ctx->cryptd_tfm->base; + else + child = cryptd_skcipher_child(ctx->cryptd_tfm); + + skcipher_bulk_request_set_tfm(subreq, child); + + return crypto_skcipher_decrypt_bulk(subreq); +} + +static unsigned int simd_skcipher_reqsize_bulk(struct crypto_skcipher *tfm, + unsigned int maxmsgs) +{ + struct simd_skcipher_ctx *ctx = crypto_skcipher_ctx(tfm); + struct crypto_skcipher *tfm_cryptd, *tfm_child; + unsigned int reqsize_cryptd, reqsize_child; + + tfm_cryptd = &ctx->cryptd_tfm->base; + tfm_child = cryptd_skcipher_child(ctx->cryptd_tfm); + + reqsize_cryptd = crypto_skcipher_bulk_reqsize(tfm_cryptd, maxmsgs); + reqsize_child = crypto_skcipher_bulk_reqsize(tfm_child, maxmsgs); + return sizeof(struct skcipher_bulk_request) + + max(reqsize_cryptd, reqsize_child); +} + static void simd_skcipher_exit(struct crypto_skcipher *tfm) { struct simd_skcipher_ctx *ctx = crypto_skcipher_ctx(tfm); @@ -187,6 +245,9 @@ struct simd_skcipher_alg *simd_skcipher_create_compat(const char *algname, alg->setkey = simd_skcipher_setkey; alg->encrypt = simd_skcipher_encrypt; alg->decrypt = simd_skcipher_decrypt; + alg->encrypt_bulk = simd_skcipher_encrypt_bulk; + alg->decrypt_bulk = simd_skcipher_decrypt_bulk; + alg->reqsize_bulk = simd_skcipher_reqsize_bulk; err = crypto_register_skcipher(alg); if (err)