diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-03-18 15:00:33 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-03-18 15:00:33 +0000 |
commit | 86d8fe5e6a886883cbbf15fb8c5d7399fd50bba6 (patch) | |
tree | 4ed5324001904721d4d5e084cd17c7baad9f2572 /tools | |
parent | 0de39e40277b50f7bca390602216e19a809cc45c (diff) | |
download | xen-86d8fe5e6a886883cbbf15fb8c5d7399fd50bba6.tar.gz xen-86d8fe5e6a886883cbbf15fb8c5d7399fd50bba6.tar.bz2 xen-86d8fe5e6a886883cbbf15fb8c5d7399fd50bba6.zip |
libxc: Variable-size gntdev support
This patch adds the ability to set the number of slots that may be
used for mapping grant references, using the gntdev user-space grant
reference mapping driver.
Signed-off-by: Derek Murray <Derek.Murray@cl.cam.ac.uk>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/include/xen-sys/Linux/gntdev.h | 14 | ||||
-rw-r--r-- | tools/libxc/xc_linux.c | 15 | ||||
-rw-r--r-- | tools/libxc/xenctrl.h | 16 |
3 files changed, 43 insertions, 2 deletions
diff --git a/tools/include/xen-sys/Linux/gntdev.h b/tools/include/xen-sys/Linux/gntdev.h index c95e46b663..8bd1467893 100644 --- a/tools/include/xen-sys/Linux/gntdev.h +++ b/tools/include/xen-sys/Linux/gntdev.h @@ -102,4 +102,18 @@ struct ioctl_gntdev_get_offset_for_vaddr { uint32_t pad; }; +/* + * Sets the maximum number of grants that may mapped at once by this gntdev + * instance. + * + * N.B. This must be called before any other ioctl is performed on the device. + */ +#define IOCTL_GNTDEV_SET_MAX_GRANTS \ +_IOC(_IOC_NONE, 'G', 3, sizeof(struct ioctl_gntdev_set_max_grants)) +struct ioctl_gntdev_set_max_grants { + /* IN parameter */ + /* The maximum number of grants that may be mapped at once. */ + uint32_t count; +}; + #endif /* __LINUX_PUBLIC_GNTDEV_H__ */ diff --git a/tools/libxc/xc_linux.c b/tools/libxc/xc_linux.c index 32aaab819b..b6f9b82a52 100644 --- a/tools/libxc/xc_linux.c +++ b/tools/libxc/xc_linux.c @@ -4,7 +4,7 @@ * Use is subject to license terms. * * xc_gnttab functions: - * Copyright (c) 2007, D G Murray <Derek.Murray@cl.cam.ac.uk> + * Copyright (c) 2007-2008, D G Murray <Derek.Murray@cl.cam.ac.uk> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -505,6 +505,19 @@ int xc_gnttab_munmap(int xcg_handle, return 0; } +int xc_gnttab_set_max_grants(int xcg_handle, + uint32_t count) +{ + struct ioctl_gntdev_set_max_grants set_max; + int rc; + + set_max.count = count; + if ( (rc = ioctl(xcg_handle, IOCTL_GNTDEV_SET_MAX_GRANTS, &set_max)) ) + return rc; + + return 0; +} + /* * Local variables: * mode: C diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h index b22497c01e..8eb3f5ef6f 100644 --- a/tools/libxc/xenctrl.h +++ b/tools/libxc/xenctrl.h @@ -6,7 +6,7 @@ * Copyright (c) 2003-2004, K A Fraser. * * xc_gnttab functions: - * Copyright (c) 2007, D G Murray <Derek.Murray@cl.cam.ac.uk> + * Copyright (c) 2007-2008, D G Murray <Derek.Murray@cl.cam.ac.uk> */ #ifndef XENCTRL_H @@ -832,6 +832,20 @@ int xc_gnttab_munmap(int xcg_handle, void *start_address, uint32_t count); +/* + * Sets the maximum number of grants that may be mapped by the given instance + * to @count. + * + * N.B. This function must be called after opening the handle, and before any + * other functions are invoked on it. + * + * N.B. When variable-length grants are mapped, fragmentation may be observed, + * and it may not be possible to satisfy requests up to the maximum number + * of grants. + */ +int xc_gnttab_set_max_grants(int xcg_handle, + uint32_t count); + int xc_hvm_set_pci_intx_level( int xc_handle, domid_t dom, uint8_t domain, uint8_t bus, uint8_t device, uint8_t intx, |