• Rusty Russell's avatar
    virtio: expose added descriptors immediately. · ee7cd898
    Rusty Russell authored
    A virtio driver does virtqueue_add_buf() multiple times before finally
    calling virtqueue_kick(); previously we only exposed the added buffers
    in the virtqueue_kick() call.  This means we don't need a memory
    barrier in virtqueue_add_buf(), but it reduces concurrency as the
    device (ie. host) can't see the buffers until the kick.
    
    In the unusual (but now possible) case where a driver does add_buf()
    and get_buf() without doing a kick, we do need to insert one before
    our counter wraps.  Otherwise we could wrap num_added, and later on
    not realize that we have passed the marker where we should have
    kicked.
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    ee7cd898
virtio_ring.c 18.4 KB