From: Takashi Iwai Date: Mon, 20 May 2019 09:26:45 +0000 (+0200) Subject: firmware: Use kvmalloc for page tables X-Git-Tag: v5.4-rc1~595^2~76 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=993f5d11a9631face2bb597826b86f476a9b915b;p=platform%2Fkernel%2Flinux-rpi.git firmware: Use kvmalloc for page tables This is a minor optimization to use kvmalloc() variant for allocating the page table for the SG-buffer. They aren't so big in general, so kmalloc() would fit often better. Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index 8970a53..b5cd96f 100644 --- a/drivers/base/firmware_loader/fallback.c +++ b/drivers/base/firmware_loader/fallback.c @@ -232,7 +232,7 @@ static int map_fw_priv_pages(struct fw_priv *fw_priv) return -ENOMEM; /* page table is no longer needed after mapping, let's free */ - vfree(fw_priv->pages); + kvfree(fw_priv->pages); fw_priv->pages = NULL; return 0; @@ -397,7 +397,8 @@ static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size) fw_priv->page_array_size * 2); struct page **new_pages; - new_pages = vmalloc(array_size(new_array_size, sizeof(void *))); + new_pages = kvmalloc_array(new_array_size, sizeof(void *), + GFP_KERNEL); if (!new_pages) { fw_load_abort(fw_sysfs); return -ENOMEM; @@ -406,7 +407,7 @@ static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size) fw_priv->page_array_size * sizeof(void *)); memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) * (new_array_size - fw_priv->page_array_size)); - vfree(fw_priv->pages); + kvfree(fw_priv->pages); fw_priv->pages = new_pages; fw_priv->page_array_size = new_array_size; } diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index 083fc3e..2e74a1b 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -276,7 +276,7 @@ void fw_free_paged_buf(struct fw_priv *fw_priv) for (i = 0; i < fw_priv->nr_pages; i++) __free_page(fw_priv->pages[i]); - vfree(fw_priv->pages); + kvfree(fw_priv->pages); fw_priv->pages = NULL; fw_priv->page_array_size = 0; fw_priv->nr_pages = 0;