[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] [patch] pae shadow preparation


  • To: "Gerd Knorr" <kraxel@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: "Nakajima, Jun" <jun.nakajima@xxxxxxxxx>
  • Date: Thu, 28 Jul 2005 07:36:57 -0700
  • Delivery-date: Thu, 28 Jul 2005 14:35:29 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AcWTeIHWbj8aKMDGTs+gC0xwxE029wABKH/w
  • Thread-topic: [Xen-devel] [patch] pae shadow preparation

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

Looks good to me.

Jun
---
Intel Open Source Technology Center

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




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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.