From: Vivek Goyal <vgoyal@in.ibm.com>
To: linux kernel mailing list <linux-kernel@vger.kernel.org>
Cc: Reloc Kernel List <fastboot@lists.osdl.org>,
ebiederm@xmission.com, akpm@osdl.org, ak@suse.de, hpa@zytor.com,
magnus.damm@gmail.com, lwang@redhat.com, dzickus@redhat.com
Subject: [RFC] [PATCH 4/16] x86_64: Clean up the early boot page table
Date: Mon, 13 Nov 2006 11:31:41 -0500 [thread overview]
Message-ID: <20061113163141.GE17429@in.ibm.com> (raw)
In-Reply-To: <20061113162135.GA17429@in.ibm.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>
Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
---
arch/x86_64/kernel/head.S | 61 +++++++++++++++++++------------------------
include/asm-x86_64/pgtable.h | 1
2 files changed, 28 insertions(+), 34 deletions(-)
diff -puN arch/x86_64/kernel/head.S~x86_64-Cleanup-the-early-boot-page-table arch/x86_64/kernel/head.S
--- linux-2.6.19-rc5-reloc/arch/x86_64/kernel/head.S~x86_64-Cleanup-the-early-boot-page-table 2006-11-09 22:55:39.000000000 -0500
+++ linux-2.6.19-rc5-reloc-root/arch/x86_64/kernel/head.S 2006-11-09 22:55:39.000000000 -0500
@@ -13,6 +13,7 @@
#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>
@@ -252,52 +253,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
@@ -305,12 +302,10 @@ NEXT_PAGE(level3_physmem_pgt)
#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
@@ -324,12 +319,12 @@ ENTRY(wakeup_level4_pgt)
*/
.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 -puN include/asm-x86_64/pgtable.h~x86_64-Cleanup-the-early-boot-page-table include/asm-x86_64/pgtable.h
--- linux-2.6.19-rc5-reloc/include/asm-x86_64/pgtable.h~x86_64-Cleanup-the-early-boot-page-table 2006-11-09 22:55:39.000000000 -0500
+++ linux-2.6.19-rc5-reloc-root/include/asm-x86_64/pgtable.h 2006-11-09 22:55:39.000000000 -0500
@@ -15,7 +15,6 @@
#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[];
_
next prev parent reply other threads:[~2006-11-13 16:54 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-13 16:21 [RFC] [PATCH 0/16] x86_64: Relocatable bzImage Support (V2) Vivek Goyal
2006-11-13 16:26 ` [RFC] [PATCH 1/16] x86_64: Align data segment to page size boundary Vivek Goyal
2006-11-13 16:28 ` [RFC] [PATCH 2/16] x86_64: Assembly safe page.h and pgtable.h Vivek Goyal
2006-11-13 17:17 ` Andi Kleen
2006-11-13 19:27 ` Eric W. Biederman
2006-11-13 21:16 ` Vivek Goyal
2006-11-14 1:46 ` Andi Kleen
2006-11-14 2:41 ` Eric W. Biederman
2006-11-13 16:30 ` [RFC] [PATCH 3/16] x86_64: Kill temp_boot_pmds Vivek Goyal
2006-11-13 16:31 ` Vivek Goyal [this message]
2006-11-13 16:33 ` [RFC] [PATCH 5/16] x86_64: Fix earlyprintk to use standard ISA mapping Vivek Goyal
2006-11-13 16:34 ` [RFC] [PATCH 6/16] x86_64: Modify copy_bootdata to to use virtual address Vivek Goyal
2006-11-13 16:35 ` [RFC] [PATCH 7/16] x86_64: cleanup segments Vivek Goyal
2006-11-13 16:40 ` [RFC] [PATCH 8/16] x86_64: Add EFER to the set registers saved by save_processor_state Vivek Goyal
2006-11-13 16:42 ` [RFC] [PATCH 9/16] x86_64: 64bit PIC SMP trampoline Vivek Goyal
2006-11-13 17:28 ` Andi Kleen
2006-11-13 16:43 ` [RFC] [PATCH 10/16] x86_64: 64bit PIC ACPI wakeup Vivek Goyal
2006-11-13 17:22 ` Andi Kleen
2006-11-13 17:59 ` Vivek Goyal
2006-11-13 18:13 ` Andi Kleen
2006-11-13 19:21 ` Eric W. Biederman
2006-11-13 19:34 ` Vivek Goyal
2006-11-13 19:57 ` Eric W. Biederman
2006-11-13 23:01 ` Pavel Machek
2006-11-13 23:09 ` Vivek Goyal
2006-11-15 21:07 ` [PATCH] x86_64: Move cpu long mode verification code to common file (was Re: [RFC] [PATCH 10/16] x86_64: 64bit PIC ACPI wakeup) Vivek Goyal
2006-11-15 22:54 ` Pavel Machek
2006-11-16 20:06 ` Vivek Goyal
2006-11-14 16:30 ` [RFC] [PATCH 10/16] x86_64: 64bit PIC ACPI wakeup Pavel Machek
2006-11-14 21:36 ` Eric W. Biederman
2006-11-14 21:40 ` H. Peter Anvin
2006-11-14 23:43 ` Pavel Machek
2006-11-15 3:49 ` Andi Kleen
2006-11-15 17:26 ` Eric W. Biederman
2006-11-15 18:29 ` Vivek Goyal
2006-11-15 18:38 ` Pavel Machek
2006-11-14 23:17 ` Vivek Goyal
2006-11-14 23:39 ` Pavel Machek
2006-11-15 21:24 ` [Fastboot] " Vivek Goyal
2006-11-15 23:03 ` Pavel Machek
2006-11-16 0:28 ` Vivek Goyal
2006-11-16 20:09 ` Vivek Goyal
2006-11-16 20:53 ` Pavel Machek
2006-11-16 21:29 ` Vivek Goyal
2006-11-16 21:51 ` Pavel Machek
2006-11-13 16:44 ` [RFC] [PATCH 11/16] x86_64: Modify discover_ebda to use virtual address Vivek Goyal
2006-11-13 16:46 ` [RFC] [PATCH 12/16] x86_64: Remove the identity mapping as early as possible Vivek Goyal
2006-11-13 16:47 ` [RFC] [PATCH 13/16] x86_64: __pa and __pa_symbol address space separation Vivek Goyal
2006-11-13 16:48 ` [RFC] [PATCH 14/16] x86_64: Remove CONFIG_PHYSICAL_START Vivek Goyal
2006-11-13 16:50 ` [RFC] [PATCH 15/16] x86_64: Relocatable kernel support Vivek Goyal
2006-11-13 16:51 ` [RFC] [PATCH 16/16] x86_64: Extend bzImage protocol for relocatable bzImage 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=20061113163141.GE17429@in.ibm.com \
--to=vgoyal@in.ibm.com \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=dzickus@redhat.com \
--cc=ebiederm@xmission.com \
--cc=fastboot@lists.osdl.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lwang@redhat.com \
--cc=magnus.damm@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.