OSDN Git Service

arm64: Silence first allocation with CONFIG_ARM64_MODULE_PLTS=y
authorFlorian Fainelli <f.fainelli@gmail.com>
Thu, 27 Apr 2017 18:19:02 +0000 (11:19 -0700)
committerGerrit - the friendly Code Review server <code-review@localhost>
Tue, 18 Sep 2018 08:55:47 +0000 (01:55 -0700)
When CONFIG_ARM64_MODULE_PLTS is enabled, the first allocation using the
module space fails, because the module is too big, and then the module
allocation is attempted from vmalloc space. Silence the first allocation
failure in that case by setting __GFP_NOWARN.

Change-Id: I15999e9fb0405dbd76e74dde5b2f94025899d875
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Git-Repo: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
Git-commit: 0c2cf6d9487cb90be6ad7fac66044dfa8e8e5243
Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
arch/arm64/kernel/module.c

index 7f31698..093c135 100644 (file)
 
 void *module_alloc(unsigned long size)
 {
+       gfp_t gfp_mask = GFP_KERNEL;
        void *p;
 
+       /* Silence the initial allocation */
+       if (IS_ENABLED(CONFIG_ARM64_MODULE_PLTS))
+               gfp_mask |= __GFP_NOWARN;
+
        p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
                                module_alloc_base + MODULES_VSIZE,
-                               GFP_KERNEL, PAGE_KERNEL_EXEC, 0,
+                               gfp_mask, PAGE_KERNEL_EXEC, 0,
                                NUMA_NO_NODE, __builtin_return_address(0));
 
        if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&