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] Patch to run a domU in shadow test mode.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Patch to run a domU in shadow test mode.
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Tue, 12 Apr 2005 09:32:24 +0000
Delivery-date: Wed, 13 Apr 2005 23:02:56 +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@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1272.1.1, 2005/04/12 10:32:24+01:00, mafetter@xxxxxxxxxxxxxxxx

        Patch to run a domU in shadow test mode.



 linux-2.6.11-xen-sparse/arch/xen/Kconfig                          |    7 ++
 linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32    |    1 
 linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32    |    4 +
 linux-2.6.11-xen-sparse/arch/xen/i386/mm/hypervisor.c             |    4 +
 linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c                |    2 
 linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h |    5 ++
 linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h        |    9 +++
 linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h              |   15 +++++-
 tools/libxc/xc_linux_build.c                                      |   15 ++++++
 xen/arch/x86/domain.c                                             |   14 ++++-
 xen/arch/x86/mm.c                                                 |   11 ++--
 xen/arch/x86/shadow.c                                             |   17 
++-----
 xen/common/dom_mem_ops.c                                          |    9 ---
 xen/include/asm-x86/shadow.h                                      |   24 
+++++-----
 xen/include/xen/perfc_defn.h                                      |    1 
 15 files changed, 97 insertions(+), 41 deletions(-)


diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/Kconfig 
b/linux-2.6.11-xen-sparse/arch/xen/Kconfig
--- a/linux-2.6.11-xen-sparse/arch/xen/Kconfig  2005-04-13 19:03:07 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/Kconfig  2005-04-13 19:03:07 -04:00
@@ -123,6 +123,13 @@
          to a character device, allowing device prototyping in application
          space.  Odds are that you want to say N here.
 
+config XEN_SHADOW_MODE
+       bool "Fake shadow mode"
+       default n
+    help
+      fakes out a shadow mode kernel
+
+
 config XEN_SCRUB_PAGES
        bool "Scrub memory before freeing it to Xen"
        default y
diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32 
b/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32
--- a/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32    
2005-04-13 19:03:08 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/configs/xen0_defconfig_x86_32    
2005-04-13 19:03:08 -04:00
@@ -14,6 +14,7 @@
 CONFIG_XEN_PHYSDEV_ACCESS=y
 CONFIG_XEN_BLKDEV_BACKEND=y
 # CONFIG_XEN_BLKDEV_TAP_BE is not set
+# CONFIG_XEN_BLKDEV_GRANT is not set
 CONFIG_XEN_NETDEV_BACKEND=y
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32 
b/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32
--- a/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32    
2005-04-13 19:03:08 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32    
2005-04-13 19:03:08 -04:00
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.11-xenU
-# Fri Mar 11 01:20:28 2005
+# Tue Apr  5 16:44:33 2005
 #
 CONFIG_XEN=y
 CONFIG_ARCH_XEN=y
@@ -12,10 +12,12 @@
 #
 # CONFIG_XEN_PRIVILEGED_GUEST is not set
 # CONFIG_XEN_PHYSDEV_ACCESS is not set
+# CONFIG_XEN_BLKDEV_GRANT is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
 # CONFIG_XEN_NETDEV_FRONTEND_PIPELINED_TRANSMITTER is not set
 # CONFIG_XEN_BLKDEV_TAP is not set
+CONFIG_XEN_SHADOW_MODE=y
 CONFIG_XEN_SCRUB_PAGES=y
 CONFIG_X86=y
 # CONFIG_X86_64 is not set
diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/hypervisor.c 
b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/hypervisor.c
--- a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/hypervisor.c     2005-04-13 
19:03:08 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/hypervisor.c     2005-04-13 
19:03:08 -04:00
@@ -48,6 +48,7 @@
 #define pmd_val_ma(v) (v).pud.pgd.pgd;
 #endif
 
+#ifndef CONFIG_XEN_SHADOW_MODE
 void xen_l1_entry_update(pte_t *ptr, unsigned long val)
 {
     mmu_update_t u;
@@ -63,6 +64,7 @@
     u.val = pmd_val_ma(val);
     BUG_ON(HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF) < 0);
 }
+#endif
 
 void xen_machphys_update(unsigned long mfn, unsigned long pfn)
 {
@@ -131,6 +133,7 @@
 
 #endif /* CONFIG_SMP */
 
+#ifndef CONFIG_XEN_SHADOW_MODE
 void xen_pgd_pin(unsigned long ptr)
 {
     struct mmuext_op op;
@@ -162,6 +165,7 @@
     op.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT);
     BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
 }
+#endif
 
 void xen_set_ldt(unsigned long ptr, unsigned long len)
 {
diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c 
b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c
--- a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c        2005-04-13 
19:03:08 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c        2005-04-13 
19:03:08 -04:00
@@ -366,6 +366,7 @@
        kmem_cache_free(pgd_cache, pgd);
 }
 
+#ifndef CONFIG_XEN_SHADOW_MODE
 void make_lowmem_page_readonly(void *va)
 {
        pgd_t *pgd = pgd_offset_k((unsigned long)va);
@@ -437,3 +438,4 @@
                va = (void *)((unsigned long)va + PAGE_SIZE);
        }
 }
+#endif /* CONFIG_XEN_SHADOW_MODE */
diff -Nru a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 
b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h
--- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 
2005-04-13 19:03:08 -04:00
+++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable-2level.h 
2005-04-13 19:03:08 -04:00
@@ -15,7 +15,12 @@
  */
 #define set_pte(pteptr, pteval) (*(pteptr) = pteval)
 #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
+
+#ifndef CONFIG_XEN_SHADOW_MODE
 #define set_pmd(pmdptr, pmdval) xen_l2_entry_update((pmdptr), (pmdval))
+#else
+#define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
+#endif
 
 #define ptep_get_and_clear(xp) __pte_ma(xchg(&(xp)->pte_low, 0))
 #define pte_same(a, b)         ((a).pte_low == (b).pte_low)
diff -Nru a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h 
b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h
--- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h        
2005-04-13 19:03:08 -04:00
+++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/pgtable.h        
2005-04-13 19:03:08 -04:00
@@ -432,12 +432,21 @@
        }                                                               \
 } while (0)
 
+#ifndef CONFIG_XEN_SHADOW_MODE
 void make_lowmem_page_readonly(void *va);
 void make_lowmem_page_writable(void *va);
 void make_page_readonly(void *va);
 void make_page_writable(void *va);
 void make_pages_readonly(void *va, unsigned int nr);
 void make_pages_writable(void *va, unsigned int nr);
+#else
+#define make_lowmem_page_readonly(_va) ((void)0)
+#define make_lowmem_page_writable(_va) ((void)0)
+#define make_page_readonly(_va)        ((void)0)
+#define make_page_writable(_va)        ((void)0)
+#define make_pages_readonly(_va, _nr)  ((void)0)
+#define make_pages_writable(_va, _nr)  ((void)0)
+#endif
 
 #define arbitrary_virt_to_machine(__va)                                        
