diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-08-20 04:19:54 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-08-27 11:12:52 -0400 |
commit | 6b18ae3e2ff62daa9f181401759161dd8de0aadf (patch) | |
tree | 3e1c61c26c29a1a81d5f54917a92c37334d3c607 | |
parent | 816c25e7d4fb6fd40022a376e8b7f45b1edf5a89 (diff) |
x86: Move memory_setup to x86_init_ops
memory_setup is overridden by x86_quirks and by paravirts with weak
functions and quirks. Unify the whole mess and make it an
unconditional x86_init_ops function which defaults to the standard
function and can be overridden by the early platform code.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/x86/include/asm/e820.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/paravirt_types.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/setup.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/x86_init.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/apic/numaq_32.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/e820.c | 19 | ||||
-rw-r--r-- | arch/x86/kernel/paravirt.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/visws_quirks.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/x86_init.c | 2 | ||||
-rw-r--r-- | arch/x86/lguest/boot.c | 3 | ||||
-rw-r--r-- | arch/x86/xen/enlighten.c | 3 |
11 files changed, 11 insertions, 32 deletions
diff --git a/arch/x86/include/asm/e820.h b/arch/x86/include/asm/e820.h index 7ecba4d85089..40b4e614fe71 100644 --- a/arch/x86/include/asm/e820.h +++ b/arch/x86/include/asm/e820.h | |||
@@ -126,8 +126,6 @@ extern void e820_reserve_resources(void); | |||
126 | extern void e820_reserve_resources_late(void); | 126 | extern void e820_reserve_resources_late(void); |
127 | extern void setup_memory_map(void); | 127 | extern void setup_memory_map(void); |
128 | extern char *default_machine_specific_memory_setup(void); | 128 | extern char *default_machine_specific_memory_setup(void); |
129 | extern char *machine_specific_memory_setup(void); | ||
130 | extern char *memory_setup(void); | ||
131 | #endif /* __KERNEL__ */ | 129 | #endif /* __KERNEL__ */ |
132 | #endif /* __ASSEMBLY__ */ | 130 | #endif /* __ASSEMBLY__ */ |
133 | 131 | ||
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h index 2b3371bae295..6d668968b6b8 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h | |||
@@ -81,7 +81,6 @@ struct pv_init_ops { | |||
81 | 81 | ||
82 | /* Basic arch-specific setup */ | 82 | /* Basic arch-specific setup */ |
83 | void (*arch_setup)(void); | 83 | void (*arch_setup)(void); |
84 | char *(*memory_setup)(void); | ||
85 | void (*post_allocator_init)(void); | 84 | void (*post_allocator_init)(void); |
86 | 85 | ||
87 | /* Print a banner to identify the environment */ | 86 | /* Print a banner to identify the environment */ |
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 19769ac60616..9cba9d6ca885 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h | |||
@@ -22,7 +22,6 @@ struct x86_quirks { | |||
22 | int (*arch_pre_intr_init)(void); | 22 | int (*arch_pre_intr_init)(void); |
23 | int (*arch_intr_init)(void); | 23 | int (*arch_intr_init)(void); |
24 | int (*arch_trap_init)(void); | 24 | int (*arch_trap_init)(void); |
25 | char * (*arch_memory_setup)(void); | ||
26 | int (*mach_get_smp_config)(unsigned int early); | 25 | int (*mach_get_smp_config)(unsigned int early); |
27 | int (*mach_find_smp_config)(unsigned int reserve); | 26 | int (*mach_find_smp_config)(unsigned int reserve); |
28 | 27 | ||
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h index 8a971cb3dd3f..6c084f2a6c3f 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h | |||
@@ -7,12 +7,14 @@ | |||
7 | * @reserve_resources: reserve the standard resources for the | 7 | * @reserve_resources: reserve the standard resources for the |
8 | * platform | 8 | * platform |
9 | * @reserve_ebda_region: reserve the extended bios data area | 9 | * @reserve_ebda_region: reserve the extended bios data area |
10 | * @memory_setup: platform specific memory setup | ||
10 | * | 11 | * |
11 | */ | 12 | */ |
12 | struct x86_init_resources { | 13 | struct x86_init_resources { |
13 | void (*probe_roms)(void); | 14 | void (*probe_roms)(void); |
14 | void (*reserve_resources)(void); | 15 | void (*reserve_resources)(void); |
15 | void (*reserve_ebda_region)(void); | 16 | void (*reserve_ebda_region)(void); |
17 | char *(*memory_setup)(void); | ||
16 | }; | 18 | }; |
17 | 19 | ||
18 | /** | 20 | /** |
diff --git a/arch/x86/kernel/apic/numaq_32.c b/arch/x86/kernel/apic/numaq_32.c index ca96e68f0d23..403c062f69e8 100644 --- a/arch/x86/kernel/apic/numaq_32.c +++ b/arch/x86/kernel/apic/numaq_32.c | |||
@@ -260,7 +260,6 @@ static struct x86_quirks numaq_x86_quirks __initdata = { | |||
260 | .arch_pre_time_init = numaq_pre_time_init, | 260 | .arch_pre_time_init = numaq_pre_time_init, |
261 | .arch_time_init = NULL, | 261 | .arch_time_init = NULL, |
262 | .arch_pre_intr_init = NULL, | 262 | .arch_pre_intr_init = NULL, |
263 | .arch_memory_setup = NULL, | ||
264 | .arch_intr_init = NULL, | 263 | .arch_intr_init = NULL, |
265 | .arch_trap_init = NULL, | 264 | .arch_trap_init = NULL, |
266 | .mach_get_smp_config = NULL, | 265 | .mach_get_smp_config = NULL, |
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 5cb5725b2bae..0d804b907e80 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c | |||
@@ -1455,28 +1455,11 @@ char *__init default_machine_specific_memory_setup(void) | |||
1455 | return who; | 1455 | return who; |
1456 | } | 1456 | } |
1457 | 1457 | ||
1458 | char *__init __attribute__((weak)) machine_specific_memory_setup(void) | ||
1459 | { | ||
1460 | if (x86_quirks->arch_memory_setup) { | ||
1461 | char *who = x86_quirks->arch_memory_setup(); | ||
1462 | |||
1463 | if (who) | ||
1464 | return who; | ||
1465 | } | ||
1466 | return default_machine_specific_memory_setup(); | ||
1467 | } | ||
1468 | |||
1469 | /* Overridden in paravirt.c if CONFIG_PARAVIRT */ | ||
1470 | char * __init __attribute__((weak)) memory_setup(void) | ||
1471 | { | ||
1472 | return machine_specific_memory_setup(); | ||
1473 | } | ||
1474 | |||
1475 | void __init setup_memory_map(void) | 1458 | void __init setup_memory_map(void) |
1476 | { | 1459 | { |
1477 | char *who; | 1460 | char *who; |
1478 | 1461 | ||
1479 | who = memory_setup(); | 1462 | who = x86_init.resources.memory_setup(); |
1480 | memcpy(&e820_saved, &e820, sizeof(struct e820map)); | 1463 | memcpy(&e820_saved, &e820, sizeof(struct e820map)); |
1481 | printk(KERN_INFO "BIOS-provided physical RAM map:\n"); | 1464 | printk(KERN_INFO "BIOS-provided physical RAM map:\n"); |
1482 | e820_print_map(who); | 1465 | e820_print_map(who); |
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index 70ec9b951d76..532c9a2626c7 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c | |||
@@ -60,11 +60,6 @@ static void __init default_banner(void) | |||
60 | pv_info.name); | 60 | pv_info.name); |
61 | } | 61 | } |
62 | 62 | ||
63 | char *memory_setup(void) | ||
64 | { | ||
65 | return pv_init_ops.memory_setup(); | ||
66 | } | ||
67 | |||
68 | /* Simple instruction patching code. */ | 63 | /* Simple instruction patching code. */ |
69 | #define DEF_NATIVE(ops, name, code) \ | 64 | #define DEF_NATIVE(ops, name, code) \ |
70 | extern const char start_##ops##_##name[], end_##ops##_##name[]; \ | 65 | extern const char start_##ops##_##name[], end_##ops##_##name[]; \ |
@@ -322,7 +317,6 @@ struct pv_init_ops pv_init_ops = { | |||
322 | .patch = native_patch, | 317 | .patch = native_patch, |
323 | .banner = default_banner, | 318 | .banner = default_banner, |
324 | .arch_setup = paravirt_nop, | 319 | .arch_setup = paravirt_nop, |
325 | .memory_setup = machine_specific_memory_setup, | ||
326 | }; | 320 | }; |
327 | 321 | ||
328 | struct pv_time_ops pv_time_ops = { | 322 | struct pv_time_ops pv_time_ops = { |
diff --git a/arch/x86/kernel/visws_quirks.c b/arch/x86/kernel/visws_quirks.c index 31ffc24eec4d..97c670df1aed 100644 --- a/arch/x86/kernel/visws_quirks.c +++ b/arch/x86/kernel/visws_quirks.c | |||
@@ -239,7 +239,6 @@ static int visws_trap_init(void); | |||
239 | static struct x86_quirks visws_x86_quirks __initdata = { | 239 | static struct x86_quirks visws_x86_quirks __initdata = { |
240 | .arch_time_init = visws_time_init, | 240 | .arch_time_init = visws_time_init, |
241 | .arch_pre_intr_init = visws_pre_intr_init, | 241 | .arch_pre_intr_init = visws_pre_intr_init, |
242 | .arch_memory_setup = visws_memory_setup, | ||
243 | .arch_intr_init = NULL, | 242 | .arch_intr_init = NULL, |
244 | .arch_trap_init = visws_trap_init, | 243 | .arch_trap_init = visws_trap_init, |
245 | .mach_get_smp_config = visws_get_smp_config, | 244 | .mach_get_smp_config = visws_get_smp_config, |
@@ -263,6 +262,8 @@ void __init visws_early_detect(void) | |||
263 | */ | 262 | */ |
264 | x86_quirks = &visws_x86_quirks; | 263 | x86_quirks = &visws_x86_quirks; |
265 | 264 | ||
265 | x86_init.resources.memory_setup = visws_memory_setup; | ||
266 | |||
266 | /* | 267 | /* |
267 | * Install reboot quirks: | 268 | * Install reboot quirks: |
268 | */ | 269 | */ |
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index 1fff49a6858c..1965bff3489c 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include <asm/bios_ebda.h> | 8 | #include <asm/bios_ebda.h> |
9 | #include <asm/setup.h> | 9 | #include <asm/setup.h> |
10 | #include <asm/e820.h> | ||
10 | 11 | ||
11 | void __cpuinit x86_init_noop(void) { } | 12 | void __cpuinit x86_init_noop(void) { } |
12 | 13 | ||
@@ -20,5 +21,6 @@ struct __initdata x86_init_ops x86_init = { | |||
20 | .probe_roms = x86_init_noop, | 21 | .probe_roms = x86_init_noop, |
21 | .reserve_resources = reserve_standard_io_resources, | 22 | .reserve_resources = reserve_standard_io_resources, |
22 | .reserve_ebda_region = reserve_ebda_region, | 23 | .reserve_ebda_region = reserve_ebda_region, |
24 | .memory_setup = default_machine_specific_memory_setup, | ||
23 | }, | 25 | }, |
24 | }; | 26 | }; |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index d677fa9ca650..11445c176de6 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
@@ -1270,7 +1270,6 @@ __init void lguest_init(void) | |||
1270 | pv_irq_ops.safe_halt = lguest_safe_halt; | 1270 | pv_irq_ops.safe_halt = lguest_safe_halt; |
1271 | 1271 | ||
1272 | /* Setup operations */ | 1272 | /* Setup operations */ |
1273 | pv_init_ops.memory_setup = lguest_memory_setup; | ||
1274 | pv_init_ops.patch = lguest_patch; | 1273 | pv_init_ops.patch = lguest_patch; |
1275 | 1274 | ||
1276 | /* Intercepts of various CPU instructions */ | 1275 | /* Intercepts of various CPU instructions */ |
@@ -1325,6 +1324,8 @@ __init void lguest_init(void) | |||
1325 | pv_time_ops.time_init = lguest_time_init; | 1324 | pv_time_ops.time_init = lguest_time_init; |
1326 | pv_time_ops.get_tsc_khz = lguest_tsc_khz; | 1325 | pv_time_ops.get_tsc_khz = lguest_tsc_khz; |
1327 | 1326 | ||
1327 | x86_init.resources.memory_setup = lguest_memory_setup; | ||
1328 | |||
1328 | /* | 1329 | /* |
1329 | * Now is a good time to look at the implementations of these functions | 1330 | * Now is a good time to look at the implementations of these functions |
1330 | * before returning to the rest of lguest_init(). | 1331 | * before returning to the rest of lguest_init(). |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index e90540a46a0b..50b20c64f0bd 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -841,7 +841,6 @@ static const struct pv_init_ops xen_init_ops __initdata = { | |||
841 | .patch = xen_patch, | 841 | .patch = xen_patch, |
842 | 842 | ||
843 | .banner = xen_banner, | 843 | .banner = xen_banner, |
844 | .memory_setup = xen_memory_setup, | ||
845 | .arch_setup = xen_arch_setup, | 844 | .arch_setup = xen_arch_setup, |
846 | .post_allocator_init = xen_post_allocator_init, | 845 | .post_allocator_init = xen_post_allocator_init, |
847 | }; | 846 | }; |
@@ -982,6 +981,8 @@ asmlinkage void __init xen_start_kernel(void) | |||
982 | pv_apic_ops = xen_apic_ops; | 981 | pv_apic_ops = xen_apic_ops; |
983 | pv_mmu_ops = xen_mmu_ops; | 982 | pv_mmu_ops = xen_mmu_ops; |
984 | 983 | ||
984 | x86_init.resources.memory_setup = xen_memory_setup; | ||
985 | |||
985 | #ifdef CONFIG_X86_64 | 986 | #ifdef CONFIG_X86_64 |
986 | /* | 987 | /* |
987 | * Setup percpu state. We only need to do this for 64-bit | 988 | * Setup percpu state. We only need to do this for 64-bit |