Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17d57a92 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Ingo Molnar
Browse files

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: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 0c1b2724
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -193,6 +193,12 @@ default_entry:
	jb 10b
	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) */
	jmp 3f
/*
@@ -208,12 +214,6 @@ default_entry:
.section .init.text,"ax",@progbits
#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
ENTRY(startup_32_smp)
	cld