[PATCH rdma-next 3/4] RDMA/usnic: use kmalloc() for the page pointer array
From: Leon Romanovsky
Date: Wed Jul 15 2026 - 07:08:14 EST
From: Leon Romanovsky <leonro@xxxxxxxxxx>
usnic_uiom_get_pages() uses a page-sized array of struct page pointers
as temporary storage for pin_user_pages(). Nothing requires the array to
come directly from the page allocator.
Use kmalloc() for the array and kfree() after the pinning loop.
Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx>
---
drivers/infiniband/hw/usnic/usnic_uiom.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c
index 691c64a73516..201c35039a74 100644
--- a/drivers/infiniband/hw/usnic/usnic_uiom.c
+++ b/drivers/infiniband/hw/usnic/usnic_uiom.c
@@ -114,7 +114,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
INIT_LIST_HEAD(chunk_list);
- page_list = (struct page **) __get_free_page(GFP_KERNEL);
+ page_list = kmalloc(PAGE_SIZE, GFP_KERNEL);
if (!page_list)
return -ENOMEM;
@@ -182,7 +182,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
mmgrab(uiomr->owning_mm);
mmap_read_unlock(mm);
- free_page((unsigned long) page_list);
+ kfree(page_list);
return ret;
}
--
2.55.0