From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 5/8] virtio-blk: fix "disabled data plane" mode
Date: Wed, 9 Mar 2016 13:21:24 +0100 [thread overview]
Message-ID: <56E01544.6060305@de.ibm.com> (raw)
In-Reply-To: <1455470231-5223-6-git-send-email-pbonzini@redhat.com>
On 02/14/2016 06:17 PM, Paolo Bonzini wrote:
> In disabled mode, virtio-blk dataplane seems to be enabled, but flow
> actually goes through the normal virtio path. This patch simplifies a bit
> the handling of disabled mode. In disabled mode, virtio_blk_handle_output
> might be called even if s->dataplane is not NULL.
>
> This is a bit tricky, because the current check for s->dataplane will
> always trigger, causing a continuous stream of calls to
> virtio_blk_data_plane_start. Unfortunately, these calls will not
> do anything. To fix this, set the "started" flag even in disabled
> mode, and skip virtio_blk_data_plane_start if the started flag is true.
> The resulting changes also prepare the code for the next patch, were
> virtio-blk dataplane will reuse the same virtio_blk_handle_output function
> as "regular" virtio-blk.
>
> Because struct VirtIOBlockDataPlane is opaque in virtio-blk.c, we have
> to move s->dataplane->started inside struct VirtIOBlock.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
I have some random crashes at startup
Stack trace of thread 48326:
#0 0x000002aa2e0cce46 bdrv_co_do_rw (qemu-system-s390x)
#1 0x000002aa2e159e8e coroutine_trampoline (qemu-system-s390x)
#2 0x000003ffbc35150a __makecontext_ret (libc.so.6)
that I was able to bisect.
commit 2906cddfecff21af20eedab43288b485a679f9ac does crash regularly,
2906cddfecff21af20eedab43288b485a679f9ac^ does not.
I will try to find somebody that looks into that - unless you have an idea.
Christian
> ---
> hw/block/dataplane/virtio-blk.c | 21 +++++++++------------
> hw/block/virtio-blk.c | 2 +-
> include/hw/virtio/virtio-blk.h | 1 +
> 3 files changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c
> index 03b81bc..cc521c1 100644
> --- a/hw/block/dataplane/virtio-blk.c
> +++ b/hw/block/dataplane/virtio-blk.c
> @@ -28,7 +28,6 @@
> #include "qom/object_interfaces.h"
>
> struct VirtIOBlockDataPlane {
> - bool started;
> bool starting;
> bool stopping;
> bool disabled;
> @@ -264,11 +263,7 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s)
> VirtQueue *vq;
> int r;
>
> - if (s->started || s->disabled) {
> - return;
> - }
> -
> - if (s->starting) {
> + if (vblk->dataplane_started || s->starting) {
> return;
> }
>
> @@ -300,7 +295,7 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s)
> vblk->complete_request = complete_request_vring;
>
> s->starting = false;
> - s->started = true;
> + vblk->dataplane_started = true;
> trace_virtio_blk_data_plane_start(s);
>
> blk_set_aio_context(s->conf->conf.blk, s->ctx);
> @@ -319,9 +314,10 @@ void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s)
> k->set_guest_notifiers(qbus->parent, 1, false);
> fail_guest_notifiers:
> vring_teardown(&s->vring, s->vdev, 0);
> - s->disabled = true;
> fail_vring:
> + s->disabled = true;
> s->starting = false;
> + vblk->dataplane_started = true;
> }
>
> /* Context: QEMU global mutex held */
> @@ -331,13 +327,14 @@ 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) {
> + return;
> + }
>
> /* Better luck next time. */
> if (s->disabled) {
> s->disabled = false;
> - return;
> - }
> - if (!s->started || s->stopping) {
> + vblk->dataplane_started = false;
> return;
> }
> s->stopping = true;
> @@ -364,6 +361,6 @@ void virtio_blk_data_plane_stop(VirtIOBlockDataPlane *s)
> /* Clean up guest notifier (irq) */
> k->set_guest_notifiers(qbus->parent, 1, false);
>
> - s->started = false;
> + vblk->dataplane_started = false;
> s->stopping = false;
> }
> diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> index c427698..e04c8f5 100644
> --- a/hw/block/virtio-blk.c
> +++ b/hw/block/virtio-blk.c
> @@ -589,7 +589,7 @@ static void virtio_blk_handle_output(VirtIODevice *vdev, VirtQueue *vq)
> /* Some guests kick before setting VIRTIO_CONFIG_S_DRIVER_OK so start
> * dataplane here instead of waiting for .set_status().
> */
> - if (s->dataplane) {
> + if (s->dataplane && !s->dataplane_started) {
> virtio_blk_data_plane_start(s->dataplane);
> return;
> }
> diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
> index 199bb0e..781969d 100644
> --- a/include/hw/virtio/virtio-blk.h
> +++ b/include/hw/virtio/virtio-blk.h
> @@ -56,6 +56,7 @@ typedef struct VirtIOBlock {
> /* Function to push to vq and notify guest */
> void (*complete_request)(struct VirtIOBlockReq *req, unsigned char status);
> Notifier migration_state_notifier;
> + bool dataplane_started;
> struct VirtIOBlockDataPlane *dataplane;
> } VirtIOBlock;
>
next prev parent reply other threads:[~2016-03-09 12:21 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-14 17:17 [Qemu-devel] [PATCH 0/8] virtio: allow migration with dataplane Paolo Bonzini
2016-02-14 17:17 ` [Qemu-devel] [PATCH 1/8] block-migration: acquire AioContext as necessary Paolo Bonzini
2016-02-16 7:17 ` Fam Zheng
2016-02-19 7:41 ` Michael S. Tsirkin
2016-02-19 15:02 ` Paolo Bonzini
2016-02-14 17:17 ` [Qemu-devel] [PATCH 2/8] vring: make vring_enable_notification return void Paolo Bonzini
2016-02-15 16:24 ` Cornelia Huck
2016-02-16 7:18 ` Fam Zheng
2016-02-14 17:17 ` [Qemu-devel] [PATCH 3/8] virtio: add AioContext-specific function for host notifiers Paolo Bonzini
2016-02-16 7:20 ` Fam Zheng
2016-02-16 9:42 ` Cornelia Huck
2016-02-14 17:17 ` [Qemu-devel] [PATCH 4/8] virtio: export vring_notify as virtio_should_notify Paolo Bonzini
2016-02-15 16:44 ` Cornelia Huck
2016-02-16 7:21 ` Fam Zheng
2016-02-14 17:17 ` [Qemu-devel] [PATCH 5/8] virtio-blk: fix "disabled data plane" mode Paolo Bonzini
2016-02-15 17:58 ` Cornelia Huck
2016-02-16 15:45 ` Paolo Bonzini
2016-02-16 16:15 ` Cornelia Huck
2016-02-16 16:29 ` Paolo Bonzini
2016-02-16 7:26 ` Fam Zheng
2016-03-09 12:21 ` Christian Borntraeger [this message]
2016-03-09 12:55 ` Paolo Bonzini
2016-03-09 13:02 ` Christian Borntraeger
2016-03-09 13:05 ` Christian Borntraeger
2016-03-09 13:12 ` Cornelia Huck
2016-03-09 14:29 ` Christian Borntraeger
2016-03-09 16:17 ` Paolo Bonzini
2016-03-10 1:51 ` Fam Zheng
2016-03-10 9:03 ` Christian Borntraeger
2016-03-10 9:40 ` Christian Borntraeger
2016-03-11 10:28 ` Paolo Bonzini
2016-03-14 9:18 ` tu bo
2016-03-15 12:45 ` Fam Zheng
2016-03-15 13:18 ` Cornelia Huck
2016-03-15 14:08 ` Paolo Bonzini
2016-03-15 23:34 ` Fam Zheng
2016-03-16 5:21 ` tu bo
2016-02-14 17:17 ` [Qemu-devel] [PATCH 6/8] virtio-blk: do not use vring in dataplane Paolo Bonzini
2016-02-16 8:15 ` Fam Zheng
2016-02-14 17:17 ` [Qemu-devel] [PATCH 7/8] virtio-scsi: " Paolo Bonzini
2016-02-16 8:28 ` Fam Zheng
2016-02-14 17:17 ` [Qemu-devel] [PATCH 8/8] vring: remove Paolo Bonzini
2016-02-16 8:32 ` Fam Zheng
2016-02-16 8:57 ` [Qemu-devel] [PATCH 0/8] virtio: allow migration with dataplane Christian Borntraeger
2016-02-16 16:25 ` Paolo Bonzini
2016-02-19 7:42 ` Michael S. Tsirkin
2016-02-19 14:59 ` Paolo Bonzini
2016-02-22 16:01 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56E01544.6060305@de.ibm.com \
--to=borntraeger@de.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.