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] Interfaces to memshr domctls.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Interfaces to memshr domctls.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 16 Dec 2009 22:41:24 -0800
Delivery-date: Wed, 16 Dec 2009 22:45: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 1261031276 0
# Node ID c344350672987de3d27f6d0b8ca75e1ac3882e52
# Parent  180d46ac70d3b3572277dc2223d42cbd04dab632
Interfaces to memshr domctls.

Signed-off-by: Grzegorz Milos <Grzegorz.Milos@xxxxxxxxxx>
---
 tools/libxc/Makefile    |    1 
 tools/libxc/xc_domain.c |    1 
 tools/libxc/xc_memshr.c |  172 ++++++++++++++++++++++++++++++++++++++++++++++++
 tools/libxc/xenctrl.h   |   30 ++++++++
 4 files changed, 204 insertions(+)

diff -r 180d46ac70d3 -r c34435067298 tools/libxc/Makefile
--- a/tools/libxc/Makefile      Thu Dec 17 06:27:56 2009 +0000
+++ b/tools/libxc/Makefile      Thu Dec 17 06:27:56 2009 +0000
@@ -24,6 +24,7 @@ CTRL_SRCS-y       += xc_tmem.c
 CTRL_SRCS-y       += xc_tmem.c
 CTRL_SRCS-y       += xc_mem_event.c
 CTRL_SRCS-y       += xc_mem_paging.c
+CTRL_SRCS-y       += xc_memshr.c
 CTRL_SRCS-$(CONFIG_X86) += xc_pagetab.c
 CTRL_SRCS-$(CONFIG_Linux) += xc_linux.c
 CTRL_SRCS-$(CONFIG_SunOS) += xc_solaris.c
