This avoids an expensive memory barrier if the next descriptor is already there. The benefit is around 10%. Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> --- tools/virtio/ringtest/ring.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/virtio/ringtest/ring.c b/tools/virtio/ringtest/ring.c index c25c8d248b6b..e617e20538bf 100644 --- a/tools/virtio/ringtest/ring.c +++ b/tools/virtio/ringtest/ring.c @@ -182,6 +182,9 @@ bool enable_call() { unsigned head = (ring_size - 1) & guest.last_used_idx; + if (!(ring[head].flags & DESC_HW)) + return false; + event->call_index = guest.last_used_idx; /* Flush call index write */ /* Barrier D (for pairing) */ @@ -215,6 +218,9 @@ bool enable_kick() { unsigned head = (ring_size - 1) & host.used_idx; + if (ring[head].flags & DESC_HW) + return false; + event->kick_index = host.used_idx; /* Barrier C (for pairing) */ smp_mb(); -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html