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>
This commit is contained in:
committed by
Ingo Molnar
parent
0c1b272406
commit
17d57a9206
@@ -193,6 +193,12 @@ default_entry:
|
|||||||
jb 10b
|
jb 10b
|
||||||
movl %edi,(init_pg_tables_end - __PAGE_OFFSET)
|
movl %edi,(init_pg_tables_end - __PAGE_OFFSET)
|
||||||
|
|
||||||
|
/* Do an early initialization of the fixmap area */
|
||||||
|
movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
|
||||||
|
movl $(swapper_pg_pmd - __PAGE_OFFSET), %eax
|
||||||
|
addl $0x007, %eax /* 0x007 = PRESENT+RW+USER */
|
||||||
|
movl %eax, 4092(%edx)
|
||||||
|
|
||||||
xorl %ebx,%ebx /* This is the boot CPU (BSP) */
|
xorl %ebx,%ebx /* This is the boot CPU (BSP) */
|
||||||
jmp 3f
|
jmp 3f
|
||||||
/*
|
/*
|
||||||
@@ -208,12 +214,6 @@ default_entry:
|
|||||||
.section .init.text,"ax",@progbits
|
.section .init.text,"ax",@progbits
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Do an early initialization of the fixmap area */
|
|
||||||
movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
|
|
||||||
movl $(swapper_pg_pmd - __PAGE_OFFSET), %eax
|
|
||||||
addl $0x007, %eax /* 0x007 = PRESENT+RW+USER */
|
|
||||||
movl %eax, 4092(%edx)
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
ENTRY(startup_32_smp)
|
ENTRY(startup_32_smp)
|
||||||
cld
|
cld
|
||||||
|
Reference in New Issue
Block a user