[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 5/8] virtio-blk: fix "disabled data plane" mode
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 5/8] virtio-blk: fix "disabled data plane" mode |
Date: |
Tue, 16 Feb 2016 16:45:24 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 |
On 15/02/2016 18:58, Cornelia Huck wrote:
> It seems a bit odd to me that ->started is the only state that is not
> inside the dataplane struct... this approach saves a function call for
> an accessor, though.
Actually, I can do better by moving the flag entirely within
hw/block/virtio-blk.c:
diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c
index cc521c1..29db94b 100644
--- a/hw/block/dataplane/virtio-blk.c
+++ b/hw/block/dataplane/virtio-blk.c
@@ -263,7 +263,7 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s)
VirtQueue *vq;
int r;
- if (vblk->dataplane_started || s->starting) {
+ if (s->starting) {
return;
}
@@ -295,7 +295,6 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s)
vblk->complete_request = complete_request_vring;
s->starting = false;
- vblk->dataplane_started = true;
trace_virtio_blk_data_plane_start(s);
blk_set_aio_context(s->conf->conf.blk, s->ctx);
@@ -317,7 +316,6 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s)
fail_vring:
s->disabled = true;
s->starting = false;
- vblk->dataplane_started = true;
}
/* Context: QEMU global mutex held */
@@ -327,14 +325,13 @@ void virtio_blk_data_plane_stop(VirtIOBlockDataPlane *s)
VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);
VirtIOBlock *vblk = VIRTIO_BLK(s->vdev);
- if (!vblk->dataplane_started || s->stopping) {
+ if (s->stopping) {
return;
}
/* Better luck next time. */
if (s->disabled) {
s->disabled = false;
- vblk->dataplane_started = false;
return;
}
s->stopping = true;
@@ -361,6 +358,5 @@ void virtio_blk_data_plane_stop(VirtIOBlockDataPlane *s)
/* Clean up guest notifier (irq) */
k->set_guest_notifiers(qbus->parent, 1, false);
- vblk->dataplane_started = false;
s->stopping = false;
}
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index e04c8f5..34bae8e 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -590,6 +590,7 @@ static void virtio_blk_handle_output(VirtIODevice *vdev,
VirtQueue *vq)
* dataplane here instead of waiting for .set_status().
*/
if (s->dataplane && !s->dataplane_started) {
+ s->dataplane_started = true;
virtio_blk_data_plane_start(s->dataplane);
return;
}
@@ -658,8 +659,9 @@ static void virtio_blk_reset(VirtIODevice *vdev)
aio_context_acquire(ctx);
blk_drain(s->blk);
- if (s->dataplane) {
+ if (s->dataplane && s->dataplane_started) {
virtio_blk_data_plane_stop(s->dataplane);
+ s->dataplane_started = false;
}
aio_context_release(ctx);
Does it look better?
Paolo
[Qemu-devel] [PATCH 2/8] vring: make vring_enable_notification return void, Paolo Bonzini, 2016/02/14
[Qemu-devel] [PATCH 3/8] virtio: add AioContext-specific function for host notifiers, Paolo Bonzini, 2016/02/14
[Qemu-devel] [PATCH 4/8] virtio: export vring_notify as virtio_should_notify, Paolo Bonzini, 2016/02/14