From: Sergey Senozhatsky <senozhatsky@chromium.org>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Yosry Ahmed <yosry.ahmed@linux.dev>,
Eric Biggers <ebiggers@kernel.org>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Linux Crypto Mailing List <linux-crypto@vger.kernel.org>,
linux-mm@kvack.org
Subject: Re: [RFC PATCH 7/7] mm: zswap: Use acomp virtual address interface
Date: Tue, 4 Mar 2025 22:19:51 +0900 [thread overview]
Message-ID: <dawjvaf3nbfd6hnaclhcih6sfjzeuusu6kwhklv3bpptwwjzsd@t4ln7cwu74lh> (raw)
In-Reply-To: <Z8aZPcgzuaNR6N8L@gondor.apana.org.au>
On (25/03/04 14:10), Herbert Xu wrote:
> +static void zs_map_object_sg(struct zs_pool *pool, unsigned long handle,
> + enum zs_mapmode mm, struct scatterlist sg[2])
> +{
[..]
> + sg_init_table(sg, 2);
> + sg_set_page(sg, zpdesc_page(zpdescs[0]),
> + PAGE_SIZE - off - handle_size, off + handle_size);
> + sg_set_page(&sg[1], zpdesc_page(zpdescs[1]),
> + class->size - (PAGE_SIZE - off - handle_size), 0);
> +}
> +
> +static void zs_unmap_object_sg(struct zs_pool *pool, unsigned long handle)
> +{
> + struct zspage *zspage;
> + struct zpdesc *zpdesc;
> + unsigned int obj_idx;
> + unsigned long obj;
> +
> + obj = handle_to_obj(handle);
> + obj_to_location(obj, &zpdesc, &obj_idx);
> + zspage = get_zspage(zpdesc);
> + migrate_read_unlock(zspage);
> +}
One thing to notice is that these functions don't actually map/unmap.
And the handling is spread out over different parts of the stack,
sg list is set in zsmalloc, but the actual zsmalloc map local page is
done in crypto, and then zswap does memcpy() to write to object and so
on. The "new" zsmalloc map API, which we plan on landing soon, handles
most of the things within zsmalloc. Would it be possible to do something
similar with the sg API?
> @@ -928,9 +929,9 @@ static bool zswap_compress(struct page *page, struct zswap_entry *entry,
> struct scatterlist input, output;
> int comp_ret = 0, alloc_ret = 0;
> unsigned int dlen = PAGE_SIZE;
> + struct scatterlist sg[2];
> unsigned long handle;
> struct zpool *zpool;
> - char *buf;
> gfp_t gfp;
> u8 *dst;
>
> @@ -972,9 +973,9 @@ static bool zswap_compress(struct page *page, struct zswap_entry *entry,
> if (alloc_ret)
> goto unlock;
>
> - buf = zpool_map_handle(zpool, handle, ZPOOL_MM_WO);
> - memcpy(buf, dst, dlen);
> - zpool_unmap_handle(zpool, handle);
> + zpool_map_sg(zpool, handle, ZPOOL_MM_WO, sg);
> + memcpy_to_sglist(sg, 0, dst, dlen);
> + zpool_unmap_sg(zpool, handle);
You can give zsmalloc a handle and a compressed buffer (u8) and
zsmalloc should be able to figure it out. WO direction map()
seems, a bit, like an extra step.
next prev parent reply other threads:[~2025-03-04 13:20 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 chaining and virtual address support 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 ` [PATCH 6/7] crypto: scomp - Add chaining and virtual address support Herbert Xu
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 [this message]
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=dawjvaf3nbfd6hnaclhcih6sfjzeuusu6kwhklv3bpptwwjzsd@t4ln7cwu74lh \
--to=senozhatsky@chromium.org \
--cc=ebiggers@kernel.org \
--cc=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