Patch "powerpc/modules: Don't WARN on first module allocation attempt" has been added to the 5.16-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    powerpc/modules: Don't WARN on first module allocation attempt

to the 5.16-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-modules-don-t-warn-on-first-module-allocatio.patch
and it can be found in the queue-5.16 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 3800b689457a89754a8811dfc523de79abd6c7fc
Author: Christophe Leroy <christophe.leroy@xxxxxxxxxx>
Date:   Tue Nov 30 11:10:43 2021 +0100

    powerpc/modules: Don't WARN on first module allocation attempt
    
    [ Upstream commit f1797e4de1146009c888bcf8b6bb6648d55394f1 ]
    
    module_alloc() first tries to allocate module text within 24 bits direct
    jump from kernel text, and tries a wider allocation if first one fails.
    
    When first allocation fails the following is observed in kernel logs:
    
      vmap allocation for size 2400256 failed: use vmalloc=<size> to increase size
      systemd-udevd: vmalloc error: size 2395133, vm_struct allocation failed, mode:0xcc0(GFP_KERNEL), nodemask=(null)
      CPU: 0 PID: 127 Comm: systemd-udevd Tainted: G        W         5.15.5-gentoo-PowerMacG4 #9
      Call Trace:
      [e2a53a50] [c0ba0048] dump_stack_lvl+0x80/0xb0 (unreliable)
      [e2a53a70] [c0540128] warn_alloc+0x11c/0x2b4
      [e2a53b50] [c0531be8] __vmalloc_node_range+0xd8/0x64c
      [e2a53c10] [c00338c0] module_alloc+0xa0/0xac
      [e2a53c40] [c027a368] load_module+0x2ae0/0x8148
      [e2a53e30] [c027fc78] sys_finit_module+0xfc/0x130
      [e2a53f30] [c0035098] ret_from_syscall+0x0/0x28
      ...
    
    Add __GFP_NOWARN flag to first allocation so that no warning appears
    when it fails.
    
    Reported-by: Erhard Furtner <erhard_f@xxxxxxxxxxx>
    Fixes: 2ec13df16704 ("powerpc/modules: Load modules closer to kernel text")
    Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/93c9b84d6ec76aaf7b4f03468e22433a6d308674.1638267035.git.christophe.leroy@xxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kernel/module.c b/arch/powerpc/kernel/module.c
index ed04a3ba66fe8..40a583e9d3c70 100644
--- a/arch/powerpc/kernel/module.c
+++ b/arch/powerpc/kernel/module.c
@@ -90,16 +90,17 @@ int module_finalize(const Elf_Ehdr *hdr,
 }
 
 static __always_inline void *
-__module_alloc(unsigned long size, unsigned long start, unsigned long end)
+__module_alloc(unsigned long size, unsigned long start, unsigned long end, bool nowarn)
 {
 	pgprot_t prot = strict_module_rwx_enabled() ? PAGE_KERNEL : PAGE_KERNEL_EXEC;
+	gfp_t gfp = GFP_KERNEL | (nowarn ? __GFP_NOWARN : 0);
 
 	/*
 	 * Don't do huge page allocations for modules yet until more testing
 	 * is done. STRICT_MODULE_RWX may require extra work to support this
 	 * too.
 	 */
-	return __vmalloc_node_range(size, 1, start, end, GFP_KERNEL, prot,
+	return __vmalloc_node_range(size, 1, start, end, gfp, prot,
 				    VM_FLUSH_RESET_PERMS | VM_NO_HUGE_VMAP,
 				    NUMA_NO_NODE, __builtin_return_address(0));
 }
@@ -114,13 +115,13 @@ void *module_alloc(unsigned long size)
 
 	/* First try within 32M limit from _etext to avoid branch trampolines */
 	if (MODULES_VADDR < PAGE_OFFSET && MODULES_END > limit)
-		ptr = __module_alloc(size, limit, MODULES_END);
+		ptr = __module_alloc(size, limit, MODULES_END, true);
 
 	if (!ptr)
-		ptr = __module_alloc(size, MODULES_VADDR, MODULES_END);
+		ptr = __module_alloc(size, MODULES_VADDR, MODULES_END, false);
 
 	return ptr;
 #else
-	return __module_alloc(size, VMALLOC_START, VMALLOC_END);
+	return __module_alloc(size, VMALLOC_START, VMALLOC_END, false);
 #endif
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux