public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: LKML <linux-kernel@vger.kernel.org>,
	x86@kernel.org, xen-devel <xen-devel@lists.xensource.com>,
	Stephen Tweedie <sct@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Mark McLoughlin <markmc@redhat.com>,
	x86@kernel.org
Subject: [PATCH 20 of 36] paravirt/x86_64: move __PAGE_OFFSET to leave a space for hypervisor
Date: Wed, 25 Jun 2008 00:19:16 -0400	[thread overview]
Message-ID: <68c291617885d5f819ea.1214367556@localhost> (raw)
In-Reply-To: <patchbomb.1214367536@localhost>

From: Eduardo Habkost <ehabkost@redhat.com>
From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

Set __PAGE_OFFSET to the most negative possible address +
16*PGDIR_SIZE.  The gap is to allow a space for a hypervisor to fit.
The gap is more or less arbitrary, but it's what Xen needs.

When booting native, kernel/head_64.S has a set of compile-time
generated pagetables used at boot time.  This patch removes their
absolutely hard-coded layout, and makes it parameterised on
__PAGE_OFFSET (and __START_KERNEL_map).

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
---
 arch/x86/kernel/head_64.S |   19 +++++++++++++------
 include/asm-x86/page_64.h |    8 +++++++-
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -31,6 +31,13 @@
  * because we need identity-mapped pages.
  *
  */
+
+#define pud_index(x)	(((x) >> PUD_SHIFT) & (PTRS_PER_PUD-1))
+
+L4_PAGE_OFFSET = pgd_index(__PAGE_OFFSET)
+L3_PAGE_OFFSET = pud_index(__PAGE_OFFSET)
+L4_START_KERNEL = pgd_index(__START_KERNEL_map)
+L3_START_KERNEL = pud_index(__START_KERNEL_map)
 
 	.text
 	.section .text.head
@@ -77,8 +84,8 @@
 	/* Fixup the physical addresses in the page table
 	 */
 	addq	%rbp, init_level4_pgt + 0(%rip)
-	addq	%rbp, init_level4_pgt + (258*8)(%rip)
-	addq	%rbp, init_level4_pgt + (511*8)(%rip)
+	addq	%rbp, init_level4_pgt + (L4_PAGE_OFFSET*8)(%rip)
+	addq	%rbp, init_level4_pgt + (L4_START_KERNEL*8)(%rip)
 
 	addq	%rbp, level3_ident_pgt + 0(%rip)
 
@@ -338,9 +345,9 @@
 	 */
 NEXT_PAGE(init_level4_pgt)
 	.quad	level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
-	.fill	257,8,0
+	.org	init_level4_pgt + L4_PAGE_OFFSET*8, 0
 	.quad	level3_ident_pgt - __START_KERNEL_map + _KERNPG_TABLE
-	.fill	252,8,0
+	.org	init_level4_pgt + L4_START_KERNEL*8, 0
 	/* (2^48-(2*1024*1024*1024))/(2^39) = 511 */
 	.quad	level3_kernel_pgt - __START_KERNEL_map + _PAGE_TABLE
 
@@ -349,7 +356,7 @@
 	.fill	511,8,0
 
 NEXT_PAGE(level3_kernel_pgt)
-	.fill	510,8,0
+	.fill	L3_START_KERNEL,8,0
 	/* (2^48-(2*1024*1024*1024)-((2^39)*511))/(2^30) = 510 */
 	.quad	level2_kernel_pgt - __START_KERNEL_map + _KERNPG_TABLE
 	.quad	level2_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE
diff --git a/include/asm-x86/page_64.h b/include/asm-x86/page_64.h
--- a/include/asm-x86/page_64.h
+++ b/include/asm-x86/page_64.h
@@ -26,7 +26,13 @@
 #define PUD_PAGE_SIZE		(_AC(1, UL) << PUD_SHIFT)
 #define PUD_PAGE_MASK		(~(PUD_PAGE_SIZE-1))
 
