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] Give the map_dom_mem_cache a better name, and fix a bug

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Give the map_dom_mem_cache a better name, and fix a bug in
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Tue, 07 Jun 2005 08:59:04 +0000
Delivery-date: Tue, 07 Jun 2005 09:01:57 +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.1688, 2005/06/07 09:59:04+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Give the map_dom_mem_cache a better name, and fix a bug in
        unmap_domain_mem_with_cache() [it shouldn't actually unmap the page!].
        The bug was spotted by George Dunlap.
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 arch/x86/mm.c                        |   10 +++++-----
 arch/x86/shadow.c                    |   22 +++++++++++-----------
 include/asm-x86/shadow.h             |   12 ++++++------
 include/asm-x86/x86_32/domain_page.h |   19 ++++++++++++-------
 include/asm-x86/x86_64/domain_page.h |    6 +++---
 5 files changed, 37 insertions(+), 32 deletions(-)


diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c 2005-06-07 05:02:50 -04:00
+++ b/xen/arch/x86/mm.c 2005-06-07 05:02:50 -04:00
@@ -1940,7 +1940,7 @@
     struct vcpu *v = current;
     struct domain *d = v->domain;
     u32 type_info;
-    struct map_dom_mem_cache mapcache, sh_mapcache;
+    struct domain_mmap_cache mapcache, sh_mapcache;
 
     LOCK_BIGLOCK(d);
 
@@ -1956,8 +1956,8 @@
             (void)get_user(done, pdone);
     }
 
-    init_map_domain_mem_cache(&mapcache);
-    init_map_domain_mem_cache(&sh_mapcache);
+    domain_mmap_cache_init(&mapcache);
+    domain_mmap_cache_init(&sh_mapcache);
 
     if ( !set_foreigndom(cpu, foreigndom) )
     {
@@ -2169,8 +2169,8 @@
     }
 
  out:
-    destroy_map_domain_mem_cache(&mapcache);
-    destroy_map_domain_mem_cache(&sh_mapcache);
+    domain_mmap_cache_destroy(&mapcache);
+    domain_mmap_cache_destroy(&sh_mapcache);
 
     process_deferred_ops(cpu);
 
diff -Nru a/xen/arch/x86/shadow.c b/xen/arch/x86/shadow.c
--- a/xen/arch/x86/shadow.c     2005-06-07 05:02:51 -04:00
+++ b/xen/arch/x86/shadow.c     2005-06-07 05:02:51 -04:00
@@ -763,8 +763,8 @@
 
 int
 set_p2m_entry(struct domain *d, unsigned long pfn, unsigned long mfn,
-              struct map_dom_mem_cache *l2cache,
-              struct map_dom_mem_cache *l1cache)
+              struct domain_mmap_cache *l2cache,
+              struct domain_mmap_cache *l1cache)
 {
     unsigned long phystab = pagetable_get_paddr(d->arch.phys_table);
     l2_pgentry_t *l2, l2e;
@@ -808,14 +808,14 @@
     struct pfn_info *page, *l2page;
     l2_pgentry_t *l2;
     unsigned long mfn, pfn;
-    struct map_dom_mem_cache l1cache, l2cache;
+    struct domain_mmap_cache l1cache, l2cache;
 
     l2page = alloc_domheap_page(NULL);
     if ( l2page == NULL )
         return 0;
 
-    init_map_domain_mem_cache(&l1cache);
-    init_map_domain_mem_cache(&l2cache);
+    domain_mmap_cache_init(&l1cache);
+    domain_mmap_cache_init(&l2cache);
 
     d->arch.phys_table = mk_pagetable(page_to_phys(l2page));
     l2 = map_domain_mem_with_cache(page_to_phys(l2page), &l2cache);
@@ -851,8 +851,8 @@
         list_ent = page->list.next;
     }
 
-    destroy_map_domain_mem_cache(&l2cache);
-    destroy_map_domain_mem_cache(&l1cache);
+    domain_mmap_cache_destroy(&l2cache);
+    domain_mmap_cache_destroy(&l1cache);
 
     return 1;
 }
@@ -2682,7 +2682,7 @@
 void shadow_l1_normal_pt_update(
     struct domain *d,
     unsigned long pa, l1_pgentry_t gpte,
-    struct map_dom_mem_cache *cache)
+    struct domain_mmap_cache *cache)
 {
     unsigned long sl1mfn;    
     l1_pgentry_t *spl1e, spte;
@@ -2707,7 +2707,7 @@
 void shadow_l2_normal_pt_update(
     struct domain *d,
     unsigned long pa, l2_pgentry_t gpde,
-    struct map_dom_mem_cache *cache)
+    struct domain_mmap_cache *cache)
 {
     unsigned long sl2mfn;
     l2_pgentry_t *spl2e;
@@ -2732,7 +2732,7 @@
 void shadow_l3_normal_pt_update(
     struct domain *d,
     unsigned long pa, l3_pgentry_t gpde,
-    struct map_dom_mem_cache *cache)
+    struct domain_mmap_cache *cache)
 {
     BUG(); // not yet implemented
 }
@@ -2742,7 +2742,7 @@
 void shadow_l4_normal_pt_update(
     struct domain *d,
     unsigned long pa, l4_pgentry_t gpde,
-    struct map_dom_mem_cache *cache)
+    struct domain_mmap_cache *cache)
 {
     BUG(); // not yet implemented
 }
diff -Nru a/xen/include/asm-x86/shadow.h b/xen/include/asm-x86/shadow.h
--- a/xen/include/asm-x86/shadow.h      2005-06-07 05:02:50 -04:00
+++ b/xen/include/asm-x86/shadow.h      2005-06-07 05:02:50 -04:00
@@ -121,25 +121,25 @@
 extern int __shadow_out_of_sync(struct vcpu *v, unsigned long va);
 extern int set_p2m_entry(
     struct domain *d, unsigned long pfn, unsigned long mfn,
-    struct map_dom_mem_cache *l2cache,
-    struct map_dom_mem_cache *l1cache);
+    struct domain_mmap_cache *l2cache,
+    struct domain_mmap_cache *l1cache);
 extern void remove_shadow(struct domain *d, unsigned long gpfn, u32 stype);
 
 extern void shadow_l1_normal_pt_update(struct domain *d,
                                        unsigned long pa, l1_pgentry_t l1e,
-                                       struct map_dom_mem_cache *cache);
+                                       struct domain_mmap_cache *cache);
 extern void shadow_l2_normal_pt_update(struct domain *d,
                                        unsigned long pa, l2_pgentry_t l2e,
-                                       struct map_dom_mem_cache *cache);
+                                       struct domain_mmap_cache *cache);
 #if CONFIG_PAGING_LEVELS >= 3
 extern void shadow_l3_normal_pt_update(struct domain *d,
                                        unsigned long pa, l3_pgentry_t l3e,
-                                       struct map_dom_mem_cache *cache);
+                                       struct domain_mmap_cache *cache);
 #endif
 #if CONFIG_PAGING_LEVELS >= 4
 extern void shadow_l4_normal_pt_update(struct domain *d,
                                        unsigned long pa, l4_pgentry_t l4e,
-                                       struct map_dom_mem_cache *cache);
+                                       struct domain_mmap_cache *cache);
 #endif
 extern int shadow_do_update_va_mapping(unsigned long va,
                                        l1_pgentry_t val,
diff -Nru a/xen/include/asm-x86/x86_32/domain_page.h 
b/xen/include/asm-x86/x86_32/domain_page.h
--- a/xen/include/asm-x86/x86_32/domain_page.h  2005-06-07 05:02:50 -04:00
+++ b/xen/include/asm-x86/x86_32/domain_page.h  2005-06-07 05:02:50 -04:00
@@ -27,31 +27,36 @@
  */
 extern void unmap_domain_mem(void *va);
 
-struct map_dom_mem_cache {
+#define DMCACHE_ENTRY_VALID 1UL
+#define DMCACHE_ENTRY_HELD  2UL
+
+struct domain_mmap_cache {
     unsigned long pa;
     void *va;
 };
 
 static inline void
-init_map_domain_mem_cache(struct map_dom_mem_cache *cache)
+domain_mmap_cache_init(struct domain_mmap_cache *cache)
 {
     ASSERT(cache != NULL);
     cache->pa = 0;
 }
 
 static inline void *
-map_domain_mem_with_cache(unsigned long pa, struct map_dom_mem_cache *cache)
+map_domain_mem_with_cache(unsigned long pa, struct domain_mmap_cache *cache)
 {
     ASSERT(cache != NULL);
+    BUG_ON(cache->pa & DMCACHE_ENTRY_HELD);
 
     if ( likely(cache->pa) )
     {
+        cache->pa |= DMCACHE_ENTRY_HELD;
         if ( likely((pa & PAGE_MASK) == (cache->pa & PAGE_MASK)) )
             goto done;
         unmap_domain_mem(cache->va);
     }
 
-    cache->pa = (pa & PAGE_MASK) | 1;
+    cache->pa = (pa & PAGE_MASK) | DMCACHE_ENTRY_HELD | DMCACHE_ENTRY_VALID;
     cache->va = map_domain_mem(cache->pa);
 
  done:
@@ -60,14 +65,14 @@
 }
 
 static inline void
-unmap_domain_mem_with_cache(void *va, struct map_dom_mem_cache *cache)
+unmap_domain_mem_with_cache(void *va, struct domain_mmap_cache *cache)
 {
     ASSERT(cache != NULL);
-    unmap_domain_mem(va);
+    cache->pa &= ~DMCACHE_ENTRY_HELD;
 }
 
 static inline void
-destroy_map_domain_mem_cache(struct map_dom_mem_cache *cache)
+domain_mmap_cache_destroy(struct domain_mmap_cache *cache)
 {
     ASSERT(cache != NULL);
     if ( likely(cache->pa) )
diff -Nru a/xen/include/asm-x86/x86_64/domain_page.h 
b/xen/include/asm-x86/x86_64/domain_page.h
--- a/xen/include/asm-x86/x86_64/domain_page.h  2005-06-07 05:02:50 -04:00
+++ b/xen/include/asm-x86/x86_64/domain_page.h  2005-06-07 05:02:50 -04:00
@@ -10,12 +10,12 @@
 #define map_domain_mem(_pa)   phys_to_virt(_pa)
 #define unmap_domain_mem(_va) ((void)(_va))
 
-struct map_dom_mem_cache { 
+struct domain_mmap_cache { 
 };
 
-#define init_map_domain_mem_cache(_c)      ((void)(_c))
+#define domain_mmap_cache_init(_c)         ((void)(_c))
 #define map_domain_mem_with_cache(_p,_c)   (map_domain_mem(_p))
 #define unmap_domain_mem_with_cache(_v,_c) ((void)(_v))
-#define destroy_map_domain_mem_cache(_c)   ((void)(_c))
+#define domain_mmap_cache_destroy(_c)      ((void)(_c))
 
 #endif /* __ASM_DOMAIN_PAGE_H__ */

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Give the map_dom_mem_cache a better name, and fix a bug in, BitKeeper Bot <=