diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2007-12-01 20:34:06 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-12-03 11:17:10 -0500 |
commit | 17d57a9206b4de6ad082ac9f2d2346985abbd2aa (patch) | |
tree | 67f321b8aa1a04c123d2b5f253b0de0a6ec0334e /arch/x86/kernel/head_32.S | |
parent | 0c1b2724069951b1902373e688042b2ec382f68f (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.S | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index 374b7ece8961..ac0637a6d71c 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 |
218 | ENTRY(startup_32_smp) | 218 | ENTRY(startup_32_smp) |
219 | cld | 219 | cld |