\
 ({                                                                     \
diff -Nru a/linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h 
b/linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h
--- a/linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h      2005-04-13 
19:03:07 -04:00
+++ b/linux-2.6.11-xen-sparse/include/asm-xen/hypervisor.h      2005-04-13 
19:03:07 -04:00
@@ -71,15 +71,26 @@
  * be MACHINE addresses.
  */
 
-void xen_l1_entry_update(pte_t *ptr, unsigned long val);
-void xen_l2_entry_update(pmd_t *ptr, pmd_t val);
 void xen_pt_switch(unsigned long ptr);
 void xen_tlb_flush(void);
 void xen_invlpg(unsigned long ptr);
+
+#ifndef CONFIG_XEN_SHADOW_MODE
+void xen_l1_entry_update(pte_t *ptr, unsigned long val);
+void xen_l2_entry_update(pmd_t *ptr, pmd_t val);
 void xen_pgd_pin(unsigned long ptr);
 void xen_pgd_unpin(unsigned long ptr);
 void xen_pte_pin(unsigned long ptr);
 void xen_pte_unpin(unsigned long ptr);
+#else
+#define xen_l1_entry_update(_p, _v) set_pte((_p), (pte_t){(_v)})
+#define xen_l2_entry_update(_p, _v) set_pgd((_p), (pgd_t){(_v)})
+#define xen_pgd_pin(_p)   ((void)0)
+#define xen_pgd_unpin(_p) ((void)0)
+#define xen_pte_pin(_p)   ((void)0)
+#define xen_pte_unpin(_p) ((void)0)
+#endif
+
 void xen_set_ldt(unsigned long ptr, unsigned long bytes);
 void xen_machphys_update(unsigned long mfn, unsigned long pfn);
 
diff -Nru a/tools/libxc/xc_linux_build.c b/tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      2005-04-13 19:03:08 -04:00
+++ b/tools/libxc/xc_linux_build.c      2005-04-13 19:03:08 -04:00
@@ -210,9 +210,11 @@
         }
 
         *vl1e = (page_array[count] << PAGE_SHIFT) | L1_PROT;
+#if !(1 || defined(GROSS_HACK_TO_TEST_SHADOW_MODE_CLIENTS))
         if ( (count >= ((vpt_start-dsi.v_start)>>PAGE_SHIFT)) && 
              (count <  ((vpt_end  -dsi.v_start)>>PAGE_SHIFT)) )
             *vl1e &= ~_PAGE_RW;
+#endif
         vl1e++;
     }
     munmap(vl1tab, PAGE_SIZE);
@@ -243,12 +245,25 @@
     }
     munmap(physmap, PAGE_SIZE);
     
+#if 1 || defined(GROSS_HACK_TO_TEST_SHADOW_MODE_CLIENTS)
+    {
+        int ret;
+        ret = xc_shadow_control(xc_handle, dom,
+                                DOM0_SHADOW_CONTROL_OP_ENABLE_TEST,
+                                NULL, 0, NULL);
+        if ( !ret )
+            ERROR("enabling shadow test mode failed\n");
+    }
+#endif
+
     /*
      * Pin down l2tab addr as page dir page - causes hypervisor to provide
      * correct protection for the page
      */ 
+#if !(1 || defined(GROSS_HACK_TO_TEST_SHADOW_MODE_CLIENTS))
     if ( pin_table(xc_handle, MMUEXT_PIN_L2_TABLE, l2tab>>PAGE_SHIFT, dom) )
         goto error_out;
+#endif
 
     start_info = xc_map_foreign_range(
         xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE,
diff -Nru a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     2005-04-13 19:03:07 -04:00
+++ b/xen/arch/x86/domain.c     2005-04-13 19:03:08 -04:00
@@ -440,9 +440,17 @@
     phys_basetab = c->pt_base;
     ed->arch.guest_table = mk_pagetable(phys_basetab);
 
-    if ( !get_page_and_type(&frame_table[phys_basetab>>PAGE_SHIFT], d, 
-                            PGT_base_page_table) )
-        return -EINVAL;
+    if ( shadow_mode_enabled(d) )
+    {
+        if ( !get_page(&frame_table[phys_basetab>>PAGE_SHIFT], d) )
+            return -EINVAL;
+    }
+    else
+    {
+        if ( !get_page_and_type(&frame_table[phys_basetab>>PAGE_SHIFT], d, 
+                                PGT_base_page_table) )
+            return -EINVAL;
+    }
 
     /* Failure to set GDT is harmless. */
     SET_GDT_ENTRIES(ed, DEFAULT_GDT_ENTRIES);
diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c 2005-04-13 19:03:08 -04:00
+++ b/xen/arch/x86/mm.c 2005-04-13 19:03:08 -04:00
@@ -1897,8 +1897,11 @@
                         gpfn = __mfn_to_gpfn(d, mfn);
                         ASSERT(VALID_M2P(gpfn));
 
-                        if ( page_is_page_table(page) )

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Patch to run a domU in shadow test mode., BitKeeper Bot <=