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] pae shadow preparation

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [patch] pae shadow preparation
From: Gerd Knorr <kraxel@xxxxxxx>
Date: Thu, 28 Jul 2005 15:26:04 +0200
Delivery-date: Thu, 28 Jul 2005 13:28:33 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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
User-agent: Mutt/1.5.9i
  Hi,

Really just basic preparation: switch over PAE builds to the new
shadow code, drop old dummy functions, add (fewer) new ones.

  Gerd

Index: xen/include/asm-x86/shadow_public.h
===================================================================
--- xen.orig/include/asm-x86/shadow_public.h    2005-07-28 11:31:39.000000000 
+0200
+++ xen/include/asm-x86/shadow_public.h 2005-07-28 14:55:05.000000000 +0200
@@ -21,7 +21,7 @@
 
 #ifndef _XEN_SHADOW_PUBLIC_H
 #define _XEN_SHADOW_PUBLIC_H
-#if CONFIG_PAGING_LEVELS >= 4
+#if CONFIG_PAGING_LEVELS >= 3
 #define MFN_PINNED(_x) (frame_table[_x].u.inuse.type_info & PGT_pinned)
 
 extern int alloc_p2m_table(struct domain *d);
@@ -31,10 +31,6 @@ extern void shadow_sync_and_drop_referen
 extern void shadow_drop_references(
       struct domain *d, struct pfn_info *page);
 
