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

[Xen-changelog] [xen-unstable] Memory paging domctl support, which is a sub-operation of the generic memory



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1261031275 0
# Node ID 9e67c0a752006cd169a67f9c7f5fdc3eac5194f4
# Parent  33d97bf8a376046feb5941698be997a958b64f79
Memory paging domctl support, which is a sub-operation of the generic memory
event domctl support.

Signed-off-by: Patrick Colp <Patrick.Colp@xxxxxxxxxx>
---
 xen/arch/x86/mm/Makefile         |    1 
 xen/arch/x86/mm/mem_event.c      |    6 ++
 xen/arch/x86/mm/mem_paging.c     |   79 +++++++++++++++++++++++++++++++++++++++
 xen/include/asm-x86/mem_paging.h |   35 +++++++++++++++++
 xen/include/public/domctl.h      |   12 +++++
 5 files changed, 133 insertions(+)

diff -r 33d97bf8a376 -r 9e67c0a75200 xen/arch/x86/mm/Makefile
--- a/xen/arch/x86/mm/Makefile  Thu Dec 17 06:27:55 2009 +0000
+++ b/xen/arch/x86/mm/Makefile  Thu Dec 17 06:27:55 2009 +0000
@@ -7,6 +7,7 @@ obj-y += guest_walk_3.o
 obj-y += guest_walk_3.o
 obj-$(x86_64) += guest_walk_4.o
 obj-y += mem_event.o
+obj-y += mem_paging.o
 
 guest_walk_%.o: guest_walk.c Makefile
        $(CC) $(CFLAGS) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
diff -r 33d97bf8a376 -r 9e67c0a75200 xen/arch/x86/mm/mem_event.c
--- a/xen/arch/x86/mm/mem_event.c       Thu Dec 17 06:27:55 2009 +0000
+++ b/xen/arch/x86/mm/mem_event.c       Thu Dec 17 06:27:55 2009 +0000
@@ -24,6 +24,7 @@
 #include <xen/event.h>
 #include <asm/p2m.h>
 #include <asm/mem_event.h>
+#include <asm/mem_paging.h>
 
 
 #define xen_mb()   mb()
@@ -274,7 +275,12 @@ int mem_event_domctl(struct domain *d, x
         }
     }
     else
+    {
         rc = -ENOSYS;
+
+        if ( mec->mode & XEN_DOMCTL_MEM_EVENT_OP_PAGING )
+            rc = mem_paging_domctl(d, mec, u_domctl);
+    }
 
     return rc;
 }
diff -r 33d97bf8a376 -r 9e67c0a75200 xen/arch/x86/mm/mem_paging.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/x86/mm/mem_paging.c      Thu Dec 17 06:27:55 2009 +0000
@@ -0,0 +1,79 @@
+/******************************************************************************
+ * arch/x86/mm/mem_paging.c
+ *
+ * Memory paging support.
+ *
+ * Copyright (c) 2009 Citrix (R)&D) Ltd. (Patrick Colp)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include <asm/p2m.h>
+#include <asm/mem_event.h>
+
+
+int mem_paging_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec,
+                      XEN_GUEST_HANDLE(void) u_domctl)
+{
+    int rc;
+
+    switch( mec->op )
+    {
+    case XEN_DOMCTL_MEM_EVENT_OP_PAGING_NOMINATE:
+    {
+        unsigned long gfn = mec->gfn;
+        rc = p2m_mem_paging_nominate(d, gfn);
+    }
+    break;
+
+    case XEN_DOMCTL_MEM_EVENT_OP_PAGING_EVICT:
+    {
+        unsigned long gfn = mec->gfn;
+        rc = p2m_mem_paging_evict(d, gfn);
+    }
+    break;
+
+    case XEN_DOMCTL_MEM_EVENT_OP_PAGING_PREP:
+    {
+        unsigned long gfn = mec->gfn;
+        rc = p2m_mem_paging_prep(d, gfn);
+    }
+    break;
+
+    case XEN_DOMCTL_MEM_EVENT_OP_PAGING_RESUME:
+    {
+        p2m_mem_paging_resume(d);
+        rc = 0;
+    }
+    break;
+
+    default:
+        rc = -ENOSYS;
+        break;
+    }
+
+    return rc;
+}
+
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff -r 33d97bf8a376 -r 9e67c0a75200 xen/include/asm-x86/mem_paging.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-x86/mem_paging.h  Thu Dec 17 06:27:55 2009 +0000
@@ -0,0 +1,35 @@
+/******************************************************************************
+ * include/asm-x86/mem_paging.h
+ *
+ * Memory paging support.
+ *
+ * Copyright (c) 2009 Citrix (R)&D) Ltd. (Patrick Colp)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+int mem_paging_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec,
+                      XEN_GUEST_HANDLE(void) u_domctl);
+
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff -r 33d97bf8a376 -r 9e67c0a75200 xen/include/public/domctl.h
--- a/xen/include/public/domctl.h       Thu Dec 17 06:27:55 2009 +0000
+++ b/xen/include/public/domctl.h       Thu Dec 17 06:27:55 2009 +0000
@@ -140,6 +140,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_getme
 #define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28)
 #define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31)
 #define XEN_DOMCTL_PFINFO_XTAB    (0xfU<<28) /* invalid page */
+#define XEN_DOMCTL_PFINFO_PAGEDTAB (0x8U<<28)
 #define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28)
 
 struct xen_domctl_getpageframeinfo {
@@ -700,6 +701,17 @@ struct xen_domctl_gdbsx_domstatus {
 /* Add and remove memory handlers */
 #define XEN_DOMCTL_MEM_EVENT_OP_ENABLE     0
 #define XEN_DOMCTL_MEM_EVENT_OP_DISABLE    1
+
+/*
+ * Page memory in and out. 
+ */
+#define XEN_DOMCTL_MEM_EVENT_OP_PAGING (1 << 0)
+
+/* Domain memory paging */
+#define XEN_DOMCTL_MEM_EVENT_OP_PAGING_NOMINATE   0
+#define XEN_DOMCTL_MEM_EVENT_OP_PAGING_EVICT      1
+#define XEN_DOMCTL_MEM_EVENT_OP_PAGING_PREP       2
+#define XEN_DOMCTL_MEM_EVENT_OP_PAGING_RESUME     3
 
 struct xen_domctl_mem_event_op {
     uint32_t       op;           /* XEN_DOMCTL_MEM_EVENT_OP_* */

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


 


Rackspace

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