firmware: Use kvmalloc for page tables
authorTakashi Iwai <tiwai@suse.de>
Mon, 20 May 2019 09:26:45 +0000 (11:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Jun 2019 17:20:37 +0000 (19:20 +0200)
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>
drivers/base/firmware_loader/fallback.c
drivers/base/firmware_loader/main.c

index 8970a5315e85470606af414d15b457173b7df02a..b5cd96fd0e7773c9f288463fbbd4042c9333c3eb 100644 (file)
@@ -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;
        }
index 083fc3e4f2fdebd5103afef19c09e426260f7034..2e74a1b73dae866f8c8b7926b26628e867351c10 100644 (file)
@@ -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;