]> xenbits.xensource.com Git - xen.git/commitdiff
libxc: Variable-size gntdev support
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 18 Mar 2008 15:00:33 +0000 (15:00 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 18 Mar 2008 15:00:33 +0000 (15:00 +0000)
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>
tools/include/xen-sys/Linux/gntdev.h
tools/libxc/xc_linux.c
tools/libxc/xenctrl.h

index c95e46b6636e7938afb4b7eb8c08e822c577c781..8bd14678937220b48290b777493263207772cc59 100644 (file)
@@ -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__ */
index 32aaab819bc5e68fc4ca74096bed920d0456e221..b6f9b82a522ab2cd3779fabc2b8b3a91f6c975bc 100644 (file)
@@ -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
index b22497c01ed1f1cbebc7fb6676a7a1c04671a55b..8eb3f5ef6fa5f5930782251e092a8ddfed7fbdad 100644 (file)
@@ -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,