From: Herbert Xu <herbert@gondor.apana.org.au>
To: Linux Crypto Mailing List <linux-crypto@vger.kernel.org>
Cc: linux-mm@kvack.org, Yosry Ahmed <yosry.ahmed@linux.dev>
Subject: [PATCH 6/7] crypto: scomp - Add chaining and virtual address support
Date: Thu, 27 Feb 2025 18:15:07 +0800 [thread overview]
Message-ID: <b135b8db00cdd8e5a97f9758617cfe1648bda5fb.1740651138.git.herbert@gondor.apana.org.au> (raw)
In-Reply-To: <cover.1740651138.git.herbert@gondor.apana.org.au>
Add chaining and virtual address support to all scomp algorithms.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
---
crypto/scompress.c | 62 ++++++++++++++++++++++++++++++++++------------
1 file changed, 46 insertions(+), 16 deletions(-)
diff --git a/crypto/scompress.c b/crypto/scompress.c
index ffc8e7f4862c..e94ea9c1685b 100644
--- a/crypto/scompress.c
+++ b/crypto/scompress.c
@@ -58,7 +58,8 @@ static int scomp_acomp_comp_decomp(struct acomp_req *req, int dir)
void **ctx = acomp_request_ctx(req);
unsigned int slen = req->slen;
unsigned int dlen = req->dlen;
- void *src, *dst;
+ const u8 *src;
+ u8 *dst;
int ret;
if (!req->src || !slen)
@@ -70,20 +71,24 @@ static int scomp_acomp_comp_decomp(struct acomp_req *req, int dir)
if (!req->dst || !dlen)
return -ENOSYS;
- if (sg_nents(req->src) > 1 || req->src->offset + slen > PAGE_SIZE)
+ if (acomp_request_isvirt(req)) {
+ src = req->svirt;
+ dst = req->dvirt;
+ } else if (sg_nents(req->src) > 1 ||
+ req->src->offset + slen > PAGE_SIZE)
return -ENOSYS;
-
- if (sg_nents(req->dst) > 1)
+ else if (sg_nents(req->dst) > 1)
return -ENOSYS;
-
- if (req->dst->offset >= PAGE_SIZE)
+ else if (req->dst->offset >= PAGE_SIZE)
return -ENOSYS;
+ else {
- if (req->dst->offset + dlen > PAGE_SIZE)
- dlen = PAGE_SIZE - req->dst->offset;
+ if (req->dst->offset + dlen > PAGE_SIZE)
+ dlen = PAGE_SIZE - req->dst->offset;
- src = kmap_local_page(sg_page(req->src)) + req->src->offset;
- dst = kmap_local_page(sg_page(req->dst)) + req->dst->offset;
+ src = kmap_local_page(sg_page(req->src)) + req->src->offset;
+ dst = kmap_local_page(sg_page(req->dst)) + req->dst->offset;
+ }
if (dir)
ret = crypto_scomp_compress(scomp, src, slen,
@@ -92,21 +97,37 @@ static int scomp_acomp_comp_decomp(struct acomp_req *req, int dir)
ret = crypto_scomp_decompress(scomp, src, slen,
dst, &req->dlen, *ctx);
- kunmap_local(src);
- kunmap_local(dst);
- flush_dcache_page(sg_page(req->dst));
+ if (!acomp_request_isvirt(req)) {
+ kunmap_local(src);
+ kunmap_local(dst);
+ flush_dcache_page(sg_page(req->dst));
+ }
return ret;
}
+static int scomp_acomp_chain(struct acomp_req *req, int dir)
+{
+ struct acomp_req *r2;
+ int err;
+
+ err = scomp_acomp_comp_decomp(req, dir);
+ req->base.err = err;
+
+ list_for_each_entry(r2, &req->base.list, base.list)
+ r2->base.err = scomp_acomp_comp_decomp(r2, dir);
+
+ return err;
+}
+
static int scomp_acomp_compress(struct acomp_req *req)
{
- return scomp_acomp_comp_decomp(req, 1);
+ return scomp_acomp_chain(req, 1);
}
static int scomp_acomp_decompress(struct acomp_req *req)
{
- return scomp_acomp_comp_decomp(req, 0);
+ return scomp_acomp_chain(req, 0);
}
static void crypto_exit_scomp_ops_async(struct crypto_tfm *tfm)
@@ -188,12 +209,21 @@ static const struct crypto_type crypto_scomp_type = {
.tfmsize = offsetof(struct crypto_scomp, base),
};
-int crypto_register_scomp(struct scomp_alg *alg)
+static void scomp_prepare_alg(struct scomp_alg *alg)
{
struct crypto_alg *base = &alg->calg.base;
comp_prepare_alg(&alg->calg);
+ base->cra_flags |= CRYPTO_ALG_REQ_CHAIN;
+}
+
+int crypto_register_scomp(struct scomp_alg *alg)
+{
+ struct crypto_alg *base = &alg->calg.base;
+
+ scomp_prepare_alg(alg);
+
base->cra_type = &crypto_scomp_type;
base->cra_flags |= CRYPTO_ALG_TYPE_SCOMPRESS;
--
2.39.5
next prev parent reply other threads:[~2025-02-27 10:15 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-27 10:14 [PATCH 0/7] crypto: acomp - Add request " Herbert Xu
2025-02-27 10:14 ` [PATCH 1/7] crypto: iaa - Test the correct request flag Herbert Xu
2025-02-27 10:14 ` [PATCH 2/7] crypto: acomp - Remove acomp request flags Herbert Xu
2025-02-27 10:15 ` [PATCH 3/7] crypto: acomp - Add request chaining and virtual addresses Herbert Xu
2025-02-27 18:33 ` Eric Biggers
2025-02-27 10:15 ` [PATCH 4/7] crypto: testmgr - Remove NULL dst acomp tests Herbert Xu
2025-02-27 10:15 ` [PATCH 5/7] crypto: scomp - Remove support for non-trivial SG lists Herbert Xu
2025-02-27 10:15 ` Herbert Xu [this message]
2025-02-27 10:15 ` [RFC PATCH 7/7] mm: zswap: Use acomp virtual address interface Herbert Xu
2025-02-27 18:11 ` Yosry Ahmed
2025-02-27 18:38 ` Eric Biggers
2025-02-27 21:43 ` Yosry Ahmed
2025-02-28 8:13 ` Herbert Xu
2025-02-28 9:54 ` Herbert Xu
2025-02-28 15:56 ` Yosry Ahmed
2025-03-01 6:36 ` Herbert Xu
2025-03-01 7:03 ` Herbert Xu
2025-03-03 20:17 ` Yosry Ahmed
2025-03-04 3:29 ` Herbert Xu
2025-03-04 4:30 ` Yosry Ahmed
2025-03-04 6:10 ` Herbert Xu
2025-03-04 8:33 ` Sergey Senozhatsky
2025-03-04 8:42 ` Herbert Xu
2025-03-04 8:45 ` Sergey Senozhatsky
2025-03-04 13:19 ` Sergey Senozhatsky
2025-03-04 20:47 ` Yosry Ahmed
2025-03-05 3:45 ` Herbert Xu
[not found] ` <Z8fssWOSw0kfggsM@google.com>
2025-03-05 7:41 ` Herbert Xu
2025-03-05 17:07 ` Nhat Pham
2025-03-06 2:48 ` Sergey Senozhatsky
2025-03-05 3:40 ` Herbert Xu
[not found] ` <Z8fsXZNgEbVkZrJP@google.com>
2025-03-05 7:46 ` Herbert Xu
2025-03-05 14:10 ` Herbert Xu
2025-03-05 16:25 ` Yosry Ahmed
2025-03-06 0:40 ` Herbert Xu
2025-03-06 16:58 ` Yosry Ahmed
2025-03-01 7:34 ` Herbert Xu
2025-03-01 7:38 ` Herbert Xu
2025-02-27 18:11 ` [PATCH 0/7] crypto: acomp - Add request chaining and virtual address support Yosry Ahmed
2025-02-28 9:02 ` Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b135b8db00cdd8e5a97f9758617cfe1648bda5fb.1740651138.git.herbert@gondor.apana.org.au \
--to=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=yosry.ahmed@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox