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-changelog

[Xen-changelog] Merge with Rolf's tree

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Merge with Rolf's tree
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Mon, 21 Mar 2005 16:41:29 +0000
Delivery-date: Tue, 05 Apr 2005 16:14:38 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1251, 2005/03/21 16:41:29+00:00, mafetter@xxxxxxxxxxxxxxxx

        Merge with Rolf's tree
        
        Signed-off-by: michael.fetterman@xxxxxxxxxxxx



 b/linux-2.6.10-xen-sparse/arch/xen/Kconfig                          |   28 
 b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c                  |   15 
 b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/hypervisor.c             |   11 
 b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/init.c                   |   15 
 b/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h |   15 
 b/xen/arch/x86/domain_build.c                                       |  592 
++++++++++
 b/xen/arch/x86/mm.c                                                 |   12 
 b/xen/arch/x86/x86_32/domain_page.c                                 |   10 
 b/xen/common/page_alloc.c                                           |    4 
 b/xen/include/xen/perfc.h                                           |   50 
 b/xen/include/xen/perfc_defn.h                                      |   60 -
 b/xen/include/xen/sched.h                                           |   11 
 xen/arch/x86/x86_32/domain_build.c                                  |  454 
-------
 xen/arch/x86/x86_64/domain_build.c                                  |  424 
-------
 14 files changed, 758 insertions(+), 943 deletions(-)


diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/Kconfig 
b/linux-2.6.10-xen-sparse/arch/xen/Kconfig
--- a/linux-2.6.10-xen-sparse/arch/xen/Kconfig  2005-04-05 12:14:42 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/Kconfig  2005-04-05 12:14:42 -04:00
@@ -118,6 +118,34 @@
        bool "writable page tables"
        default y
 
+config XEN_SYSCALL_STATS
+       bool "system call statistics"
+       default n
+
+config XEN_DEBUG_NO_MMU_BATCHING
+       bool "Disables batching on MMU updates"
+       default n
+    help
+      This does a hypercall per PTE update
+      we only use this for benchmarking
+      enable only if you know what you are doing
+
+config XEN_BATCH_MODE1
+       bool "A variant of writable pagetable using the batch interface"
+       default n
+    help
+      default is no batching and minor mods for some batching
+      we only use this for benchmarking
+      enable only if you know what you are doing
+
+config XEN_BATCH_MODE2
+       bool "forward port of 2.4 batching"
+       default n
+    help
+      default is batching + flushes where 2.4 had them
+      we only use this for benchmarking
+      enable only if you know what you are doing
+
 config XEN_SHADOW_MODE
        bool "Fake shadow mode"
        default n
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c 
b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c  2005-04-05 12:14:42 
-04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c  2005-04-05 12:14:42 
-04:00
@@ -216,6 +216,11 @@
  *     bit 1 == 0 means read, 1 means write
  *     bit 2 == 0 means kernel, 1 means user-mode
  */
+
+extern unsigned long c_do_page_fault;
+extern unsigned long c_minor_page_fault;
+extern unsigned long c_major_page_fault;
+
 fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code,
                              unsigned long address)
 {
@@ -226,11 +231,19 @@
        int write;
        siginfo_t info;
 
+    c_do_page_fault++;
+
        /* Set the "privileged fault" bit to something sane. */
        error_code &= 3;
        error_code |= (regs->xcs & 2) << 1;
        if (regs->eflags & X86_EFLAGS_VM)
                error_code |= 4;
+
+#ifdef CONFIG_XEN_BATCH_MODE2
+    /* ensure all updates have completed */
+    flush_page_update_queue();
+#endif
+
                
        if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
                                        SIGSEGV) == NOTIFY_STOP)
@@ -353,9 +366,11 @@
        switch (handle_mm_fault(mm, vma, address, write)) {
                case VM_FAULT_MINOR:
                        tsk->min_flt++;
+            c_minor_page_fault++;
                        break;
                case VM_FAULT_MAJOR:
                        tsk->maj_flt++;
+            c_major_page_fault++;
                        break;
                case VM_FAULT_SIGBUS:
                        goto do_sigbus;
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/hypervisor.c 
b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/hypervisor.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/hypervisor.c     2005-04-05 
12:14:43 -04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/hypervisor.c     2005-04-05 
12:14:43 -04:00
@@ -138,8 +138,11 @@
     per_cpu(update_queue[idx], cpu).ptr = virt_to_machine(ptr);
     per_cpu(update_queue[idx], cpu).val = val;
     increment_index();
+#ifdef CONFIG_XEN_DEBUG_NO_MMU_BATCHING
+    __flush_page_update_queue();
+#endif
     spin_unlock_irqrestore(&update_lock, flags);
-#else /* CONFIG_XEN_SHADOW_MODE */
+#else
     set_pte(ptr, __pte(val));
 #endif /* CONFIG_XEN_SHADOW_MODE */
 }
@@ -156,7 +159,7 @@
     per_cpu(update_queue[idx], cpu).val = val;
     increment_index();
     spin_unlock_irqrestore(&update_lock, flags);
-#else /* CONFIG_XEN_SHADOW_MODE */
+#else
     set_pmd(ptr, __pmd(val));
 #endif /* CONFIG_XEN_SHADOW_MODE */
 }
@@ -333,7 +336,7 @@
     per_cpu(update_queue[idx], cpu).val = val;
     increment_index_and_flush();
     spin_unlock_irqrestore(&update_lock, flags);
-#else /* CONFIG_XEN_SHADOW_MODE */
+#else
     set_pte(ptr, __pte(val));
 #endif /* CONFIG_XEN_SHADOW_MODE */
 }
