From: Samuel Thibault <samuel.thibault@eu.citrix.com>
To: Ian Jackson <Ian.Jackson@eu.citrix.com>
Cc: Derek Murray <Derek.Murray@cl.cam.ac.uk>, xen-devel@lists.xensource.com
Subject: [PATCH] Re: Who uses xc_gnttab_map_grant_refs?
Date: Mon, 21 Jul 2008 11:48:11 +0100 [thread overview]
Message-ID: <20080721104811.GO4501@implementation.uk.xensource.com> (raw)
In-Reply-To: <18560.44798.347872.311788@mariner.uk.xensource.com>
[-- Attachment #1: Type: text/plain, Size: 3519 bytes --]
Ian Jackson, le Fri 18 Jul 2008 15:55:58 +0100, a écrit :
> Samuel Thibault writes ("Re: [Xen-devel] Who uses xc_gnttab_map_grant_refs?"):
> > But still kill the old function at least?
>
> Is that a change we want to make at this stage of the release ? I
> don't necessarily have an opinion but it's a question we should be
> asking.
Ok, well, here is a patch that keeps the old function, just making its
implementation an internal with an additional domids_stride parameter in
order to also both efficiency.
Samuel
libxc: add xc_gnttab_map_domain_grant_refs.
xc_gnttab_map_domain_grant_refs permits to simply map several pages from
the same domain.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
diff -r 3139383b36a0 tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c Fri Jul 18 18:13:53 2008 +0100
+++ b/tools/libxc/xc_linux.c Mon Jul 21 11:44:43 2008 +0100
@@ -418,9 +418,10 @@
return addr;
}
-void *xc_gnttab_map_grant_refs(int xcg_handle,
+static void *do_gnttab_map_grant_refs(int xcg_handle,
uint32_t count,
uint32_t *domids,
+ int domids_stride,
uint32_t *refs,
int prot)
{
@@ -435,7 +436,7 @@
for ( i = 0; i < count; i++ )
{
- map->refs[i].domid = domids[i];
+ map->refs[i].domid = domids[i * domids_stride];
map->refs[i].ref = refs[i];
}
@@ -462,6 +463,24 @@
out:
free(map);
return addr;
+}
+
+void *xc_gnttab_map_grant_refs(int xcg_handle,
+ uint32_t count,
+ uint32_t *domids,
+ uint32_t *refs,
+ int prot)
+{
+ return do_gnttab_map_grant_refs(xcg_handle, count, domids, 1, refs, prot);
+}
+
+void *xc_gnttab_map_domain_grant_refs(int xcg_handle,
+ uint32_t count,
+ uint32_t domid,
+ uint32_t *refs,
+ int prot)
+{
+ return do_gnttab_map_grant_refs(xcg_handle, count, &domid, 0, refs, prot);
}
int xc_gnttab_munmap(int xcg_handle,
diff -r 3139383b36a0 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h Fri Jul 18 18:13:53 2008 +0100
+++ b/tools/libxc/xenctrl.h Mon Jul 21 11:44:43 2008 +0100
@@ -865,6 +865,23 @@
uint32_t *refs,
int prot);
+/**
+ * Memory maps one or more grant references from one domain to a
+ * contiguous local address range. Mappings should be unmapped with
+ * xc_gnttab_munmap. Returns NULL on failure.
+ *
+ * @parm xcg_handle a handle on an open grant table interface
+ * @parm count the number of grant references to be mapped
+ * @parm domid the domain to map memory from
+ * @parm refs an array of @count grant references to be mapped
+ * @parm prot same flag as in mmap()
+ */
+void *xc_gnttab_map_domain_grant_refs(int xcg_handle,
+ uint32_t count,
+ uint32_t domid,
+ uint32_t *refs,
+ int prot);
+
/*
* Unmaps the @count pages starting at @start_address, which were mapped by a
* call to xc_gnttab_map_grant_ref or xc_gnttab_map_grant_refs. Returns zero
[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 2697 bytes --]
diff -r 3139383b36a0 tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c Fri Jul 18 18:13:53 2008 +0100
+++ b/tools/libxc/xc_linux.c Mon Jul 21 11:44:43 2008 +0100
@@ -418,9 +418,10 @@
return addr;
}
-void *xc_gnttab_map_grant_refs(int xcg_handle,
+static void *do_gnttab_map_grant_refs(int xcg_handle,
uint32_t count,
uint32_t *domids,
+ int domids_stride,
uint32_t *refs,
int prot)
{
@@ -435,7 +436,7 @@
for ( i = 0; i < count; i++ )
{
- map->refs[i].domid = domids[i];
+ map->refs[i].domid = domids[i * domids_stride];
map->refs[i].ref = refs[i];
}
@@ -462,6 +463,24 @@
out:
free(map);
return addr;
+}
+
+void *xc_gnttab_map_grant_refs(int xcg_handle,
+ uint32_t count,
+ uint32_t *domids,
+ uint32_t *refs,
+ int prot)
+{
+ return do_gnttab_map_grant_refs(xcg_handle, count, domids, 1, refs, prot);
+}
+
+void *xc_gnttab_map_domain_grant_refs(int xcg_handle,
+ uint32_t count,
+ uint32_t domid,
+ uint32_t *refs,
+ int prot)
+{
+ return do_gnttab_map_grant_refs(xcg_handle, count, &domid, 0, refs, prot);
}
int xc_gnttab_munmap(int xcg_handle,
diff -r 3139383b36a0 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h Fri Jul 18 18:13:53 2008 +0100
+++ b/tools/libxc/xenctrl.h Mon Jul 21 11:44:43 2008 +0100
@@ -865,6 +865,23 @@
uint32_t *refs,
int prot);
+/**
+ * Memory maps one or more grant references from one domain to a
+ * contiguous local address range. Mappings should be unmapped with
+ * xc_gnttab_munmap. Returns NULL on failure.
+ *
+ * @parm xcg_handle a handle on an open grant table interface
+ * @parm count the number of grant references to be mapped
+ * @parm domid the domain to map memory from
+ * @parm refs an array of @count grant references to be mapped
+ * @parm prot same flag as in mmap()
+ */
+void *xc_gnttab_map_domain_grant_refs(int xcg_handle,
+ uint32_t count,
+ uint32_t domid,
+ uint32_t *refs,
+ int prot);
+
/*
* Unmaps the @count pages starting at @start_address, which were mapped by a
* call to xc_gnttab_map_grant_ref or xc_gnttab_map_grant_refs. Returns zero
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
prev parent reply other threads:[~2008-07-21 10:48 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-16 14:40 Who uses xc_gnttab_map_grant_refs? Samuel Thibault
2008-07-16 14:51 ` Derek Murray
2008-07-16 15:08 ` Samuel Thibault
2008-07-18 14:21 ` Ian Jackson
2008-07-18 14:47 ` Samuel Thibault
2008-07-18 14:55 ` Ian Jackson
2008-07-21 10:48 ` Samuel Thibault [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080721104811.GO4501@implementation.uk.xensource.com \
--to=samuel.thibault@eu.citrix.com \
--cc=Derek.Murray@cl.cam.ac.uk \
--cc=Ian.Jackson@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.