diff -r 180d46ac70d3 -r c34435067298 tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c   Thu Dec 17 06:27:56 2009 +0000
+++ b/tools/libxc/xc_domain.c   Thu Dec 17 06:27:56 2009 +0000
@@ -200,6 +200,7 @@ int xc_domain_getinfo(int xc_handle,
 
         info->ssidref  = domctl.u.getdomaininfo.ssidref;
         info->nr_pages = domctl.u.getdomaininfo.tot_pages;
+        info->nr_shared_pages = domctl.u.getdomaininfo.shr_pages;
         info->max_memkb = domctl.u.getdomaininfo.max_pages << (PAGE_SHIFT-10);
         info->shared_info_frame = domctl.u.getdomaininfo.shared_info_frame;
         info->cpu_time = domctl.u.getdomaininfo.cpu_time;
diff -r 180d46ac70d3 -r c34435067298 tools/libxc/xc_memshr.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxc/xc_memshr.c   Thu Dec 17 06:27:56 2009 +0000
@@ -0,0 +1,172 @@
+/******************************************************************************
+ *
+ * xc_memshr.c
+ *
+ * Interface to low-level memory sharing functionality.
+ *
+ * Copyright (c) 2009 Citrix (R&D) Inc. (Grzegorz Milos)
+ *
+ * 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 "xc_private.h"
+#include <xen/memory.h>
+#include <xen/grant_table.h>
+
+int xc_memshr_control(int xc_handle,
+                      uint32_t domid,
+                      int enable)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = (domid_t)domid;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_CONTROL;
+    op->enable = enable;
+
+    return do_domctl(xc_handle, &domctl);
+}
+
+int xc_memshr_nominate_gfn(int xc_handle,
+                           uint32_t domid,
+                           unsigned long gfn,
+                           uint64_t *handle)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+    int ret;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = (domid_t)domid;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_NOMINATE_GFN;
+    op->nominate.gfn = gfn;
+
+    ret = do_domctl(xc_handle, &domctl);
+    if(!ret) *handle = op->nominate.handle; 
+
+    return ret;
+}
+
+int xc_memshr_nominate_gref(int xc_handle,
+                            uint32_t domid,
+                            grant_ref_t gref,
+                            uint64_t *handle)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+    int ret;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = (domid_t)domid;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_NOMINATE_GREF;
+    op->nominate.grant_ref = gref;
+
+    ret = do_domctl(xc_handle, &domctl);
+    if(!ret) *handle = op->nominate.handle; 
+
+    return ret;
+}
+
+int xc_memshr_share(int xc_handle,
+                    uint64_t source_handle,
+                    uint64_t client_handle)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = 0;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_SHARE;
+    op->share.source_handle = source_handle;
+    op->share.client_handle = client_handle;
+
+    return do_domctl(xc_handle, &domctl);
+}
+
+int xc_memshr_domain_resume(int xc_handle,
+                            uint32_t domid)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = (domid_t)domid;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_RESUME;
+
+    return do_domctl(xc_handle, &domctl);
+}
+
+int xc_memshr_debug_gfn(int xc_handle,
+                        uint32_t domid,
+                        unsigned long gfn)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = (domid_t)domid;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_DEBUG_GFN;
+    op->debug.gfn = gfn;
+
+    return do_domctl(xc_handle, &domctl);
+}
+
+int xc_memshr_debug_mfn(int xc_handle,
+                        uint32_t domid,
+                        unsigned long mfn)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = (domid_t)domid;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_DEBUG_MFN;
+    op->debug.mfn = mfn;
+
+    return do_domctl(xc_handle, &domctl);
+}
+
+int xc_memshr_debug_gref(int xc_handle,
+                         uint32_t domid,
+                         grant_ref_t gref)
+{
+    DECLARE_DOMCTL;
+    struct xen_domctl_mem_sharing_op *op;
+
+    domctl.cmd = XEN_DOMCTL_mem_sharing_op;
+    domctl.interface_version = XEN_DOMCTL_INTERFACE_VERSION;
+    domctl.domain = (domid_t)domid;
+    op = &(domctl.u.mem_sharing_op);
+    op->op = XEN_DOMCTL_MEM_SHARING_OP_DEBUG_GREF;
+    op->debug.gref = gref;
+
+    return do_domctl(xc_handle, &domctl);
+}
+
diff -r 180d46ac70d3 -r c34435067298 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Thu Dec 17 06:27:56 2009 +0000
+++ b/tools/libxc/xenctrl.h     Thu Dec 17 06:27:56 2009 +0000
@@ -163,6 +163,7 @@ typedef struct xc_dominfo {
                   hvm:1, debugged:1;
     unsigned int  shutdown_reason; /* only meaningful if shutdown==1 */
     unsigned long nr_pages; /* current number, not maximum */
+    unsigned long nr_shared_pages;
     unsigned long shared_info_frame;
     uint64_t      cpu_time;
     unsigned long max_memkb;
@@ -1332,4 +1333,33 @@ int xc_mem_paging_resume(int xc_handle, 
 int xc_mem_paging_resume(int xc_handle, domid_t domain_id,
                          unsigned long gfn);
 
+/**
+ * memshr operations
+ */
+int xc_memshr_control(int xc_handle,
+                      uint32_t domid,
+                      int enable);
+int xc_memshr_nominate_gfn(int xc_handle,
+                           uint32_t domid,
+                           unsigned long gfn,
+                           uint64_t *handle);
+int xc_memshr_nominate_gref(int xc_handle,
+                            uint32_t domid,
+                            grant_ref_t gref,
+                            uint64_t *handle);
+int xc_memshr_share(int xc_handle,
+                    uint64_t source_handle,
+                    uint64_t client_handle);
+int xc_memshr_domain_resume(int xc_handle,
+                            uint32_t domid);
+int xc_memshr_debug_gfn(int xc_handle,
+                        uint32_t domid,
+                        unsigned long gfn);
+int xc_memshr_debug_mfn(int xc_handle,
+                        uint32_t domid,
+                        unsigned long mfn);
+int xc_memshr_debug_gref(int xc_handle,
+                         uint32_t domid,
+                         grant_ref_t gref);
+
 #endif /* XENCTRL_H */

_______________________________________________
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] Interfaces to memshr domctls., Xen patchbot-unstable <=