]>
Commit | Line | Data |
---|---|---|
13dcf987 GKH |
1 | From 5b4236e17cc1bd9fa14b2b0c7a4ae632d41f2e20 Mon Sep 17 00:00:00 2001 |
2 | From: Masami Hiramatsu <mhiramat@kernel.org> | |
3 | Date: Thu, 27 Apr 2017 12:15:10 +0900 | |
4 | Subject: um: Fix to call read_initrd after init_bootmem | |
5 | ||
6 | From: Masami Hiramatsu <mhiramat@kernel.org> | |
7 | ||
8 | commit 5b4236e17cc1bd9fa14b2b0c7a4ae632d41f2e20 upstream. | |
9 | ||
10 | Since read_initrd() invokes alloc_bootmem() for allocating | |
11 | memory to load initrd image, it must be called after init_bootmem. | |
12 | ||
13 | This makes read_initrd() called directly from setup_arch() | |
14 | after init_bootmem() and mem_total_pages(). | |
15 | ||
16 | Fixes: b63236972e1 ("um: Setup physical memory in setup_arch()") | |
17 | Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> | |
18 | Signed-off-by: Richard Weinberger <richard@nod.at> | |
19 | Signed-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); |