Re: [GIT PULL] Modules changes for v6.7-rc1

From: Andrea Righi
Date: Thu Nov 02 2023 - 03:29:27 EST


On Wed, Nov 01, 2023 at 09:21:09PM -1000, Linus Torvalds wrote:
> On Wed, 1 Nov 2023 at 21:02, Linus Torvalds
> <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
> >
> > kmalloc() isn't just about "use physically contiguous allocations".
> > It's also more memory-efficient, and a *lot* faster than vmalloc(),
> > which has to play VM tricks.
>
> I've pulled this, but I think you should do something like the
> attached (UNTESTED!) patch.
>
> Linus

Looks good to me, I'll give it a try ASAP.

-Andrea


> kernel/module/decompress.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/kernel/module/decompress.c b/kernel/module/decompress.c
> index 4156d59be440..474e68f0f063 100644
> --- a/kernel/module/decompress.c
> +++ b/kernel/module/decompress.c
> @@ -100,7 +100,7 @@ static ssize_t module_gzip_decompress(struct load_info *info,
> s.next_in = buf + gzip_hdr_len;
> s.avail_in = size - gzip_hdr_len;
>
> - s.workspace = vmalloc(zlib_inflate_workspacesize());
> + s.workspace = kvmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
> if (!s.workspace)
> return -ENOMEM;
>
> @@ -138,7 +138,7 @@ static ssize_t module_gzip_decompress(struct load_info *info,
> out_inflate_end:
> zlib_inflateEnd(&s);
> out:
> - vfree(s.workspace);
> + kvfree(s.workspace);
> return retval;
> }
> #elif defined(CONFIG_MODULE_COMPRESS_XZ)
> @@ -241,7 +241,7 @@ static ssize_t module_zstd_decompress(struct load_info *info,
> }
>
> wksp_size = zstd_dstream_workspace_bound(header.windowSize);
> - wksp = vmalloc(wksp_size);
> + wksp = kvmalloc(wksp_size, GFP_KERNEL);
> if (!wksp) {
> retval = -ENOMEM;
> goto out;
> @@ -284,7 +284,7 @@ static ssize_t module_zstd_decompress(struct load_info *info,
> retval = new_size;
>
> out:
> - vfree(wksp);
> + kvfree(wksp);
> return retval;
> }
> #else