From: "Eric W. Biederman" <ebiederm@xmission.com>
To: <fastboot@osdl.org>
Cc: <linux-kernel@vger.kernel.org>, Horms <horms@verge.net.au>,
Jan Kratochvil <lace@jankratochvil.net>,
"H. Peter Anvin" <hpa@zytor.com>,
Magnus Damm <magnus.damm@gmail.com>,
Vivek Goyal <vgoyal@in.ibm.com>, Linda Wang <lwang@redhat.com>,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: [PATCH 19/33] x86_64: Cleanup the early boot page table.
Date: Tue, 1 Aug 2006 05:03:34 -0600 [thread overview]
Message-ID: <1154430239211-git-send-email-ebiederm@xmission.com> (raw)
In-Reply-To: <m1d5bk2046.fsf@ebiederm.dsl.xmission.com>
- Merge physmem_pgt and ident_pgt, removing physmem_pgt. The merge
is broken as soon as mm/init.c:init_memory_mapping is run.
- As physmem_pgt is gone don't export it in pgtable.h.
- Use defines from pgtable.h for page permissions.
- Fix the physical memory identity mapping so it is at the correct
address.
- Remove the physical memory mapping from wakeup_level4_pgt it
is at the wrong address so we can't possibly be usinging it.
- Simply NEXT_PAGE the work to calculate the phys_ alias
of the labels was very cool. Unfortuantely it was a brittle
special purpose hack that makes maitenance more difficult.
Instead just use label - __START_KERNEL_map like we do
everywhere else in assembly.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
arch/x86_64/kernel/head.S | 61 +++++++++++++++++++-----------------------
include/asm-x86_64/pgtable.h | 1 -
2 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S
index ca57a37..a9e34d9 100644
--- a/arch/x86_64/kernel/head.S
+++ b/arch/x86_64/kernel/head.S
@@ -15,6 +15,7 @@ #include <linux/threads.h>
#include <linux/init.h>
#include <asm/desc.h>
#include <asm/segment.h>
+#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/msr.h>
#include <asm/cache.h>
@@ -250,52 +251,48 @@ ljumpvector:
ENTRY(stext)
ENTRY(_stext)
- $page = 0
#define NEXT_PAGE(name) \
- $page = $page + 1; \
- .org $page * 0x1000; \
- phys_/**/name = $page * 0x1000 + __PHYSICAL_START; \
+ .balign PAGE_SIZE; \
ENTRY(name)
+/* Automate the creation of 1 to 1 mapping pmd entries */
+#define PMDS(START, PERM, COUNT) \
+ i = 0 ; \
+ .rept (COUNT) ; \
+ .quad (START) + (i << 21) + (PERM) ; \
+ i = i + 1 ; \
+ .endr
+
NEXT_PAGE(init_level4_pgt)
/* This gets initialized in x86_64_start_kernel */
.fill 512,8,0
NEXT_PAGE(level3_ident_pgt)
- .quad phys_level2_ident_pgt | 0x007
+ .quad level2_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
.fill 511,8,0
NEXT_PAGE(level3_kernel_pgt)
.fill 510,8,0
/* (2^48-(2*1024*1024*1024)-((2^39)*511))/(2^30) = 510 */
- .quad phys_level2_kernel_pgt | 0x007
+ .quad level2_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE
.fill 1,8,0
NEXT_PAGE(level2_ident_pgt)
- /* 40MB for bootup. */
- i = 0
- .rept 20
- .quad i << 21 | 0x083
- i = i + 1
- .endr
- .fill 492,8,0
+ /* Since I easily can, map the first 1G.
+ * Don't set NX because code runs from these pages.
+ */
+ PMDS(0x0000000000000000, __PAGE_KERNEL_LARGE_EXEC, PTRS_PER_PMD)
NEXT_PAGE(level2_kernel_pgt)
/* 40MB kernel mapping. The kernel code cannot be bigger than that.
When you change this change KERNEL_TEXT_SIZE in page.h too. */
/* (2^48-(2*1024*1024*1024)-((2^39)*511)-((2^30)*510)) = 0 */
- i = 0
- .rept 20
- .quad i << 21 | 0x183
- i = i + 1
- .endr
+ PMDS(0x0000000000000000, __PAGE_KERNEL_LARGE_EXEC|_PAGE_GLOBAL,
+ KERNEL_TEXT_SIZE/PMD_SIZE)
/* Module mapping starts here */
- .fill 492,8,0
-
-NEXT_PAGE(level3_physmem_pgt)
- .quad phys_level2_kernel_pgt | 0x007 /* so that __va works even before pagetable_init */
- .fill 511,8,0
+ .fill (PTRS_PER_PMD - (KERNEL_TEXT_SIZE/PMD_SIZE)),8,0
+#undef PMDS
#undef NEXT_PAGE
.data
@@ -303,12 +300,10 @@ #undef NEXT_PAGE
#ifdef CONFIG_ACPI_SLEEP
.align PAGE_SIZE
ENTRY(wakeup_level4_pgt)
- .quad phys_level3_ident_pgt | 0x007
- .fill 255,8,0
- .quad phys_level3_physmem_pgt | 0x007
- .fill 254,8,0
+ .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
+ .fill 510,8,0
/* (2^48-(2*1024*1024*1024))/(2^39) = 511 */
- .quad phys_level3_kernel_pgt | 0x007
+ .quad level3_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE
#endif
#ifndef CONFIG_HOTPLUG_CPU
@@ -322,12 +317,12 @@ #endif
*/
.align PAGE_SIZE
ENTRY(boot_level4_pgt)
- .quad phys_level3_ident_pgt | 0x007
- .fill 255,8,0
- .quad phys_level3_physmem_pgt | 0x007
- .fill 254,8,0
+ .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
+ .fill 257,8,0
+ .quad level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
+ .fill 252,8,0
/* (2^48-(2*1024*1024*1024))/(2^39) = 511 */
- .quad phys_level3_kernel_pgt | 0x007
+ .quad level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE
.data
diff --git a/include/asm-x86_64/pgtable.h b/include/asm-x86_64/pgtable.h
index 211a2ca..5528e8b 100644
--- a/include/asm-x86_64/pgtable.h
+++ b/include/asm-x86_64/pgtable.h
@@ -15,7 +15,6 @@ #include <linux/threads.h>
#include <asm/pda.h>
extern pud_t level3_kernel_pgt[512];
-extern pud_t level3_physmem_pgt[512];
extern pud_t level3_ident_pgt[512];
extern pmd_t level2_kernel_pgt[512];
extern pgd_t init_level4_pgt[];
--
1.4.2.rc2.g5209e
next prev parent reply other threads:[~2006-08-01 11:06 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-01 10:58 [RFC] ELF Relocatable x86 and x86_64 bzImages Eric W. Biederman
2006-08-01 11:03 ` [PATCH 1/33] i386: vmlinux.lds.S Distinguish absolute symbols Eric W. Biederman
2006-08-01 19:06 ` Sam Ravnborg
2006-08-01 11:03 ` [PATCH 2/33] i386: define __pa_symbol Eric W. Biederman
2006-08-01 19:06 ` Andi Kleen
2006-08-02 2:19 ` Eric W. Biederman
2006-08-02 3:04 ` Andi Kleen
2006-08-01 11:03 ` [PATCH 3/33] i386 setup.c: Reserve kernel memory starting from _text Eric W. Biederman
2006-08-01 11:03 ` [PATCH 4/33] i386: CONFIG_PHYSICAL_START cleanup Eric W. Biederman
2006-08-01 19:08 ` Sam Ravnborg
2006-08-02 2:23 ` Eric W. Biederman
2006-08-02 16:14 ` Eric W. Biederman
2006-08-03 14:05 ` Sam Ravnborg
2006-08-01 11:03 ` [PATCH 5/33] i386 Kconfig: Add a range definition to config PHYSICAL_START Eric W. Biederman
2006-08-01 11:03 ` [PATCH 6/33] Make linux/elf.h safe to be included in assembly files Eric W. Biederman
2006-08-01 11:03 ` [PATCH 7/33] elf: Add ELFOSABI_STANDALONE to elf.h Eric W. Biederman
2006-08-01 11:03 ` [PATCH 8/33] kallsyms.c: Generate relocatable symbols Eric W. Biederman
2006-08-01 11:36 ` Paulo Marques
2006-08-01 11:52 ` Eric W. Biederman
2006-08-01 11:03 ` [PATCH 9/33] i386 boot: Add serial output support to the decompressor Eric W. Biederman
2006-08-01 19:19 ` Andi Kleen
2006-08-02 2:30 ` Eric W. Biederman
2006-08-02 3:07 ` Andi Kleen
2006-08-02 4:57 ` Eric W. Biederman
2006-08-02 5:21 ` Andi Kleen
2006-08-02 6:44 ` Eric W. Biederman
2006-08-02 3:06 ` Eric W. Biederman
2006-08-02 3:10 ` Andi Kleen
2006-08-02 5:27 ` Eric W. Biederman
2006-08-02 5:44 ` Andi Kleen
2006-08-02 7:14 ` Eric W. Biederman
2006-08-01 11:03 ` [PATCH 10/33] i386: Relocatable kernel support Eric W. Biederman
2006-08-01 13:34 ` Mika Penttilä
2006-08-01 18:07 ` Eric W. Biederman
2006-08-01 18:11 ` Sam Ravnborg
2006-08-01 18:16 ` Mika Penttilä
2006-08-01 11:03 ` [PATCH 11/33] i386 boot: Add an ELF header to bzImage Eric W. Biederman
2006-08-01 22:10 ` Jeremy Fitzhardinge
2006-08-02 2:38 ` Eric W. Biederman
2006-08-01 11:03 ` [PATCH 12/33] x86_64: fixup indentation in e820.c Eric W. Biederman
2006-08-01 11:03 ` [PATCH 13/33] x86_64: Remove assumptions about the kernel start address from e820/bad_addr() Eric W. Biederman
2006-08-01 11:03 ` [PATCH 14/33] x86_64: Properly report in /proc/iomem the kernel address Eric W. Biederman
2006-08-01 11:03 ` [PATCH 15/33] x86_64: Fix kernel direct mapping size check Eric W. Biederman
2006-08-01 11:03 ` [PATCH 16/33] x86_64: Assembly safe page.h and pgtable.h Eric W. Biederman
2006-08-01 11:03 ` [PATCH 17/33] x86_64: Separate normal memory map initialization from the hotplug case Eric W. Biederman
2006-08-01 11:03 ` [PATCH 18/33] x86_64: Kill temp_boot_pmds Eric W. Biederman
2006-08-01 19:02 ` Andi Kleen
2006-08-02 2:08 ` Eric W. Biederman
2006-08-01 19:04 ` [PATCH 18/33] x86_64: Kill temp_boot_pmds II Andi Kleen
2006-08-02 2:11 ` Eric W. Biederman
2006-08-02 3:07 ` Andi Kleen
2006-08-02 5:35 ` Eric W. Biederman
2006-08-01 11:03 ` Eric W. Biederman [this message]
2006-08-01 11:03 ` [PATCH 20/33] x86_64: fix early_printk to use the standard ISA mapping Eric W. Biederman
2006-08-01 11:03 ` [PATCH 21/33] x86_64: modify copy_bootdata to use virtual addresses Eric W. Biederman
2006-08-01 11:03 ` [PATCH 22/33] x86_64: Fix gdt table size in trampoline.S Eric W. Biederman
2006-08-01 18:59 ` Andi Kleen
2006-08-01 11:03 ` [PATCH 23/33] x86_64: cleanup segments Eric W. Biederman
2006-08-01 11:03 ` [PATCH 24/33] x86_64: Add EFER to the set registers saved by save_processor_state Eric W. Biederman
2006-08-01 11:03 ` [PATCH 25/33] x86_64: 64bit PIC SMP trampoline Eric W. Biederman
2006-08-01 19:13 ` Andi Kleen
2006-08-01 11:03 ` [PATCH 26/33] x86_64: 64bit PIC ACPI wakeup Eric W. Biederman
2006-08-01 19:10 ` Andi Kleen
2006-08-01 11:03 ` [PATCH 27/33] x86_64: Modify discover_ebda to use virtual addresses Eric W. Biederman
2006-08-01 11:03 ` [PATCH 28/33] x86_64: Remove the identity mapping as early as possible Eric W. Biederman
2006-08-01 19:15 ` Andi Kleen
2006-08-01 11:03 ` [PATCH 29/33] x86_64: __pa and __pa_symbol address space separation Eric W. Biederman
2006-08-01 11:03 ` [PATCH 30/33] x86_64: Remove CONFIG_PHYSICAL_START Eric W. Biederman
2006-08-01 11:03 ` [PATCH 31/33] x86_64 boot: Add serial output support to the decompressor Eric W. Biederman
2006-08-01 11:03 ` [PATCH 32/33] x86_64: Relocatable kernel support Eric W. Biederman
2006-08-01 19:11 ` Andi Kleen
2006-08-02 2:25 ` Eric W. Biederman
2006-11-05 6:02 ` Yinghai Lu
2006-11-05 6:52 ` Eric W. Biederman
2006-11-05 7:15 ` Yinghai Lu
2006-08-01 11:03 ` [PATCH 33/33] x86_64: Make bzImage a valid 64bit elf executable Eric W. Biederman
2006-08-01 19:26 ` [RFC] ELF Relocatable x86 and x86_64 bzImages Vivek Goyal
2006-08-01 20:13 ` Jan Kratochvil
2006-08-01 20:25 ` H. Peter Anvin
2006-08-02 2:02 ` Eric W. Biederman
2006-08-01 20:40 ` Vivek Goyal
2006-08-02 2:40 ` Eric W. Biederman
2006-08-02 6:34 ` Magnus Damm
2006-08-02 7:09 ` Eric W. Biederman
2006-08-02 8:34 ` Magnus Damm
2006-08-02 9:59 ` Eric W. Biederman
2006-08-02 18:37 ` [Fastboot] " Don Zickus
2006-08-03 1:00 ` Eric W. Biederman
2006-08-03 4:53 ` H. Peter Anvin
2006-08-04 22:56 ` Vivek Goyal
2006-08-04 23:14 ` Eric W. Biederman
2006-08-04 23:38 ` Dave Jones
2006-08-04 23:47 ` H. Peter Anvin
2006-08-05 8:01 ` Eric W. Biederman
2006-08-08 3:34 ` Horms
2006-08-08 4:32 ` H. Peter Anvin
2006-08-08 4:57 ` Magnus Damm
2006-08-08 5:04 ` Eric W. Biederman
2006-08-08 6:09 ` Horms
2006-08-08 7:23 ` Eric W. Biederman
2006-08-08 7:58 ` Horms
2006-08-09 14:56 ` D. Hazelton
2006-08-17 18:44 ` Vivek Goyal
2006-08-11 13:11 ` [Fastboot] " Rachita Kothiyal
2006-08-11 13:36 ` Vivek Goyal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1154430239211-git-send-email-ebiederm@xmission.com \
--to=ebiederm@xmission.com \
--cc=fastboot@osdl.org \
--cc=horms@verge.net.au \
--cc=hpa@zytor.com \
--cc=lace@jankratochvil.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lwang@redhat.com \
--cc=magnus.damm@gmail.com \
--cc=vgoyal@in.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox