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] [xen-unstable] x86: Move get_page/put_page out of header

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86: Move get_page/put_page out of header file, and only print on
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 04 Dec 2007 05:20:07 -0800
Delivery-date: Tue, 04 Dec 2007 05:20:20 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1196762170 0
# Node ID 8e3d42fdb8e784b947fbd998d9a6df0ebf771718
# Parent  3057f813da143f0dd6086129b5ce65a97c85e146
x86: Move get_page/put_page out of header file, and only print on
get_page() failure if the domain is not dying.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/mm.c        |   59 ++++++++++++++++++++++++++++++++++++++++++++---
 xen/include/asm-x86/mm.h |   54 +------------------------------------------
 2 files changed, 58 insertions(+), 55 deletions(-)

diff -r 3057f813da14 -r 8e3d42fdb8e7 xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Thu Nov 29 19:30:33 2007 +0000
+++ b/xen/arch/x86/mm.c Tue Dec 04 09:56:10 2007 +0000
@@ -1609,6 +1609,58 @@ static int mod_l4_entry(struct domain *d
 
 #endif
 
+void put_page(struct page_info *page)
+{
+    u32 nx, x, y = page->count_info;
+
+    do {
+        x  = y;
+        nx = x - 1;
+    }
+    while ( unlikely((y = cmpxchg(&page->count_info, x, nx)) != x) );
+
+    if ( unlikely((nx & PGC_count_mask) == 0) )
+    {
+        cleanup_page_cacheattr(page);
+        free_domheap_page(page);
+    }
+}
+
+
+int get_page(struct page_info *page, struct domain *domain)
+{
+    u32 x, nx, y = page->count_info;
+    u32 d, nd = page->u.inuse._domain;
+    u32 _domain = pickle_domptr(domain);
+
+    do {
+        x  = y;
+        nx = x + 1;
+        d  = nd;
+        if ( unlikely((x & PGC_count_mask) == 0) ||  /* Not allocated? */
+             unlikely((nx & PGC_count_mask) == 0) || /* Count overflow? */
+             unlikely(d != _domain) )                /* Wrong owner? */
+        {
+            if ( !_shadow_mode_refcounts(domain) && !domain->is_dying )
+                gdprintk(XENLOG_INFO,
+                         "Error pfn %lx: rd=%p, od=%p, caf=%08x, taf=%"
+                         PRtype_info "\n",
+                         page_to_mfn(page), domain, unpickle_domptr(d),
+                         x, page->u.inuse.type_info);
+            return 0;
+        }
+        asm volatile (
+            LOCK_PREFIX "cmpxchg8b %3"
+            : "=d" (nd), "=a" (y), "=c" (d),
+            "=m" (*(volatile u64 *)(&page->count_info))
+            : "0" (d), "1" (x), "c" (d), "b" (nx) );
+    }
+    while ( unlikely(nd != d) || unlikely(y != x) );
+
+    return 1;
+}
+
+
 static int alloc_page_type(struct page_info *page, unsigned long type)
 {
     struct domain *owner = page_get_owner(page);
@@ -2839,8 +2891,9 @@ int steal_page(
     y   = page->count_info;
     do {
         x = y;
-        if (unlikely((x & (PGC_count_mask|PGC_allocated)) !=
-                     (1 | PGC_allocated)) || unlikely(_nd != _d)) { 
+        if ( unlikely((x & (PGC_count_mask|PGC_allocated)) !=
+                      (1 | PGC_allocated)) || unlikely(_nd != _d) )
+        { 
             MEM_LOG("gnttab_transfer: Bad page %p: ed=%p(%u), sd=%p,"
                     " caf=%08x, taf=%" PRtype_info "\n", 
                     (void *) page_to_mfn(page),
@@ -2849,7 +2902,7 @@ int steal_page(
             spin_unlock(&d->page_alloc_lock);
             return -1;
         }
-        __asm__ __volatile__(
+        asm volatile (
             LOCK_PREFIX "cmpxchg8b %2"
             : "=d" (_nd), "=a" (y),
             "=m" (*(volatile u64 *)(&page->count_info))
diff -r 3057f813da14 -r 8e3d42fdb8e7 xen/include/asm-x86/mm.h
--- a/xen/include/asm-x86/mm.h  Thu Nov 29 19:30:33 2007 +0000
+++ b/xen/include/asm-x86/mm.h  Tue Dec 04 09:56:10 2007 +0000
@@ -149,60 +149,10 @@ int _shadow_mode_refcounts(struct domain
 
 void cleanup_page_cacheattr(struct page_info *page);
 
-static inline void put_page(struct page_info *page)
-{
-    u32 nx, x, y = page->count_info;
-
-    do {
-        x  = y;
-        nx = x - 1;
-    }
-    while ( unlikely((y = cmpxchg(&page->count_info, x, nx)) != x) );
-
-    if ( unlikely((nx & PGC_count_mask) == 0) )
-    {
-        cleanup_page_cacheattr(page);
-        free_domheap_page(page);
-    }
-}
-
-
-static inline int get_page(struct page_info *page,
-                           struct domain *domain)
-{
-    u32 x, nx, y = page->count_info;
-    u32 d, nd = page->u.inuse._domain;
-    u32 _domain = pickle_domptr(domain);
-
-    do {
-        x  = y;
-        nx = x + 1;
-        d  = nd;
-        if ( unlikely((x & PGC_count_mask) == 0) ||  /* Not allocated? */
-             unlikely((nx & PGC_count_mask) == 0) || /* Count overflow? */
-             unlikely(d != _domain) )                /* Wrong owner? */
-        {
-            if ( !_shadow_mode_refcounts(domain) )
-                gdprintk(XENLOG_INFO,
-                        "Error pfn %lx: rd=%p, od=%p, caf=%08x, taf=%"
-                        PRtype_info "\n",
-                        page_to_mfn(page), domain, unpickle_domptr(d),
-                        x, page->u.inuse.type_info);
-            return 0;
-        }
-        __asm__ __volatile__(
-            LOCK_PREFIX "cmpxchg8b %3"
-            : "=d" (nd), "=a" (y), "=c" (d),
-              "=m" (*(volatile u64 *)(&page->count_info))
-            : "0" (d), "1" (x), "c" (d), "b" (nx) );
-    }
-    while ( unlikely(nd != d) || unlikely(y != x) );
-
-    return 1;
-}
-
 int is_iomem_page(unsigned long mfn);
 
+void put_page(struct page_info *page);
+int  get_page(struct page_info *page, struct domain *domain);
 void put_page_type(struct page_info *page);
 int  get_page_type(struct page_info *page, unsigned long type);
 int  get_page_from_l1e(l1_pgentry_t l1e, struct domain *d);

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] x86: Move get_page/put_page out of header file, and only print on, Xen patchbot-unstable <=