WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] linux/x86: Advertise which page table entries contai

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] linux/x86: Advertise which page table entries contain MFNs
From: "Jan Beulich" <jbeulich@xxxxxxxxxx>
Date: Tue, 13 Feb 2007 15:14:47 +0000
Delivery-date: Tue, 13 Feb 2007 10:31:10 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
.. and hence need to be (un)canonicalized during save/restore.

The patch should apply without the page table handling adjustment one, yet
the values passed in the new note assume that patch to be applied.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>

Index: 2007-02-08/linux-2.6-xen-sparse/arch/i386/kernel/Makefile
===================================================================
--- 2007-02-08/linux-2.6-xen-sparse/arch/i386/kernel/Makefile   2007-02-13 
15:13:10.000000000 +0100
+++ 2007-02-08/linux-2.6-xen-sparse/arch/i386/kernel/Makefile   2007-02-13 
12:27:16.000000000 +0100
@@ -98,4 +98,5 @@ n-obj-xen := i8259.o timers/ reboot.o sm
 obj-y := $(call filterxen, $(obj-y), $(n-obj-xen))
 obj-y := $(call cherrypickxen, $(obj-y))
 extra-y := $(call cherrypickxen, $(extra-y))
+%/head-xen.o %/head-xen.s: EXTRA_AFLAGS :=
 endif
Index: 2007-02-08/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S
===================================================================
--- 2007-02-08/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S 2007-02-13 
15:13:12.000000000 +0100
+++ 2007-02-08/linux-2.6-xen-sparse/arch/i386/kernel/head-xen.S 2007-02-13 
15:13:52.000000000 +0100
@@ -6,6 +6,7 @@
 #include <linux/linkage.h>
 #include <asm/segment.h>
 #include <asm/page.h>
+#include <asm/pgtable.h>
 #include <asm/cache.h>
 #include <asm/thread_info.h>
 #include <asm/asm-offsets.h>
@@ -198,7 +199,9 @@ ENTRY(cpu_gdt_table)
        ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .asciz,
"writable_page_tables|writable_descriptor_tables|auto_translated_physmap|pae_pgdir_above_4gb|supervisor_mode_kernel")
 #ifdef CONFIG_X86_PAE
        ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz, "yes")
+       ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,   .quad,  
_PAGE_PRESENT,_PAGE_PRESENT)
 #else
        ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz, "no")
+       ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,   .long,  
_PAGE_PRESENT,_PAGE_PRESENT)
 #endif
        ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz, "generic")
Index: 2007-02-08/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile
===================================================================
--- 2007-02-08/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile 2007-02-13 
15:13:10.000000000 +0100
+++ 2007-02-08/linux-2.6-xen-sparse/arch/x86_64/kernel/Makefile 2007-02-13 
12:27:16.000000000 +0100
@@ -72,4 +72,5 @@ include $(srctree)/scripts/Makefile.xen
 obj-y := $(call filterxen, $(obj-y), $(n-obj-xen))
 obj-y := $(call cherrypickxen, $(obj-y))
 extra-y := $(call cherrypickxen, $(extra-y))
+%/head-xen.o %/head-xen.s: EXTRA_AFLAGS :=
 endif
Index: 2007-02-08/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S
===================================================================
--- 2007-02-08/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S       
2007-02-13 15:13:10.000000000 +0100
+++ 2007-02-08/linux-2.6-xen-sparse/arch/x86_64/kernel/head-xen.S       
2007-02-13 12:28:21.000000000 +0100
@@ -20,6 +20,7 @@
 #include <asm/desc.h>
 #include <asm/segment.h>
 #include <asm/page.h>
+#include <asm/pgtable.h>
 #include <asm/msr.h>
 #include <asm/cache.h>
 
@@ -49,7 +50,7 @@ ENTRY(_stext)
 #define NEXT_PAGE(name) \
        $page = $page + 1; \
        .org $page * 0x1000; \
-       phys_/**/name = $page * 0x1000 + __PHYSICAL_START; \
+       phys_##name = $page * 0x1000 + __PHYSICAL_START; \
 ENTRY(name)
 
 NEXT_PAGE(init_level4_pgt)
