aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/head_32.S
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-12-01 20:34:06 -0500
committerIngo Molnar <mingo@elte.hu>2007-12-03 11:17:10 -0500
commit17d57a9206b4de6ad082ac9f2d2346985abbd2aa (patch)
tree67f321b8aa1a04c123d2b5f253b0de0a6ec0334e /arch/x86/kernel/head_32.S
parent0c1b2724069951b1902373e688042b2ec382f68f (diff)
x86: fix x86-32 early fixmap initialization.
pageexec@freemail.hu writes: > i've just noticed that the chunk in i386/kernel/head.S ended up in a > weird place, namely, it's not going to be executed as it's just after > a 'jmp 3f' and before startup_32_smp, probably not what you intended. > on a sidenote, the whole thing can be done in a single insn, like: > > movl $(swapper_pg_pmd - __PAGE_OFFSET + 0x067), (swapper_pg_dir - > __PAGE_OFFSET+ 4092) Thanks for the reminder I thought we had fixed this problem a while ago. Needed to get fixed virtual address for USB debug and earlycon with mmio. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/head_32.S')
-rw-r--r--arch/x86/kernel/head_32.S12
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index 374b7ece896..ac0637a6d71 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -193,6 +193,12 @@ default_entry:
193 jb 10b 193 jb 10b
194 movl %edi,(init_pg_tables_end - __PAGE_OFFSET) 194 movl %edi,(init_pg_tables_end - __PAGE_OFFSET)
195 195
196 /* Do an early initialization of the fixmap area */
197 movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
198 movl $(swapper_pg_pmd - __PAGE_OFFSET), %eax
199 addl $0x007, %eax /* 0x007 = PRESENT+RW+USER */
200 movl %eax, 4092(%edx)
201
196 xorl %ebx,%ebx /* This is the boot CPU (BSP) */ 202 xorl %ebx,%ebx /* This is the boot CPU (BSP) */
197 jmp 3f 203 jmp 3f
198/* 204/*
@@ -208,12 +214,6 @@ default_entry:
208.section .init.text,"ax",@progbits 214.section .init.text,"ax",@progbits
209#endif 215#endif
210 216
211 /* Do an early initialization of the fixmap area */
212 movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
213 movl $(swapper_pg_pmd - __PAGE_OFFSET), %eax
214 addl $0x007, %eax /* 0x007 = PRESENT+RW+USER */
215 movl %eax, 4092(%edx)
216
217#ifdef CONFIG_SMP 217#ifdef CONFIG_SMP
218ENTRY(startup_32_smp) 218ENTRY(startup_32_smp)
219 cld 219 cld