]> xenbits.xen.org Git - xenclient/linux-2.6.27-pq.git/commitdiff
Added IOCTL to set the ring sizes in v2vdev.
authorRoss Philipson <ross.philipson@citrix.com>
Thu, 19 Nov 2009 15:45:19 +0000 (10:45 -0500)
committerRoss Philipson <ross.philipson@citrix.com>
Thu, 19 Nov 2009 15:45:19 +0000 (10:45 -0500)
master/series
master/v2v-dev-ringsizes [new file with mode: 0644]

index cadd92e56ffa1d6fe8764da858bb6583b714362b..386d622b316a758d3adaa6ef38fe2f3659fe0b26 100644 (file)
@@ -358,3 +358,4 @@ v2v-async
 v2v-accept-nonblock
 v2v-dev
 v2v-fix-disconnect
+v2v-dev-ringsizes
diff --git a/master/v2v-dev-ringsizes b/master/v2v-dev-ringsizes
new file mode 100644 (file)
index 0000000..e9134d0
--- /dev/null
@@ -0,0 +1,81 @@
+diff --git a/drivers/xen/v2v/v2vdev.c b/drivers/xen/v2v/v2vdev.c
+index 9a42523..ee50652 100644
+--- a/drivers/xen/v2v/v2vdev.c
++++ b/drivers/xen/v2v/v2vdev.c
+@@ -55,6 +55,7 @@
+ #define V2VLISTEN(len)          _IOC(_IOC_WRITE, 'V', 0x01, len)
+ #define V2VCONNECT(len)         _IOC(_IOC_WRITE, 'V', 0x02, len)
++#define V2VRING(len)            _IOC(_IOC_WRITE, 'V', 0x03, len)
+ #define L_READ 0
+ #define L_WRITE 1
+@@ -95,10 +96,13 @@ struct v2vdev
+   int recv_blocked;
+   int send_blocked;
++  unsigned prod_ring_page_order;
++  unsigned cons_ring_page_order;
+ };
+ /* Utils */
++#if 0 /* not used right now */
+ static void
+ hexdump (char *prefix, void *_d, int len)
+ {
+@@ -144,6 +148,7 @@ hexdump (char *prefix, void *_d, int len)
+       printk ("\n");
+     }
+ }
++#endif
+ /* buffer */
+@@ -672,7 +677,11 @@ v2vdev_listen (struct file *f, const char __user * user_path, size_t size)
+   path[size] = 0;
+-  err = v2v_listen (path, &c->channel, 0, 0, 0);
++  err = v2v_listen (path,
++                    &c->channel, 
++                    c->prod_ring_page_order,
++                    c->cons_ring_page_order,
++                    0);
+   if (err)
+     return err;
+@@ -723,6 +732,23 @@ v2vdev_connect (struct file *f, const char __user * user_path, size_t size)
+   return 0;
+ }
++static int
++v2vdev_rings (struct file *f, const char __user * ring_sizes, size_t size)
++{
++  struct v2vdev *c = f->private_data;
++  unsigned *p;
++
++  if (size < 2*sizeof(unsigned))
++    return -EINVAL;
++
++  p = (unsigned*)ring_sizes;
++
++  c->prod_ring_page_order = p[0];
++  c->cons_ring_page_order = p[1];
++  
++  return 0;
++}
++
+ static long
+ v2vdev_ioctl (struct file *f, unsigned int cmd, unsigned long arg)
+@@ -747,6 +773,9 @@ v2vdev_ioctl (struct file *f, unsigned int cmd, unsigned long arg)
+     case _IOC_NR (V2VCONNECT (0)):
+       rc = v2vdev_connect (f, p, len);
+       break;
++    case _IOC_NR (V2VRING (0)):
++      rc = v2vdev_rings (f, p, len);
++      break;
+     }
+   return rc;
+ }