]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xor: use kmalloc() in calibrate_xor_blocks()
authorMike Rapoport (Microsoft) <rppt@kernel.org>
Thu, 28 May 2026 09:53:00 +0000 (12:53 +0300)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 4 Jun 2026 21:49:27 +0000 (14:49 -0700)
Patch series "lib/raid: replace __get_free_pages() call with kmalloc()", v4.

The xor benchmark allocates 4 pages for a scratch buffer that is used
purely as a CPU-only XOR working area.

This buffer can be allocated with kmalloc() as there's nothing special
about it to go directly to the page allocator.

kmalloc() provides a better API than ancient __get_free_pages().
kmalloc() does not require ugly casts and kfree() does not need to know
the size of the freed object.

There is no performance difference because kmalloc() redirects allocations
of such size to the page allocator.

Replace __get_free_pages() call with kmalloc().

This patch (of 2):

The xor benchmark allocates 4 pages for a scratch buffer that is used
purely as a CPU-only XOR working area.

This buffer can be allocated with kmalloc() as there's nothing special
about it to go directly to the page allocator.

kmalloc() provides a better API than ancient __get_free_pages().
kmalloc() does not require ugly casts and kfree() does not need to know the
size of the freed object.

There is no performance difference because kmalloc() redirects allocations
of such size to the page allocator.

Replace __get_free_pages() call with kmalloc().

Link: https://lore.kernel.org/20260528-lib-v4-0-4e3ad1277279@kernel.org
Link: https://lore.kernel.org/all/635405e4-9423-4a25-a6e7-e03c8ea0bcbe@redhat.com
Link: https://lore.kernel.org/all/635405e4-9423-4a25-a6e7-e03c8ea0bcbe@redhat.com
Link: https://lore.kernel.org/20260528-lib-v4-1-4e3ad1277279@kernel.org
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Reviewed-by: Hannes Reinecke <hare@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Li Nan <linan122@huawei.com>
Cc: Song Liu <song@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/raid/xor/xor-core.c

index bd4e6e434418cbd678fdd15bc4dc7decdf4e1b04..50931fbf0324ea4e53a8574e8fc305be8c684a79 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <linux/module.h>
 #include <linux/gfp.h>
+#include <linux/slab.h>
 #include <linux/raid/xor.h>
 #include <linux/jiffies.h>
 #include <linux/preempt.h>
@@ -114,7 +115,7 @@ static int __init calibrate_xor_blocks(void)
        if (forced_template)
                return 0;
 
-       b1 = (void *) __get_free_pages(GFP_KERNEL, 2);
+       b1 = kmalloc(PAGE_SIZE * 4, GFP_KERNEL);
        if (!b1) {
                pr_warn("xor: Yikes!  No memory available.\n");
                return -ENOMEM;
@@ -132,7 +133,7 @@ static int __init calibrate_xor_blocks(void)
        pr_info("xor: using function: %s (%d MB/sec)\n",
               fastest->name, fastest->speed);
 
-       free_pages((unsigned long)b1, 2);
+       kfree(b1);
        return 0;
 }