@@ -181,5 +182,6 @@ gdt_end:
 #endif /* !CONFIG_XEN_COMPAT_030002 */
        ELFNOTE(Xen, XEN_ELFNOTE_ENTRY,          .quad,  startup_64)
        ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .quad,  hypercall_page)
+       ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,   .quad,  
_PAGE_PRESENT,_PAGE_PRESENT)
        ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .asciz,
"writable_page_tables|writable_descriptor_tables|auto_translated_physmap|pae_pgdir_above_4gb|supervisor_mode_kernel")
        ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz, "generic")
Index: 2007-02-08/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable.h
===================================================================
--- 2007-02-08/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable.h     
2007-02-13 14:14:47.000000000 +0100
+++ 2007-02-08/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/pgtable.h     
2007-02-13 12:27:16.000000000 +0100
@@ -1,6 +1,7 @@
 #ifndef _I386_PGTABLE_H
 #define _I386_PGTABLE_H
 
+#ifndef __ASSEMBLY__
 #include <asm/hypervisor.h>
 
 /*
@@ -12,7 +13,6 @@
  * This file contains the functions and defines necessary to modify and use
  * the i386 page table tree.
  */
-#ifndef __ASSEMBLY__
 #include <asm/processor.h>
 #include <asm/fixmap.h>
 #include <linux/threads.h>
@@ -91,6 +91,8 @@ void paging_init(void);
 # define VMALLOC_END   (FIXADDR_START-2*PAGE_SIZE)
 #endif
 
+#endif /* !__ASSEMBLY__ */
+
 /*
  * _PAGE_PSE set in the page directory entry just means that
  * the page directory entry points directly to a 4MB-aligned block of
@@ -160,6 +162,8 @@ void paging_init(void);
 #define _PAGE_KERNEL_EXEC \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
 
+#ifndef __ASSEMBLY__
+
 extern unsigned long long __PAGE_KERNEL, __PAGE_KERNEL_EXEC;
 #define __PAGE_KERNEL_RO               (__PAGE_KERNEL & ~_PAGE_RW)
 #define __PAGE_KERNEL_NOCACHE          (__PAGE_KERNEL | _PAGE_PCD)
@@ -469,8 +473,6 @@ void make_pages_writable(void *va, unsig
        m | ((unsigned long)(__va) & (PAGE_SIZE-1));                    \
 })
 
-#endif /* !__ASSEMBLY__ */
-
 #ifdef CONFIG_FLATMEM
 #define kern_addr_valid(addr)  (1)
 #endif /* CONFIG_FLATMEM */
