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: Pickle domain in page_info into 32 b

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86: Pickle domain in page_info into 32 bits.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 28 Jan 2009 22:20:10 -0800
Delivery-date: Wed, 28 Jan 2009 22:36:41 -0800
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/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/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 1233164401 0
# Node ID 0858f961c77a4ef463d061a9f06e4f83ee95399f
# Parent  839bece33989c3cf2caf010b440c6aa26377aa1f
x86: Pickle domain in page_info into 32 bits.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/ia64/xen/domain.c |   10 ++++++++++
 xen/arch/x86/domain.c      |   19 +++++++++++++++++++
 xen/common/domain.c        |   10 ----------
 xen/include/asm-x86/mm.h   |    9 ++++++---
 xen/include/xen/domain.h   |    4 ++++
 5 files changed, 39 insertions(+), 13 deletions(-)

diff -r 839bece33989 -r 0858f961c77a xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Wed Jan 28 17:05:18 2009 +0000
+++ b/xen/arch/ia64/xen/domain.c        Wed Jan 28 17:40:01 2009 +0000
@@ -405,6 +405,16 @@ void relinquish_vcpu_resources(struct vc
        kill_timer(&v->arch.hlt_timer);
 }
 
+struct domain *alloc_domain_struct(void)
+{
+    return xmalloc(struct domain);
+}
+
+void free_domain_struct(struct domain *d)
+{
+    xfree(d);
+}
+
 struct vcpu *alloc_vcpu_struct(void)
 {
        struct page_info *page;
diff -r 839bece33989 -r 0858f961c77a xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Wed Jan 28 17:05:18 2009 +0000
+++ b/xen/arch/x86/domain.c     Wed Jan 28 17:40:01 2009 +0000
@@ -162,6 +162,25 @@ void dump_pageframe_info(struct domain *
     }
 }
 
+struct domain *alloc_domain_struct(void)
+{
+    struct domain *d;
+    /*
+     * We pack the MFN of the domain structure into a 32-bit field within
+     * the page_info structure. Hence the MEMF_bits() restriction.
+     */
+    d = alloc_xenheap_pages(
+        get_order_from_bytes(sizeof(*d)), MEMF_bits(32 + PAGE_SHIFT));
+    if ( d != NULL )
+        memset(d, 0, sizeof(*d));
+    return d;
+}
+
+void free_domain_struct(struct domain *d)
+{
+    free_xenheap_pages(d, get_order_from_bytes(sizeof(*d)));
+}
+
 struct vcpu *alloc_vcpu_struct(void)
 {
     struct vcpu *v;
diff -r 839bece33989 -r 0858f961c77a xen/common/domain.c
--- a/xen/common/domain.c       Wed Jan 28 17:05:18 2009 +0000
+++ b/xen/common/domain.c       Wed Jan 28 17:40:01 2009 +0000
@@ -102,16 +102,6 @@ int current_domain_id(void)
     return current->domain->domain_id;
 }
 
-static struct domain *alloc_domain_struct(void)
-{
-    return xmalloc(struct domain);
-}
-
-static void free_domain_struct(struct domain *d)
-{
-    xfree(d);
-}
-
 static void __domain_finalise_shutdown(struct domain *d)
 {
     struct vcpu *v;
diff -r 839bece33989 -r 0858f961c77a xen/include/asm-x86/mm.h
--- a/xen/include/asm-x86/mm.h  Wed Jan 28 17:05:18 2009 +0000
+++ b/xen/include/asm-x86/mm.h  Wed Jan 28 17:40:01 2009 +0000
@@ -31,7 +31,7 @@ struct page_info
         /* Page is in use: ((count_info & PGC_count_mask) != 0). */
         struct {
             /* Owner of this page (NULL if page is anonymous). */
-            unsigned long _domain; /* pickled format */
+            u32 _domain; /* pickled format */
             /* Type reference count and various PGT_xxx flags and fields. */
             unsigned long type_info;
         } inuse;
@@ -173,8 +173,11 @@ struct page_info
 /* OOS fixup entries */
 #define SHADOW_OOS_FIXUPS 2
 
-#define page_get_owner(_p)    ((struct domain *)(_p)->u.inuse._domain)
-#define page_set_owner(_p,_d) ((_p)->u.inuse._domain = (unsigned long)(_d))
+#define page_get_owner(_p)                                              \
+    ((struct domain *)((_p)->u.inuse._domain ?                          \
+                       mfn_to_virt((_p)->u.inuse._domain) : NULL))
+#define page_set_owner(_p,_d)                                           \
+    ((_p)->u.inuse._domain = (_d) ? virt_to_mfn(_d) : 0)
 
 #define maddr_get_owner(ma)   (page_get_owner(maddr_to_page((ma))))
 #define vaddr_get_owner(va)   (page_get_owner(virt_to_page((va))))
diff -r 839bece33989 -r 0858f961c77a xen/include/xen/domain.h
--- a/xen/include/xen/domain.h  Wed Jan 28 17:05:18 2009 +0000
+++ b/xen/include/xen/domain.h  Wed Jan 28 17:40:01 2009 +0000
@@ -22,6 +22,10 @@ void getdomaininfo(struct domain *d, str
 /*
  * Arch-specifics.
  */
+
+/* Allocate/free a domain structure. */
+struct domain *alloc_domain_struct(void);
+void free_domain_struct(struct domain *d);
 
 /* Allocate/free a VCPU structure. */
 struct vcpu *alloc_vcpu_struct(void);

_______________________________________________
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: Pickle domain in page_info into 32 bits., Xen patchbot-unstable <=