All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gerd Knorr <kraxel@suse.de>
To: xen-devel@lists.xensource.com
Subject: [patch] pae shadow preparation
Date: Thu, 28 Jul 2005 15:26:04 +0200	[thread overview]
Message-ID: <20050728132603.GA19938@bytesex> (raw)

  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

             reply	other threads:[~2005-07-28 13:26 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-28 13:26 Gerd Knorr [this message]
  -- strict thread matches above, loose matches on Subject: below --
2005-07-28 14:36 [patch] pae shadow preparation Nakajima, Jun
2005-07-28 14:53 Ian Pratt
2005-07-28 15:50 ` Gerd Knorr

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=20050728132603.GA19938@bytesex \
    --to=kraxel@suse.de \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.