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-devel

[Xen-devel] [PATCH 5 of 5] mem_access: libxc changes for mem access

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 5 of 5] mem_access: libxc changes for mem access
From: Joe Epstein <jepstein@xxxxxxxxxxxxxxxxxxxx>
Date: Tue, 28 Dec 2010 23:27:32 -0800
Delivery-date: Tue, 28 Dec 2010 23:34:48 -0800
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:sender:received:from:date :x-google-sender-auth:message-id:subject:to:content-type; bh=FBgXebU3ioVUBvYlHqy6fikjoGT3dPwrVletQeRN148=; b=HhzWQmXRRzHEg+rggPa0U3147vfGrogRXyvfV1ZR3D8DvHwgYYOzj/TdGvQCW+tkQp 3IRTCZeEzennP866OtqoORSp0lBoLXmwrccgAqaXXtQq2cHHy7EfXKzE846Vi475JrpW uMUVcL8ZImO9EtNxdfCyLl95DUE0aB2EgxZL0=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:from:date:x-google-sender-auth:message-id :subject:to:content-type; b=iFyaocLwSbE7AGufC1FHiSUrp8sx9MbLB0STownT7N3G5HcEOBaDHudqmTFRHKeDgR t+wyjjfydw0ptNiwDm6IWrbNjMlwGxU6Rwgk6CfVSFE9DbkRVc9KogIZPtCk7bnm4sTo OqM/1vB2zzXAhQ8ueN4Vs88agAw6Xa90B8Gq0=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
libxc changes to allow getting and setting the memory access permissions

Signed-off-by: Joe Epstein <jepstein98@xxxxxxxxx>

diff -r 4e108cf56d07 tools/libxc/Makefile
--- a/tools/libxc/Makefile      Mon Dec 27 08:00:09 2010 +0000
+++ b/tools/libxc/Makefile      Tue Dec 28 22:31:15 2010 -0800
@@ -28,6 +28,7 @@
 CTRL_SRCS-y       += xc_tmem.c
 CTRL_SRCS-y       += xc_mem_event.c
 CTRL_SRCS-y       += xc_mem_paging.c
+CTRL_SRCS-y       += xc_mem_access.c
 CTRL_SRCS-y       += xc_memshr.c
 CTRL_SRCS-y       += xc_hcall_buf.c
 CTRL_SRCS-y       += xc_foreign_memory.c
diff -r 4e108cf56d07 tools/libxc/xc_misc.c
--- a/tools/libxc/xc_misc.c     Mon Dec 27 08:00:09 2010 +0000
+++ b/tools/libxc/xc_misc.c     Tue Dec 28 22:31:15 2010 -0800
@@ -511,6 +511,66 @@
     return rc;
 }

+int xc_hvm_set_mem_access(
+    xc_interface *xch, domid_t dom, hvmmem_access_t mem_access,
uint64_t first_pfn, uint64_t nr)
+{
+    DECLARE_HYPERCALL;
+    DECLARE_HYPERCALL_BUFFER(struct xen_hvm_set_mem_access, arg);
+    int rc;
+
+    arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
+    if ( arg == NULL )
+    {
+        PERROR("Could not allocate memory for xc_hvm_set_mem_access
hypercall");
+        return -1;
+    }
+
+    arg->domid         = dom;
+    arg->hvmmem_access = mem_access;
+    arg->first_pfn     = first_pfn;
+    arg->nr            = nr;
+
+    hypercall.op     = __HYPERVISOR_hvm_op;
+    hypercall.arg[0] = HVMOP_set_mem_access;
+    hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(arg);
+
+    rc = do_xen_hypercall(xch, &hypercall);
+
+    xc_hypercall_buffer_free(xch, arg);
+
+    return rc;
+}
+
+int xc_hvm_get_mem_access(
+    xc_interface *xch, domid_t dom, uint64_t pfn, hvmmem_access_t* mem_access)
+{
+    DECLARE_HYPERCALL;
+    DECLARE_HYPERCALL_BUFFER(struct xen_hvm_get_mem_access, arg);
+    int rc;
+
+    arg = xc_hypercall_buffer_alloc(xch, arg, sizeof(*arg));
+    if ( arg == NULL )
+    {
+        PERROR("Could not allocate memory for xc_hvm_get_mem_access
hypercall");
+        return -1;
+    }
+
+    arg->domid       = dom;
+    arg->pfn         = pfn;
+
+    hypercall.op     = __HYPERVISOR_hvm_op;
+    hypercall.arg[0] = HVMOP_get_mem_access;
+    hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(arg);
+
+    rc = do_xen_hypercall(xch, &hypercall);
+
+    if ( !rc )
+        *mem_access = arg->hvmmem_access;
+
+    xc_hypercall_buffer_free(xch, arg);
+
+    return rc;
+}

 /*
  * Local variables:
diff -r 4e108cf56d07 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Mon Dec 27 08:00:09 2010 +0000
+++ b/tools/libxc/xenctrl.h     Tue Dec 28 22:31:15 2010 -0800
@@ -1398,6 +1398,20 @@
 int xc_hvm_set_mem_type(
     xc_interface *xch, domid_t dom, hvmmem_type_t memtype, uint64_t
first_pfn, uint64_t nr);

+/*
+ * Set a range of memory to a specific access.
+ * Allowed types are HVMMEM_access_default, HVMMEM_access_n, any
combination of
+ * HVM_access_ + (rwx), and HVM_access_rx2rw
+ */
+int xc_hvm_set_mem_access(
+    xc_interface *xch, domid_t dom, hvmmem_access_t memaccess,
uint64_t first_pfn, uint64_t nr);
+
+/*
+ * Gets the mem access for the given page (returned in memacess on success)
+ */
+int xc_hvm_get_mem_access(
+    xc_interface *xch, domid_t dom, uint64_t pfn, hvmmem_access_t* memaccess);
+

 /*
  *  LOGGING AND ERROR REPORTING
@@ -1704,6 +1718,8 @@
 int xc_mem_paging_prep(xc_interface *xch, domid_t domain_id, unsigned
long gfn);
 int xc_mem_paging_resume(xc_interface *xch, domid_t domain_id,
                          unsigned long gfn);
+int xc_mem_access_resume(xc_interface *xch, domid_t domain_id,
+                         unsigned long gfn);

 /**
  * memshr operations

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 5 of 5] mem_access: libxc changes for mem access, Joe Epstein <=