virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH dontapply 0/2] tools/virtio updates for API testing
@ 2013-02-24 22:18 Michael S. Tsirkin
  2013-02-24 22:19 ` [PATCH dontapply 1/2] tools/virtio: fix build for 3.8 Michael S. Tsirkin
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2013-02-24 22:18 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Paolo Bonzini, linux-kernel, virtualization

Here's a patchset to update tools/virtio with
changes in 3.8, as well as the proposed API extension.

Useful to see whether the extra level of indirection
adds measureable overhead.

I will upstream at least patch 1 soon.

Michael S. Tsirkin (2):
  tools/virtio: fix build for 3.8
  tools/virtio: update for the new virtio API

 drivers/vhost/test.c        |  4 +++-
 tools/virtio/Makefile       |  2 +-
 tools/virtio/linux/virtio.h | 52 ++++++++++++++++++++++++++++++++++++++-------
 tools/virtio/virtio_test.c  |  3 ++-
 4 files changed, 50 insertions(+), 11 deletions(-)

-- 
MST

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH dontapply 1/2] tools/virtio: fix build for 3.8
  2013-02-24 22:18 [PATCH dontapply 0/2] tools/virtio updates for API testing Michael S. Tsirkin
@ 2013-02-24 22:19 ` Michael S. Tsirkin
  2013-02-24 22:19 ` [PATCH dontapply 2/2] tools/virtio: update for the new virtio API Michael S. Tsirkin
  2013-03-08  0:29 ` [PATCH dontapply 0/2] tools/virtio updates for API testing Rusty Russell
  2 siblings, 0 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2013-02-24 22:19 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Paolo Bonzini, linux-kernel, virtualization

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 drivers/vhost/test.c        | 4 +++-
 tools/virtio/Makefile       | 2 +-
 tools/virtio/linux/virtio.h | 7 ++++++-
 tools/virtio/virtio_test.c  | 3 ++-
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c
index 91d6f06..329d302 100644
--- a/drivers/vhost/test.c
+++ b/drivers/vhost/test.c
@@ -275,7 +275,9 @@ static long vhost_test_ioctl(struct file *f, unsigned int ioctl,
 		return vhost_test_reset_owner(n);
 	default:
 		mutex_lock(&n->dev.mutex);
-		r = vhost_dev_ioctl(&n->dev, ioctl, arg);
+		r = vhost_dev_ioctl(&n->dev, ioctl, argp);
+                if (r == -ENOIOCTLCMD)
+                        r = vhost_vring_ioctl(&n->dev, ioctl, argp);
 		vhost_test_flush(n);
 		mutex_unlock(&n->dev.mutex);
 		return r;
diff --git a/tools/virtio/Makefile b/tools/virtio/Makefile
index d1d442e..b48c432 100644
--- a/tools/virtio/Makefile
+++ b/tools/virtio/Makefile
@@ -1,7 +1,7 @@
 all: test mod
 test: virtio_test
 virtio_test: virtio_ring.o virtio_test.o
-CFLAGS += -g -O2 -Wall -I. -I ../../usr/include/ -Wno-pointer-sign -fno-strict-overflow  -MMD
+CFLAGS += -g -O2 -Wall -I. -I ../../usr/include/ -Wno-pointer-sign -fno-strict-overflow -fno-strict-aliasing -fno-common -MMD
 vpath %.c ../../drivers/virtio
 mod:
 	${MAKE} -C `pwd`/../.. M=`pwd`/vhost_test
diff --git a/tools/virtio/linux/virtio.h b/tools/virtio/linux/virtio.h
index 81847dd..390c4cb 100644
--- a/tools/virtio/linux/virtio.h
+++ b/tools/virtio/linux/virtio.h
@@ -85,6 +85,8 @@ typedef __u16 u16;
 typedef enum {
 	GFP_KERNEL,
 	GFP_ATOMIC,
+	__GFP_HIGHMEM,
+	__GFP_HIGH
 } gfp_t;
 typedef enum {
 	IRQ_NONE,
@@ -163,6 +165,8 @@ struct virtqueue {
 	void (*callback)(struct virtqueue *vq);
 	const char *name;
 	struct virtio_device *vdev;
+        unsigned int index;
+        unsigned int num_free;
 	void *priv;
 };
 
@@ -206,7 +210,8 @@ bool virtqueue_enable_cb(struct virtqueue *vq);
 bool virtqueue_enable_cb_delayed(struct virtqueue *vq);
 
 void *virtqueue_detach_unused_buf(struct virtqueue *vq);
-struct virtqueue *vring_new_virtqueue(unsigned int num,
+struct virtqueue *vring_new_virtqueue(unsigned int index,
+				      unsigned int num,
 				      unsigned int vring_align,
 				      struct virtio_device *vdev,
 				      bool weak_barriers,
diff --git a/tools/virtio/virtio_test.c b/tools/virtio/virtio_test.c
index fcc9aa2..faf3f0c 100644
--- a/tools/virtio/virtio_test.c
+++ b/tools/virtio/virtio_test.c
@@ -92,7 +92,8 @@ static void vq_info_add(struct vdev_info *dev, int num)
 	assert(r >= 0);
 	memset(info->ring, 0, vring_size(num, 4096));
 	vring_init(&info->vring, num, info->ring, 4096);
-	info->vq = vring_new_virtqueue(info->vring.num, 4096, &dev->vdev,
+	info->vq = vring_new_virtqueue(info->idx,
+				       info->vring.num, 4096, &dev->vdev,
 				       true, info->ring,
 				       vq_notify, vq_callback, "test");
 	assert(info->vq);
-- 
MST

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH dontapply 2/2] tools/virtio: update for the new virtio API
  2013-02-24 22:18 [PATCH dontapply 0/2] tools/virtio updates for API testing Michael S. Tsirkin
  2013-02-24 22:19 ` [PATCH dontapply 1/2] tools/virtio: fix build for 3.8 Michael S. Tsirkin
@ 2013-02-24 22:19 ` Michael S. Tsirkin
  2013-03-08  0:29 ` [PATCH dontapply 0/2] tools/virtio updates for API testing Rusty Russell
  2 siblings, 0 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2013-02-24 22:19 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Paolo Bonzini, linux-kernel, virtualization

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 tools/virtio/linux/virtio.h | 45 ++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 38 insertions(+), 7 deletions(-)

diff --git a/tools/virtio/linux/virtio.h b/tools/virtio/linux/virtio.h
index 390c4cb..0426a75 100644
--- a/tools/virtio/linux/virtio.h
+++ b/tools/virtio/linux/virtio.h
@@ -11,6 +11,13 @@
 #include <linux/types.h>
 #include <errno.h>
 
+# ifndef likely
+#  define likely(x)	(__builtin_expect(!!(x), 1))
+# endif
+# ifndef unlikely
+#  define unlikely(x)	(__builtin_expect(!!(x), 0))
+# endif
+
 typedef unsigned long long dma_addr_t;
 
 struct scatterlist {
@@ -43,6 +50,10 @@ static inline void sg_mark_end(struct scatterlist *sg)
 	sg->page_link |= 0x02;
 	sg->page_link &= ~0x01;
 }
+static inline void sg_unmark_end(struct scatterlist *sg)
+{
+	sg->page_link &= ~0x02;
+}
 static inline void sg_init_table(struct scatterlist *sgl, unsigned int nents)
 {
 	memset(sgl, 0, sizeof(*sgl) * nents);
@@ -79,6 +90,26 @@ static inline void sg_init_one(struct scatterlist *sg, const void *buf, unsigned
 	sg_init_table(sg, 1);
 	sg_set_buf(sg, buf, buflen);
 }
+/*
+ * We overload the LSB of the page pointer to indicate whether it's
+ * a valid sg entry, or whether it points to the start of a new scatterlist.
+ * Those low bits are there for everyone! (thanks mason :-)
+ */
+#define sg_is_chain(sg)		((sg)->page_link & 0x01)
+#define sg_is_last(sg)		((sg)->page_link & 0x02)
+#define sg_chain_ptr(sg)	\
+	((struct scatterlist *) ((sg)->page_link & ~0x03))
+static inline struct scatterlist *sg_next(struct scatterlist *sg)
+{
+	if (sg_is_last(sg))
+		return NULL;
+
+	sg++;
+	if (unlikely(sg_is_chain(sg)))
+		sg = sg_chain_ptr(sg);
+
+	return sg;
+}
 
 typedef __u16 u16;
 
@@ -109,13 +140,6 @@ static inline void kfree(void *p)
 
 #define uninitialized_var(x) x = x
 
-# ifndef likely
-#  define likely(x)	(__builtin_expect(!!(x), 1))
-# endif
-# ifndef unlikely
-#  define unlikely(x)	(__builtin_expect(!!(x), 0))
-# endif
-
 #define pr_err(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
 #ifdef DEBUG
 #define pr_debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
@@ -200,6 +224,13 @@ int virtqueue_add_buf(struct virtqueue *vq,
 		      void *data,
 		      gfp_t gfp);
 
+int virtqueue_add_sgs(struct virtqueue *vq,
+		      struct scatterlist *sgs[],
+		      unsigned int out_sgs,
+		      unsigned int in_sgs,
+		      void *data,
+		      gfp_t gfp);
+
 void virtqueue_kick(struct virtqueue *vq);
 
 void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len);
-- 
MST

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH dontapply 0/2] tools/virtio updates for API testing
  2013-02-24 22:18 [PATCH dontapply 0/2] tools/virtio updates for API testing Michael S. Tsirkin
  2013-02-24 22:19 ` [PATCH dontapply 1/2] tools/virtio: fix build for 3.8 Michael S. Tsirkin
  2013-02-24 22:19 ` [PATCH dontapply 2/2] tools/virtio: update for the new virtio API Michael S. Tsirkin
@ 2013-03-08  0:29 ` Rusty Russell
  2 siblings, 0 replies; 4+ messages in thread
From: Rusty Russell @ 2013-03-08  0:29 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: Paolo Bonzini, linux-kernel, virtualization

"Michael S. Tsirkin" <mst@redhat.com> writes:
> Here's a patchset to update tools/virtio with
> changes in 3.8, as well as the proposed API extension.
>
> Useful to see whether the extra level of indirection
> adds measureable overhead.
>
> I will upstream at least patch 1 soon.

What happened to this, BTW?

> Michael S. Tsirkin (2):
>   tools/virtio: fix build for 3.8

Thanks,
Rusty.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-03-08  0:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-24 22:18 [PATCH dontapply 0/2] tools/virtio updates for API testing Michael S. Tsirkin
2013-02-24 22:19 ` [PATCH dontapply 1/2] tools/virtio: fix build for 3.8 Michael S. Tsirkin
2013-02-24 22:19 ` [PATCH dontapply 2/2] tools/virtio: update for the new virtio API Michael S. Tsirkin
2013-03-08  0:29 ` [PATCH dontapply 0/2] tools/virtio updates for API testing Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).