diff options
author | Takashi Iwai <tiwai@suse.de> | 2019-05-20 05:26:45 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-06-10 13:20:37 -0400 |
commit | 993f5d11a9631face2bb597826b86f476a9b915b (patch) | |
tree | 2f775376f5e409dc8e41e368ecdce8fdfdb20fb1 | |
parent | 8f58570b98c090a4544ef9eaea1f419706672845 (diff) |
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 <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/base/firmware_loader/fallback.c | 7 | ||||
-rw-r--r-- | drivers/base/firmware_loader/main.c | 2 |
2 files changed, 5 insertions, 4 deletions
diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index 8970a5315e85..b5cd96fd0e77 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) | |||
232 | return -ENOMEM; | 232 | return -ENOMEM; |
233 | 233 | ||
234 | /* page table is no longer needed after mapping, let's free */ | 234 | /* page table is no longer needed after mapping, let's free */ |
235 | vfree(fw_priv->pages); | 235 | kvfree(fw_priv->pages); |
236 | fw_priv->pages = NULL; | 236 | fw_priv->pages = NULL; |
237 | 237 | ||
238 | return 0; | 238 | return 0; |
@@ -397,7 +397,8 @@ static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size) | |||
397 | fw_priv->page_array_size * 2); | 397 | fw_priv->page_array_size * 2); |
398 | struct page **new_pages; | 398 | struct page **new_pages; |
399 | 399 | ||
400 | new_pages = vmalloc(array_size(new_array_size, sizeof(void *))); | 400 | new_pages = kvmalloc_array(new_array_size, sizeof(void *), |
401 | GFP_KERNEL); | ||
401 | if (!new_pages) { | 402 | if (!new_pages) { |
402 | fw_load_abort(fw_sysfs); | 403 | fw_load_abort(fw_sysfs); |
403 | return -ENOMEM; | 404 | return -ENOMEM; |
@@ -406,7 +407,7 @@ static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size) | |||
406 | fw_priv->page_array_size * sizeof(void *)); | 407 | fw_priv->page_array_size * sizeof(void *)); |
407 | memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) * | 408 | memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) * |
408 | (new_array_size - fw_priv->page_array_size)); | 409 | (new_array_size - fw_priv->page_array_size)); |
409 | vfree(fw_priv->pages); | 410 | kvfree(fw_priv->pages); |
410 | fw_priv->pages = new_pages; | 411 | fw_priv->pages = new_pages; |
411 | fw_priv->page_array_size = new_array_size; | 412 | fw_priv->page_array_size = new_array_size; |
412 | } | 413 | } |
diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index 083fc3e4f2fd..2e74a1b73dae 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) | |||
276 | 276 | ||
277 | for (i = 0; i < fw_priv->nr_pages; i++) | 277 | for (i = 0; i < fw_priv->nr_pages; i++) |
278 | __free_page(fw_priv->pages[i]); | 278 | __free_page(fw_priv->pages[i]); |
279 | vfree(fw_priv->pages); | 279 | kvfree(fw_priv->pages); |
280 | fw_priv->pages = NULL; | 280 | fw_priv->pages = NULL; |
281 | fw_priv->page_array_size = 0; | 281 | fw_priv->page_array_size = 0; |
282 | fw_priv->nr_pages = 0; | 282 | fw_priv->nr_pages = 0; |