aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_gnttab.c
diff options
context:
space:
mode:
authorDaniel De Graaf <dgdegra@tycho.nsa.gov>2011-10-06 19:28:53 +0100
committerDaniel De Graaf <dgdegra@tycho.nsa.gov>2011-10-06 19:28:53 +0100
commit1f5552006de96f879ea0bcf342dcf4d9b3b06354 (patch)
treeea023d0ddf2f20b6590c98f49c83fa4fdb811064 /tools/libxc/xc_gnttab.c
parentb7ee8d2f432f726a1154d172016d3f2b22757fe3 (diff)
downloadxen-1f5552006de96f879ea0bcf342dcf4d9b3b06354.tar.gz
xen-1f5552006de96f879ea0bcf342dcf4d9b3b06354.tar.bz2
xen-1f5552006de96f879ea0bcf342dcf4d9b3b06354.zip
libxc: add xc_gnttab_map_grant_ref_notify
Normally, when a userspace process mapping a grant crashes, the domain providing the reference receives no indication that its peer has crashed, possibly leading to unexpected freezes or timeouts. This function provides a notification of the unmap by signalling an event channel and/or clearing a specific byte in the page. This also unifies the 3 very similar grant-mapping osdep interfaces into a single function instead of introducing yet another minor variation. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/libxc/xc_gnttab.c')
-rw-r--r--tools/libxc/xc_gnttab.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/tools/libxc/xc_gnttab.c b/tools/libxc/xc_gnttab.c
index 4f55fcef15..033cc5c0de 100644
--- a/tools/libxc/xc_gnttab.c
+++ b/tools/libxc/xc_gnttab.c
@@ -18,6 +18,7 @@
*/
#include "xc_private.h"
+#include <errno.h>
int xc_gnttab_op(xc_interface *xch, int cmd, void * op, int op_size, int count)
{
@@ -150,8 +151,8 @@ void *xc_gnttab_map_grant_ref(xc_gnttab *xcg,
uint32_t ref,
int prot)
{
- return xcg->ops->u.gnttab.map_grant_ref(xcg, xcg->ops_handle,
- domid, ref, prot);
+ return xcg->ops->u.gnttab.grant_map(xcg, xcg->ops_handle, 1, 0, prot,
+ &domid, &ref, -1, -1);
}
void *xc_gnttab_map_grant_refs(xc_gnttab *xcg,
@@ -160,8 +161,8 @@ void *xc_gnttab_map_grant_refs(xc_gnttab *xcg,
uint32_t *refs,
int prot)
{
- return xcg->ops->u.gnttab.map_grant_refs(xcg, xcg->ops_handle,
- count, domids, refs, prot);
+ return xcg->ops->u.gnttab.grant_map(xcg, xcg->ops_handle, count, 0,
+ prot, domids, refs, -1, -1);
}
void *xc_gnttab_map_domain_grant_refs(xc_gnttab *xcg,
@@ -170,10 +171,23 @@ void *xc_gnttab_map_domain_grant_refs(xc_gnttab *xcg,
uint32_t *refs,
int prot)
{
- return xcg->ops->u.gnttab.map_domain_grant_refs(xcg, xcg->ops_handle,
- count, domid, refs, prot);
+ return xcg->ops->u.gnttab.grant_map(xcg, xcg->ops_handle, count,
+ XC_GRANT_MAP_SINGLE_DOMAIN,
+ prot, &domid, refs, -1, -1);
}
+void *xc_gnttab_map_grant_ref_notify(xc_gnttab *xcg,
+ uint32_t domid,
+ uint32_t ref,
+ int prot,
+ uint32_t notify_offset,
+ evtchn_port_t notify_port)
+{
+ return xcg->ops->u.gnttab.grant_map(xcg, xcg->ops_handle, 1, 0, prot,
+ &domid, &ref, notify_offset, notify_port);
+}
+
+
int xc_gnttab_munmap(xc_gnttab *xcg,
void *start_address,
uint32_t count)