-extern void shadow_l4_normal_pt_update(struct domain *d,
-                                       unsigned long pa, l4_pgentry_t l4e,
-                                       struct domain_mmap_cache *cache);
-
 extern int shadow_set_guest_paging_levels(struct domain *d, int levels);
 
 extern void release_out_of_sync_entry(
@@ -56,4 +52,10 @@ struct shadow_ops {
 };
 #endif
 
+#if CONFIG_PAGING_LEVELS >= 4
+extern void shadow_l4_normal_pt_update(struct domain *d,
+                                       unsigned long pa, l4_pgentry_t l4e,
+                                       struct domain_mmap_cache *cache);
+#endif
+
 #endif
Index: xen/include/asm-x86/shadow_64.h
===================================================================
--- xen.orig/include/asm-x86/shadow_64.h        2005-07-28 11:31:39.000000000 
+0200
+++ xen/include/asm-x86/shadow_64.h     2005-07-28 14:49:35.000000000 +0200
@@ -85,8 +85,10 @@ static inline int  table_offset_64(unsig
             return  (((va) >> L2_PAGETABLE_SHIFT) & (L2_PAGETABLE_ENTRIES - 
1));
         case 3:
             return  (((va) >> L3_PAGETABLE_SHIFT) & (L3_PAGETABLE_ENTRIES - 
1));
+#if CONFIG_PAGING_LEVELS >= 4
         case 4:
             return  (((va) >> L4_PAGETABLE_SHIFT) & (L4_PAGETABLE_ENTRIES - 
1));
+#endif
         default:
             //printk("<table_offset_64> level %d is too big\n", level);
             return -1;
Index: xen/include/asm-x86/shadow.h
===================================================================
--- xen.orig/include/asm-x86/shadow.h   2005-07-28 11:31:39.000000000 +0200
+++ xen/include/asm-x86/shadow.h        2005-07-28 15:00:49.000000000 +0200
@@ -131,12 +131,12 @@ extern void shadow_l2_normal_pt_update(s
                                        unsigned long pa, l2_pgentry_t l2e,
                                        struct domain_mmap_cache *cache);
 #if CONFIG_PAGING_LEVELS >= 3
+#include <asm/page-guest32.h>
 extern void shadow_l3_normal_pt_update(struct domain *d,
                                        unsigned long pa, l3_pgentry_t l3e,
                                        struct domain_mmap_cache *cache);
 #endif
 #if CONFIG_PAGING_LEVELS >= 4
-#include <asm/page-guest32.h>
 extern void shadow_l4_normal_pt_update(struct domain *d,
                                        unsigned long pa, l4_pgentry_t l4e,
                                        struct domain_mmap_cache *cache);
@@ -631,82 +631,6 @@ static inline void shadow_sync_and_drop_
 }
 #endif
 
-#if CONFIG_PAGING_LEVELS == 3
-/* dummy functions, PAE has no shadow support yet */
-
-static inline void
-__shadow_get_l2e(
-    struct vcpu *v, unsigned long va, l2_pgentry_t *psl2e)
-{
-    BUG();
-}
-
-static inline void
-__shadow_set_l2e(
-    struct vcpu *v, unsigned long va, l2_pgentry_t value)
-{
-    BUG();
-}
-
-static inline void
-__guest_get_l2e(
-    struct vcpu *v, unsigned long va, l2_pgentry_t *pl2e)
-{
-    BUG();
-}
-
-static inline void
-__guest_set_l2e(
-    struct vcpu *v, unsigned long va, l2_pgentry_t value)
-{
-    BUG();
-}
-
-static inline void shadow_drop_references(
-    struct domain *d, struct pfn_info *page)
-{
-    if ( likely(!shadow_mode_refcounts(d)) ||
-         ((page->u.inuse.type_info & PGT_count_mask) == 0) )
-        return;
-    BUG();
-}
-
-static inline void shadow_sync_and_drop_references(
-    struct domain *d, struct pfn_info *page)
-{
-    if ( likely(!shadow_mode_refcounts(d)) )
-        return;
-    BUG();
-}
-
-static inline int l1pte_write_fault(
-    struct vcpu *v, l1_pgentry_t *gpte_p, l1_pgentry_t *spte_p,
-    unsigned long va)
-{
-    BUG();
-    return 42;
-}
-
-static inline int l1pte_read_fault(
-    struct domain *d, l1_pgentry_t *gpte_p, l1_pgentry_t *spte_p)
-{
-    BUG();
-    return 42;
-}
-
-void static inline
-shadow_set_l1e(unsigned long va, l1_pgentry_t new_spte, int create_l1_shadow)
-{
-    BUG();
-}
-
-static inline unsigned long gva_to_gpa(unsigned long gva)
-{
-    BUG();
-    return 42;
-}
-#endif
-    
 /************************************************************************/
 
 /*
Index: xen/arch/x86/vmx_platform.c
===================================================================
--- xen.orig/arch/x86/vmx_platform.c    2005-07-28 11:31:39.000000000 +0200
+++ xen/arch/x86/vmx_platform.c 2005-07-28 15:04:13.000000000 +0200
@@ -32,7 +32,7 @@
 #include <xen/lib.h>
 #include <xen/sched.h>
 #include <asm/current.h>
-#if CONFIG_PAGING_LEVELS >= 4
+#if CONFIG_PAGING_LEVELS >= 3
 #include <asm/shadow_64.h>
 #endif
 #ifdef CONFIG_VMX
Index: xen/arch/x86/Makefile
===================================================================
--- xen.orig/arch/x86/Makefile  2005-07-28 11:31:39.000000000 +0200
+++ xen/arch/x86/Makefile       2005-07-28 14:31:44.000000000 +0200
@@ -13,11 +13,18 @@ OBJS := $(subst cpu/centaur.o,,$(OBJS))
 OBJS := $(subst cpu/cyrix.o,,$(OBJS))
 OBJS := $(subst cpu/rise.o,,$(OBJS))
 OBJS := $(subst cpu/transmeta.o,,$(OBJS))
-OBJS := $(subst shadow32.o,,$(OBJS))
-else
-OBJS := $(subst shadow.o,,$(OBJS))
-OBJS := $(subst shadow_public.o,,$(OBJS))
-OBJS := $(subst shadow_xxx.o,,$(OBJS))
+endif
+
+OBJS := $(patsubst shadow%.o,,$(OBJS)) # drop all
+ifeq ($(TARGET_SUBARCH),x86_64) 
+ OBJS += shadow.o shadow_public.o      # x86_64: new code
+endif
+ifeq ($(TARGET_SUBARCH),x86_32) 
+ ifneq ($(pae),n)
+  OBJS += shadow.o shadow_public.o     # x86_32p: new code
+ else
+  OBJS += shadow32.o                   # x86_32: old code
+ endif
 endif
 
 OBJS := $(subst $(TARGET_SUBARCH)/asm-offsets.o,,$(OBJS))
Index: xen/arch/x86/shadow.c
===================================================================
--- xen.orig/arch/x86/shadow.c  2005-07-28 11:31:39.000000000 +0200
+++ xen/arch/x86/shadow.c       2005-07-28 15:06:59.000000000 +0200
@@ -41,7 +41,13 @@ extern void free_shadow_pages(struct dom
 static void mark_shadows_as_reflecting_snapshot(struct domain *d, unsigned 
long gpfn);
 #endif
 
-#if CONFIG_PAGING_LEVELS >= 4
+#if CONFIG_PAGING_LEVELS == 3
+#include <asm/shadow_64.h>
+static unsigned long shadow_l3_table(
+    struct domain *d, unsigned long gpfn, unsigned long gmfn);
+#endif
+
+#if CONFIG_PAGING_LEVELS == 4
 #include <asm/shadow_64.h>
 static unsigned long shadow_l4_table(
     struct domain *d, unsigned long gpfn, unsigned long gmfn);
@@ -1833,7 +1839,7 @@ static void shadow_update_pagetables(str
     unsigned long gpfn = __mfn_to_gpfn(d, gmfn);
     unsigned long smfn, old_smfn;
 
-#if defined (__i386__)
+#if CONFIG_PAGING_LEVELS == 2
     unsigned long hl2mfn;
 #endif
   
@@ -1890,7 +1896,7 @@ static void shadow_update_pagetables(str
         v->arch.shadow_vtable = map_domain_page(smfn);
     }
 
-#if defined (__i386__)
+#if CONFIG_PAGING_LEVELS == 2
     /*
      * arch.hl2_vtable
      */
@@ -1936,6 +1942,10 @@ static void shadow_update_pagetables(str
         local_flush_tlb();
     }
 #endif
+
+#if CONFIG_PAGING_LEVELS == 3
+    /* FIXME: PAE code to be written */
+#endif
 }
 
 struct shadow_ops MODE_A_HANDLER = {
@@ -2427,6 +2437,7 @@ static unsigned long shadow_l3_table(
   struct domain *d, unsigned long gpfn, unsigned long gmfn)
 {
     BUG();                      /* not implemenated yet */
+    return 42;
 }
 #endif
 
Index: xen/arch/x86/vmx.c
===================================================================
--- xen.orig/arch/x86/vmx.c     2005-07-28 15:03:18.000000000 +0200
+++ xen/arch/x86/vmx.c  2005-07-28 15:03:40.000000000 +0200
@@ -38,7 +38,7 @@
 #include <asm/vmx_vmcs.h>
 #include <asm/vmx_intercept.h>
 #include <asm/shadow.h>
-#if CONFIG_PAGING_LEVELS >= 4
+#if CONFIG_PAGING_LEVELS >= 3
 #include <asm/shadow_64.h>
 #endif
 

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

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