@@ -508,4 +510,6 @@ direct_remap_pfn_range(vma,from,pfn,size
 #define __HAVE_ARCH_PTE_SAME
 #include <asm-generic/pgtable.h>
 
+#endif /* !__ASSEMBLY__ */
+
 #endif /* _I386_PGTABLE_H */
Index: 2007-02-08/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgtable.h
===================================================================
--- 2007-02-08/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgtable.h   
2007-02-13 14:14:47.000000000 +0100
+++ 2007-02-08/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/pgtable.h   
2007-02-13 12:27:16.000000000 +0100
@@ -5,6 +5,7 @@
  * This file contains the functions and defines necessary to modify and use
  * the x86-64 page table tree.
  */
+#ifndef __ASSEMBLY__
 #include <asm/processor.h>
 #include <asm/fixmap.h>
 #include <asm/bitops.h>
@@ -172,7 +173,6 @@ static inline pte_t ptep_get_and_clear_f
 #define USER_PTRS_PER_PGD      ((TASK_SIZE-1)/PGDIR_SIZE+1)
 #define FIRST_USER_ADDRESS     0
 
-#ifndef __ASSEMBLY__
 #define MAXMEM          0x3fffffffffffUL
 #define VMALLOC_START    0xffffc20000000000UL
 #define VMALLOC_END      0xffffe1ffffffffffUL
@@ -180,6 +180,8 @@ static inline pte_t ptep_get_and_clear_f
 #define MODULES_END      0xfffffffffff00000UL
 #define MODULES_LEN   (MODULES_END - MODULES_VADDR)
 
+#endif /* !__ASSEMBLY__ */
+
 #define _PAGE_BIT_PRESENT      0
 #define _PAGE_BIT_RW           1
 #define _PAGE_BIT_USER         2
@@ -205,6 +207,8 @@ static inline pte_t ptep_get_and_clear_f
 #define _PAGE_PROTNONE 0x080   /* If not present */
 #define _PAGE_NX        (1UL<<_PAGE_BIT_NX)
 
+#ifndef __ASSEMBLY__
+
 #ifdef CONFIG_XEN_COMPAT_030002
 extern unsigned int __kernel_page_user;
 #else
@@ -511,8 +515,6 @@ static inline pte_t pte_modify(pte_t pte
 extern struct page *pgd_list;
 void vmalloc_sync_all(void);
 
-#endif /* !__ASSEMBLY__ */
-
 extern int kern_addr_valid(unsigned long addr); 
 
 #define DOMID_LOCAL (0xFFFFU)
@@ -566,4 +568,6 @@ int touch_pte_range(struct mm_struct *mm
 #define __HAVE_ARCH_PTE_SAME
 #include <asm-generic/pgtable.h>
 
+#endif /* !__ASSEMBLY__ */
+
 #endif /* _X86_64_PGTABLE_H */
Index: 2007-02-08/linux-2.6-xen-sparse/include/linux/elfnote.h
===================================================================
--- 2007-02-08/linux-2.6-xen-sparse/include/linux/elfnote.h     2007-02-13 
15:13:10.000000000 +0100
+++ 2007-02-08/linux-2.6-xen-sparse/include/linux/elfnote.h     2007-02-13 
12:27:16.000000000 +0100
@@ -38,7 +38,20 @@
  * e.g. ELFNOTE(XYZCo, 42, .asciz, "forty-two")
  *      ELFNOTE(XYZCo, 12, .long, 0xdeadbeef)
  */
-#define ELFNOTE(name, type, desctype, descdata)        \
+#ifdef __STDC__
+#define ELFNOTE(name, type, desctype, descdata...) \
+.pushsection .note.name                        ;       \
+  .align 4                             ;       \
+  .long 2f - 1f                /* namesz */    ;       \
+  .long 4f - 3f                /* descsz */    ;       \
+  .long type                           ;       \
+1:.asciz #name                         ;       \
+2:.align 4                             ;       \
+3:desctype descdata                    ;       \
+4:.align 4                             ;       \
+.popsection
+#else /* !__STDC__, i.e. -traditional */
+#define ELFNOTE(name, type, desctype, descdata) \
 .pushsection .note.name                        ;       \
   .align 4                             ;       \
   .long 2f - 1f                /* namesz */    ;       \
@@ -48,7 +61,8 @@
 2:.align 4                             ;       \
 3:desctype descdata                    ;       \
 4:.align 4                             ;       \
-.popsection                            ;
+.popsection
+#endif /* __STDC__ */
 #else  /* !__ASSEMBLER__ */
 #include <linux/elf.h>
 /*
Index: 2007-02-08/xen/include/public/elfnote.h
===================================================================
--- 2007-02-08/xen/include/public/elfnote.h     2007-02-13 15:13:10.000000000 
+0100
+++ 2007-02-08/xen/include/public/elfnote.h     2007-02-13 12:27:16.000000000 
+0100
@@ -151,6 +151,12 @@
 #define XEN_ELFNOTE_HV_START_LOW  12
 
 /*
+ * List of maddr_t-sized mask/value pairs describing how to recognize
+ * (non-present) L1 page table entries carrying valid MFNs (numeric).
+ */
+#define XEN_ELFNOTE_L1_MFN_VALID  13
+
+/*
  * System information exported through crash notes.
  *
  * The kexec / kdump code will create one XEN_ELFNOTE_CRASH_INFO 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>