diff -r 2a8eaba24bf0 tools/include/xen-sys/Linux/gntdev.h --- a/tools/include/xen-sys/Linux/gntdev.h Tue Feb 26 15:11:51 2008 +0000 +++ b/tools/include/xen-sys/Linux/gntdev.h Tue Mar 18 14:13:03 2008 +0000 @@ -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 -r 2a8eaba24bf0 tools/libxc/xc_linux.c --- a/tools/libxc/xc_linux.c Tue Feb 26 15:11:51 2008 +0000 +++ b/tools/libxc/xc_linux.c Tue Mar 18 14:13:03 2008 +0000 @@ -4,7 +4,7 @@ * Use is subject to license terms. * * xc_gnttab functions: - * Copyright (c) 2007, D G Murray + * Copyright (c) 2007-2008, D G Murray * * 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 -r 2a8eaba24bf0 tools/libxc/xenctrl.h --- a/tools/libxc/xenctrl.h Tue Feb 26 15:11:51 2008 +0000 +++ b/tools/libxc/xenctrl.h Tue Mar 18 14:13:03 2008 +0000 @@ -6,7 +6,7 @@ * Copyright (c) 2003-2004, K A Fraser. * * xc_gnttab functions: - * Copyright (c) 2007, D G Murray + * Copyright (c) 2007-2008, D G Murray */ #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,