]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.9.30/um-fix-to-call-read_initrd-after-init_bootmem.patch
Linux 4.14.95
[thirdparty/kernel/stable-queue.git] / releases / 4.9.30 / um-fix-to-call-read_initrd-after-init_bootmem.patch
CommitLineData
13dcf987
GKH
1From 5b4236e17cc1bd9fa14b2b0c7a4ae632d41f2e20 Mon Sep 17 00:00:00 2001
2From: Masami Hiramatsu <mhiramat@kernel.org>
3Date: Thu, 27 Apr 2017 12:15:10 +0900
4Subject: um: Fix to call read_initrd after init_bootmem
5
6From: Masami Hiramatsu <mhiramat@kernel.org>
7
8commit 5b4236e17cc1bd9fa14b2b0c7a4ae632d41f2e20 upstream.
9
10Since read_initrd() invokes alloc_bootmem() for allocating
11memory to load initrd image, it must be called after init_bootmem.
12
13This makes read_initrd() called directly from setup_arch()
14after init_bootmem() and mem_total_pages().
15
16Fixes: b63236972e1 ("um: Setup physical memory in setup_arch()")
17Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
18Signed-off-by: Richard Weinberger <richard@nod.at>
19Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
20
21---
22 arch/um/kernel/initrd.c | 4 +---
23 arch/um/kernel/um_arch.c | 6 ++++++
24 2 files changed, 7 insertions(+), 3 deletions(-)
25
26--- a/arch/um/kernel/initrd.c
27+++ b/arch/um/kernel/initrd.c
28@@ -14,7 +14,7 @@
29 static char *initrd __initdata = NULL;
30 static int load_initrd(char *filename, void *buf, int size);
31
32-static int __init read_initrd(void)
33+int __init read_initrd(void)
34 {
35 void *area;
36 long long size;
37@@ -46,8 +46,6 @@ static int __init read_initrd(void)
38 return 0;
39 }
40
41-__uml_postsetup(read_initrd);
42-
43 static int __init uml_initrd_setup(char *line, int *add)
44 {
45 initrd = line;
46--- a/arch/um/kernel/um_arch.c
47+++ b/arch/um/kernel/um_arch.c
48@@ -336,11 +336,17 @@ int __init linux_main(int argc, char **a
49 return start_uml();
50 }
51
52+int __init __weak read_initrd(void)
53+{
54+ return 0;
55+}
56+
57 void __init setup_arch(char **cmdline_p)
58 {
59 stack_protections((unsigned long) &init_thread_info);
60 setup_physmem(uml_physmem, uml_reserved, physmem_size, highmem);
61 mem_total_pages(physmem_size, iomem_size, highmem);
62+ read_initrd();
63
64 paging_init();
65 strlcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);