Skip to content

Commit

Permalink
dataplane: sync virtio.c and vring.c virtqueue state
Browse files Browse the repository at this point in the history
Load the virtio.c state into vring.c when we start dataplane mode and
vice versa when stopping dataplane mode.  This patch makes it possible
to start and stop dataplane any time while the guest is running.

This will eventually allow us to go back to QEMU main loop for
bdrv_drain_all() and live migration.  In the meantime, this patch makes
the dataplane lifecycle more robust but should make no visible
difference.  It may be useful in the virtio-net dataplane effort.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
  • Loading branch information
stefanhaRH committed Jul 19, 2013
1 parent 0c14fb4 commit 9154b02
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 5 deletions.
2 changes: 1 addition & 1 deletion hw/block/dataplane/virtio-blk.c
Expand Up @@ -537,7 +537,7 @@ void virtio_blk_data_plane_stop(VirtIOBlockDataPlane *s)
/* Clean up guest notifier (irq) */
k->set_guest_notifiers(qbus->parent, 1, false);

vring_teardown(&s->vring);
vring_teardown(&s->vring, s->vdev, 0);
s->started = false;
s->stopping = false;
}
8 changes: 5 additions & 3 deletions hw/virtio/dataplane/vring.c
Expand Up @@ -39,8 +39,8 @@ bool vring_setup(Vring *vring, VirtIODevice *vdev, int n)

vring_init(&vring->vr, virtio_queue_get_num(vdev, n), vring_ptr, 4096);

vring->last_avail_idx = 0;
vring->last_used_idx = 0;
vring->last_avail_idx = virtio_queue_get_last_avail_idx(vdev, n);
vring->last_used_idx = vring->vr.used->idx;
vring->signalled_used = 0;
vring->signalled_used_valid = false;

Expand All @@ -49,8 +49,10 @@ bool vring_setup(Vring *vring, VirtIODevice *vdev, int n)
return true;
}

void vring_teardown(Vring *vring)
void vring_teardown(Vring *vring, VirtIODevice *vdev, int n)
{
virtio_queue_set_last_avail_idx(vdev, n, vring->last_avail_idx);

hostmem_finalize(&vring->hostmem);
}

Expand Down
2 changes: 1 addition & 1 deletion include/hw/virtio/dataplane/vring.h
Expand Up @@ -50,7 +50,7 @@ static inline void vring_set_broken(Vring *vring)
}

bool vring_setup(Vring *vring, VirtIODevice *vdev, int n);
void vring_teardown(Vring *vring);
void vring_teardown(Vring *vring, VirtIODevice *vdev, int n);
void vring_disable_notification(VirtIODevice *vdev, Vring *vring);
bool vring_enable_notification(VirtIODevice *vdev, Vring *vring);
bool vring_should_notify(VirtIODevice *vdev, Vring *vring);
Expand Down

0 comments on commit 9154b02

Please sign in to comment.