Re: [PATCH 1/2] lib/raid: use kmalloc() in calibrate_xor_blocks()
David Laight <[email protected]>
| Newsgroups | gmane.linux.kernel,gmane.linux.kernel.mm,gmane.linux.raid |
|---|---|
| Message-ID | <20260520140021.1d36c0b4@pumpkin> |
On Wed, 20 May 2026 11:17:51 +0300 "Mike Rapoport (Microsoft)" <[email protected]> wrote: > The xor benchmark allocates an order 2 (4 pages) scratch buffer that is > used purely as a CPU-only XOR working area. > > For such large allocations kmalloc() would fall back to alloc_pages() but > still kmalloc() is a better API as it does not require unnecessary > castings and may provide more debugging possibilities. > > Replace __get_free_pages() call with kmalloc(). You might want to use kvalloc() here. It is less likely to fail. -- David > > Link: https://lore.kernel.org/all/[email protected] > Signed-off-by: Mike Rapoport (Microsoft) <[email protected]> > --- > lib/raid/xor/xor-core.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/lib/raid/xor/xor-core.c b/lib/raid/xor/xor-core.c > index bd4e6e434418..50931fbf0324 100644 > --- a/lib/raid/xor/xor-core.c > +++ b/lib/raid/xor/xor-core.c > @@ -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; > } > >