Thread (51 messages) flat view 51 messages, 5 authors, 2011-05-20

Re: [PATCH 09/18] virtio: use avail_event index

From: Michael S. Tsirkin <hidden>
Date: 2011-05-17 06:10:50
Also in: kvm, lkml

On Mon, May 16, 2011 at 04:42:21PM +0930, Rusty Russell wrote:
On Sun, 15 May 2011 16:55:41 +0300, "Michael S. Tsirkin" [off-list ref] wrote:
quoted
On Mon, May 09, 2011 at 02:03:26PM +0930, Rusty Russell wrote:
quoted
On Wed, 4 May 2011 23:51:47 +0300, "Michael S. Tsirkin" [off-list ref] wrote:
quoted
Use the new avail_event feature to reduce the number
of exits from the guest.
Figures here would be nice :)
You mean ASCII art in comments?
I mean benchmarks of some kind.
:)
quoted
quoted
quoted
@@ -228,6 +237,12 @@ add_head:
 	 * new available array entries. */
 	virtio_wmb();
 	vq->vring.avail->idx++;
+	/* If the driver never bothers to kick in a very long while,
+	 * avail index might wrap around. If that happens, invalidate
+	 * kicked_avail index we stored. TODO: make sure all drivers
+	 * kick at least once in 2^16 and remove this. */
+	if (unlikely(vq->vring.avail->idx == vq->kicked_avail))
+		vq->kicked_avail_valid = true;
If they don't, they're already buggy.  Simply do:
        WARN_ON(vq->vring.avail->idx == vq->kicked_avail);
Hmm, but does it say that somewhere?
AFAICT it's a corollary of:
1) You have a finite ring of size <= 2^16.
2) You need to kick the other side once you've done some work.
Well one can imagine a driver doing:

	while (virtqueue_get_buf()) {
		virtqueue_add_buf()
	}
	virtqueue_kick()

which looks sensible (batch kicks) but might
process any number of bufs between kicks.

If we look at drivers closely enough, I think none
of them do the equivalent of the above, but not 100% sure.

quoted
quoted
quoted
@@ -482,6 +517,8 @@ void vring_transport_features(struct virtio_device *vdev)
 			break;
 		case VIRTIO_RING_F_USED_EVENT_IDX:
 			break;
+		case VIRTIO_RING_F_AVAIL_EVENT_IDX:
+			break;
 		default:
 			/* We don't understand this bit. */
 			clear_bit(i, vdev->features);
Does this belong in a prior patch?

Thanks,
Rusty.
Well if we don't support the feature in the ring we should not
ack the feature, right?
Ah, you're right.

Thanks,
Rusty.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help