mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxc: implement gnttab.set_max_grants for Linux
Legacy (non-pvops) gntdev drivers may require this operation to be performed when the number of grants intended to be used simultaneously exceeds a certain driver specific default limit, and qemu's qdisk driver is an example of needing to do so. Signed-off-by: Jan Beulich <jbeulich@suse.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
688e95c3b3
commit
bc934837c2
1 file changed
+22
@@ -559,6 +559,27 @@ static int linux_gnttab_close(xc_gnttab *xcg, xc_osdep_handle h)
|
||||
return close(fd);
|
||||
}
|
||||
|
||||
static int linux_gnttab_set_max_grants(xc_gnttab *xch, xc_osdep_handle h,
|
||||
uint32_t count)
|
||||
{
|
||||
int fd = (int)h, rc;
|
||||
struct ioctl_gntdev_set_max_grants max_grants = { .count = count };
|
||||
|
||||
rc = ioctl(fd, IOCTL_GNTDEV_SET_MAX_GRANTS, &max_grants);
|
||||
if (rc) {
|
||||
/*
|
||||
* Newer (e.g. pv-ops) kernels don't implement this IOCTL,
|
||||
* so ignore the resulting specific failure.
|
||||
*/
|
||||
if (errno == ENOTTY)
|
||||
rc = 0;
|
||||
else
|
||||
PERROR("linux_gnttab_set_max_grants: ioctl SET_MAX_GRANTS failed");
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void *linux_gnttab_grant_map(xc_gnttab *xch, xc_osdep_handle h,
|
||||
uint32_t count, int flags, int prot,
|
||||
uint32_t *domids, uint32_t *refs,
|
||||
@@ -714,6 +735,7 @@ static struct xc_osdep_ops linux_gnttab_ops = {
|
||||
.close = &linux_gnttab_close,
|
||||
|
||||
.u.gnttab = {
|
||||
.set_max_grants = linux_gnttab_set_max_grants,
|
||||
.grant_map = &linux_gnttab_grant_map,
|
||||
.munmap = &linux_gnttab_munmap,
|
||||
},
|
||||
|
||||