From: Ross Philipson Date: Thu, 19 Nov 2009 15:45:19 +0000 (-0500) Subject: Added IOCTL to set the ring sizes in v2vdev. X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=a5cf88ce061caa45790e2976014959f13c5130e0;p=xenclient%2Flinux-2.6.27-pq.git Added IOCTL to set the ring sizes in v2vdev. --- diff --git a/master/series b/master/series index cadd92e..386d622 100644 --- a/master/series +++ b/master/series @@ -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 index 0000000..e9134d0 --- /dev/null +++ b/master/v2v-dev-ringsizes @@ -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; + }