-#define __PAGE_OFFSET           _AC(0xffff810000000000, UL)
+/*
+ * Set __PAGE_OFFSET to the most negative possible address +
+ * PGDIR_SIZE*16 (pgd slot 272).  The gap is to allow a space for a
+ * hypervisor to fit.  Choosing 16 slots here is arbitrary, but it's
+ * what Xen requires.
+ */
+#define __PAGE_OFFSET           _AC(0xffff880000000000, UL)
 
 #define __PHYSICAL_START	CONFIG_PHYSICAL_START
 #define __KERNEL_ALIGN		0x200000



  parent reply	other threads:[~2008-06-25  4:44 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-25  4:18 [PATCH 00 of 36] x86/paravirt: groundwork for 64-bit Xen support Jeremy Fitzhardinge
2008-06-25  4:18 ` [PATCH 01 of 36] x86: asm-x86/pgtable.h: fix compiler warning Jeremy Fitzhardinge
2008-06-25  4:18 ` [PATCH 02 of 36] x86: add memory clobber to save/loadsegment Jeremy Fitzhardinge
2008-06-25  4:18 ` [PATCH 03 of 36] x86: add memory barriers to wrmsr Jeremy Fitzhardinge
2008-06-25  4:44   ` Arjan van de Ven
2008-06-25 21:08     ` Jeremy Fitzhardinge
2008-06-25 22:31       ` Arjan van de Ven
2008-06-25 23:05         ` Jeremy Fitzhardinge
2008-06-25 23:18         ` H. Peter Anvin
2008-06-25 23:37           ` Jeremy Fitzhardinge
2008-06-25 23:42             ` H. Peter Anvin
2008-06-25  4:19 ` [PATCH 04 of 36] x86: remove open-coded save/load segment operations Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 05 of 36] x86_64: use write_gdt_entry in vsyscall_set_cpu Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 06 of 36] x86_64: use p??_populate() to attach pages to pagetable Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 07 of 36] x86_64: unify early_ioremap Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 08 of 36] x86_64: Add gate_offset() and gate_segment() macros Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 09 of 36] x86_64: Use __pgd() on mk_kernel_pgd() Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 10 of 36] x86: unify pgd_index Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 11 of 36] x86: unify mmu_context.h Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 12 of 36] x86_64: replace end_pfn with num_physpages Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 13 of 36] x86_64: add prototype for x86_64_start_kernel() Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 14 of 36] x86_64: add sync_cmpxchg Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 15 of 36] x86: simplify vmalloc_sync_all Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 16 of 36] x86/paravirt: add a pgd_alloc/free hooks Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 17 of 36] x86: preallocate and prepopulate separately Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 18 of 36] x86/paravirt: add debugging for missing operations Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 19 of 36] paravirt_ops: define PARA_INDIRECT for indirect asm calls Jeremy Fitzhardinge
2008-06-25  4:19 ` Jeremy Fitzhardinge [this message]
2008-06-25  4:19 ` [PATCH 21 of 36] x86-64: add FIX_PARAVIRT_BOOTMAP fixmap slot Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 22 of 36] x86_64: split x86_64_start_kernel Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 23 of 36] x86_64: adjust mapping of physical pagetables to work with Xen Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 24 of 36] x86_64: create small vmemmap mappings if PSE not available Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 25 of 36] x86_64: PSE no longer a hard requirement Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 26 of 36] x86_64: Split set_pte_vaddr() Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 27 of 36] x86_64: __switch_to(): Move arch_leave_lazy_cpu_mode() to the right place Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 28 of 36] Save %fs and %gs before load_TLS() and arch_leave_lazy_cpu_mode() Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 29 of 36] Use __KERNEL_DS as SS when returning to a kernel thread (VERIFY) Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 30 of 36] x86/paravirt_ops: split sysret and sysexit Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 31 of 36] x86_64 pvops: don't restore user rsp within sysret Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 32 of 36] Add sysret/sysexit pvops for returning to 32-bit compatibility userspace Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 33 of 36] x86_64: ia32entry: replace privileged instructions with pvops Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 34 of 36] x86_64: swapgs pvop with a user-stack can never be called Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 35 of 36] x86_64/paravirt: add adjust_exception_frame Jeremy Fitzhardinge
2008-06-25  4:19 ` [PATCH 36 of 36] x86_64/paravirt: Make load_gs_index() a paravirt operation Jeremy Fitzhardinge
2008-06-25  8:47   ` Ingo Molnar
2008-06-25 11:48     ` Jeremy Fitzhardinge
2008-06-25  8:42 ` [PATCH 00 of 36] x86/paravirt: groundwork for 64-bit Xen support Ingo Molnar
2008-06-25 11:46   ` Jeremy Fitzhardinge
2008-06-25 15:22   ` Ingo Molnar
2008-06-25 20:12     ` Jeremy Fitzhardinge
2008-06-26 10:57       ` Ingo Molnar
2008-06-26 10:58         ` Ingo Molnar
2008-06-26 14:34           ` [Xen-devel] " Jeremy Fitzhardinge
2008-06-27 15:56             ` Ingo Molnar
2008-06-27 16:02               ` Jeremy Fitzhardinge
2008-06-27 16:06                 ` Ingo Molnar
2008-06-27 16:25                   ` Jeremy Fitzhardinge
2008-06-27 16:03             ` Ingo Molnar
2008-06-27 19:04               ` Jeremy Fitzhardinge
2008-06-29  8:43                 ` Ingo Molnar
2008-06-30  3:02                   ` Jeremy Fitzhardinge
2008-06-30  4:35                     ` Yinghai Lu
2008-06-30  5:32                       ` Jeremy Fitzhardinge
2008-06-30  8:21                     ` Ingo Molnar
2008-06-30  9:22                       ` Ingo Molnar
2008-06-30 17:17                         ` Jeremy Fitzhardinge
2008-06-30 18:12                           ` Ingo Molnar
2008-06-30 18:36                             ` Jeremy Fitzhardinge
2008-06-30 18:44                               ` Ingo Molnar
2008-06-30 17:57                         ` Jeremy Fitzhardinge
2008-06-30 18:03                           ` Ingo Molnar
2008-06-30 23:04                         ` Jeremy Fitzhardinge
2008-07-01  8:52                           ` Ingo Molnar
2008-07-01  9:21                             ` Ingo Molnar
2008-07-01 16:10                               ` Jeremy Fitzhardinge
2008-07-01 16:14                               ` Jeremy Fitzhardinge
2008-07-01 20:31                                 ` Ingo Molnar
2008-07-03  9:10                                   ` Ingo Molnar
2008-07-03 15:47                                     ` Jeremy Fitzhardinge
2008-07-03 18:20                                     ` Yinghai Lu
2008-07-03 18:25                                       ` Jeremy Fitzhardinge
2008-07-03 18:30                                         ` Yinghai Lu
2008-07-03 18:41                                           ` Jeremy Fitzhardinge
2008-07-03 18:51                                             ` Yinghai Lu
2008-07-03 19:19                                               ` Yinghai Lu
2008-07-03 19:29                                                 ` Yinghai Lu
2008-07-09  7:42                                                   ` Ingo Molnar
2008-06-26 14:28         ` Jeremy Fitzhardinge
2008-06-26 18:25         ` Jeremy Fitzhardinge
2008-06-26 19:02         ` Jeremy Fitzhardinge
2008-06-25 12:40 ` Andi Kleen
2008-06-25 18:45   ` [Xen-devel] " Keir Fraser
2008-06-25 19:13     ` Andi Kleen
2008-06-25 19:22       ` Keir Fraser
2008-06-25 20:14         ` Andi Kleen
2008-06-25 20:03   ` Jeremy Fitzhardinge

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=68c291617885d5f819ea.1214367556@localhost \
    --to=jeremy@goop.org \
    --cc=ehabkost@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markmc@redhat.com \
    --cc=mingo@elte.hu \
    --cc=sct@redhat.com \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xensource.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