@@ -350,7 +353,7 @@
     per_cpu(update_queue[idx], cpu).val = val;
     increment_index_and_flush();
     spin_unlock_irqrestore(&update_lock, flags);
-#else /* CONFIG_XEN_SHADOW_MODE */
+#else
     set_pmd(ptr, __pmd(val));
 #endif /* CONFIG_XEN_SHADOW_MODE */
 }
diff -Nru a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/init.c 
b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/init.c
--- a/linux-2.6.10-xen-sparse/arch/xen/i386/mm/init.c   2005-04-05 12:14:42 
-04:00
+++ b/linux-2.6.10-xen-sparse/arch/xen/i386/mm/init.c   2005-04-05 12:14:42 
-04:00
@@ -79,7 +79,7 @@
                pte_t *page_table = (pte_t *) 
alloc_bootmem_low_pages(PAGE_SIZE);
 #ifndef CONFIG_XEN_SHADOW_MODE
                make_page_readonly(page_table);
-#endif /* CONFIG_XEN_SHADOW_MODE */
+#endif
                set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE));
                if (page_table != pte_offset_kernel(pmd, 0))
                        BUG();  
@@ -179,9 +179,9 @@
                                pte = one_page_table_init(pmd);
 
                                pte += pte_ofs;
-                               /* XEN: Only map initial RAM allocation. */
-                               for (; pte_ofs < PTRS_PER_PTE && pfn < 
max_ram_pfn; pte++, pfn++, pte_ofs++) {
-                                               if (pte_present(*pte))
+                               for (; pte_ofs < PTRS_PER_PTE && pfn < 
max_low_pfn; pte++, pfn++, pte_ofs++) {
+                                               /* XEN: Only map initial RAM 
allocation. */
+                                               if ((pfn >= max_ram_pfn) || 
pte_present(*pte))
                                                        continue;
                                                if (is_kernel_text(address))
                                                        set_pte(pte, 
pfn_pte(pfn, PAGE_KERNEL_EXEC));
@@ -648,6 +648,7 @@
        int codesize, reservedpages, datasize, initsize;
        int tmp;
        int bad_ppro;
+       unsigned long pfn;
 
 #ifndef CONFIG_DISCONTIGMEM
        if (!mem_map)
@@ -676,6 +677,12 @@
 
        /* this will put all low memory onto the freelists */
        totalram_pages += __free_all_bootmem();
+       /* XEN: init and count low-mem pages outside initial allocation. */
+       for (pfn = xen_start_info.nr_pages; pfn < max_low_pfn; pfn++) {
+               ClearPageReserved(&mem_map[pfn]);
+               set_page_count(&mem_map[pfn], 1);
+               totalram_pages++;
+       }
 
        reservedpages = 0;
        for (tmp = 0; tmp < max_low_pfn; tmp++)
diff -Nru a/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 
b/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
--- a/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 
2005-04-05 12:14:42 -04:00
+++ b/linux-2.6.10-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 
2005-04-05 12:14:42 -04:00
@@ -36,7 +36,22 @@
 #endif
 #define set_pte_atomic(pteptr, pteval) set_pte(pteptr, pteval)
 #else
+#if defined(CONFIG_XEN_DEBUG_NO_MMU_BATCHING)
+#define set_pte(pteptr, pteval)\
+    set_pte_batched(pteptr, pteval)
+
+#elif defined(CONFIG_XEN_BATCH_MODE1)
+#define set_pte(pteptr, pteval)({\
+    set_pte_batched(pteptr, pteval);\
+    _flush_page_update_queue();})
+
+#elif defined(CONFIG_XEN_BATCH_MODE2)
+#define set_pte(pteptr, pteval)\
+    set_pte_batched(pteptr, pteval)
+
+#else
 #define set_pte(pteptr, pteval) (*(pteptr) = pteval)
+#endif
 #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
 #endif
 /*
diff -Nru a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/xen/arch/x86/domain_build.c       2005-04-05 12:14:42 -04:00
@@ -0,0 +1,592 @@
+/******************************************************************************
+ * domain_build.c
+ * 
+ * Copyright (c) 2002-2005, K A Fraser
+ */
+
+#include <xen/config.h>
+#include <xen/init.h>
+#include <xen/lib.h>
+#include <xen/sched.h>
+#include <xen/smp.h>
+#include <xen/delay.h>
+#include <xen/event.h>
+#include <xen/elf.h>
+#include <xen/kernel.h>
+#include <asm/regs.h>
+#include <asm/system.h>
+#include <asm/io.h>
+#include <asm/processor.h>
+#include <asm/desc.h>
+#include <asm/i387.h>
+#include <asm/shadow.h>
+
+/* opt_dom0_mem: Kilobytes of memory allocated to domain 0. */
+static unsigned int opt_dom0_mem = 0;
+integer_param("dom0_mem", opt_dom0_mem);
+
+static unsigned int opt_dom0_shadow = 0;
+boolean_param("dom0_shadow", opt_dom0_shadow);
+
+#if defined(__i386__)
+/* No ring-3 access in initial leaf page tables. */
+#define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED)
+#elif defined(__x86_64__)
+/* Allow ring-3 access in long mode as guest cannot use ring 1. */
+#define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_USER)
+#endif
+/* Don't change these: Linux expects just these bits to be set. */
+/* (And that includes the bogus _PAGE_DIRTY!) */
+#define L2_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER)
+#define L3_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER)
+#define L4_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER)
+
+#define round_pgup(_p)    (((_p)+(PAGE_SIZE-1))&PAGE_MASK)
+#define round_pgdown(_p)  ((_p)&PAGE_MASK)
+

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Merge with Rolf's tree, BitKeeper Bot <=