ARM: Silence first allocation with CONFIG_ARM_MODULE_PLTS=y
authorFlorian Fainelli <f.fainelli@gmail.com>
Thu, 27 Apr 2017 18:19:01 +0000 (11:19 -0700)
committerCatalin Marinas <catalin.marinas@arm.com>
Thu, 11 May 2017 13:43:31 +0000 (14:43 +0100)
When CONFIG_ARM_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.

Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm/kernel/module.c

index 80254b47dc3420ec11cb6611f645d5b1faf55b66..3ff571c2c71ce42f47f31730a477f787f4ff91ee 100644 (file)
 #ifdef CONFIG_MMU
 void *module_alloc(unsigned long size)
 {
-       void *p = __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END,
-                               GFP_KERNEL, PAGE_KERNEL_EXEC, 0, NUMA_NO_NODE,
+       gfp_t gfp_mask = GFP_KERNEL;
+       void *p;
+
+       /* Silence the initial allocation */
+       if (IS_ENABLED(CONFIG_ARM_MODULE_PLTS))
+               gfp_mask |= __GFP_NOWARN;
+
+       p = __vmalloc_node_range(size, 1, MODULES_VADDR, MODULES_END,
+                               gfp_mask, PAGE_KERNEL_EXEC, 0, NUMA_NO_NODE,
                                __builtin_return_address(0));
        if (!IS_ENABLED(CONFIG_ARM_MODULE_PLTS) || p)
                return p;