diff options
Diffstat (limited to 'arch/x86/kernel/realmode.c')
-rw-r--r-- | arch/x86/kernel/realmode.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/x86/kernel/realmode.c b/arch/x86/kernel/realmode.c index 7415c42547a..a465775b32f 100644 --- a/arch/x86/kernel/realmode.c +++ b/arch/x86/kernel/realmode.c | |||
@@ -58,6 +58,20 @@ void __init setup_real_mode(void) | |||
58 | /* Copied header will contain relocated physical addresses. */ | 58 | /* Copied header will contain relocated physical addresses. */ |
59 | memcpy(&real_mode_header, real_mode_base, | 59 | memcpy(&real_mode_header, real_mode_base, |
60 | sizeof(struct real_mode_header)); | 60 | sizeof(struct real_mode_header)); |
61 | |||
62 | #ifdef CONFIG_X86_32 | ||
63 | *((u32 *)__va(real_mode_header.startup_32_smp)) = __pa(startup_32_smp); | ||
64 | *((u32 *)__va(real_mode_header.boot_gdt)) = __pa(boot_gdt); | ||
65 | #else | ||
66 | *((u64 *) __va(real_mode_header.startup_64_smp)) = | ||
67 | (u64) __pa(secondary_startup_64); | ||
68 | |||
69 | *((u64 *) __va(real_mode_header.level3_ident_pgt)) = | ||
70 | __pa(level3_ident_pgt) + _KERNPG_TABLE; | ||
71 | |||
72 | *((u64 *) __va(real_mode_header.level3_kernel_pgt)) = | ||
73 | __pa(level3_kernel_pgt) + _KERNPG_TABLE; | ||
74 | #endif | ||
61 | } | 75 | } |
62 | 76 | ||
63 | /* | 77 | /* |