All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, sgarzare@redhat.com,
	kwolf@redhat.com,
	Emanuele Giuseppe Esposito <eesposit@redhat.com>,
	Fam Zheng <fam@euphon.net>, Qing Wang <qinwang@redhat.com>
Subject: Re: [PATCH 7.1] virtio-scsi: fix race in virtio_scsi_dataplane_start()
Date: Fri, 5 Aug 2022 03:03:13 -0400	[thread overview]
Message-ID: <20220805030248-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <YuwWe9Yh9uijB+xG@fedora>

On Thu, Aug 04, 2022 at 02:56:59PM -0400, Stefan Hajnoczi wrote:
> On Wed, Aug 03, 2022 at 12:28:24PM -0400, Stefan Hajnoczi wrote:
> > As soon as virtio_scsi_data_plane_start() attaches host notifiers the
> > IOThread may start virtqueue processing. There is a race between
> > IOThread virtqueue processing and virtio_scsi_data_plane_start() because
> > it only assigns s->dataplane_started after attaching host notifiers.
> > 
> > When a virtqueue handler function in the IOThread calls
> > virtio_scsi_defer_to_dataplane() it may see !s->dataplane_started and
> > attempt to start dataplane even though we're already in the IOThread:
> > 
> >   #0  0x00007f67b360857c __pthread_kill_implementation (libc.so.6 + 0xa257c)
> >   #1  0x00007f67b35bbd56 raise (libc.so.6 + 0x55d56)
> >   #2  0x00007f67b358e833 abort (libc.so.6 + 0x28833)
> >   #3  0x00007f67b358e75b __assert_fail_base.cold (libc.so.6 + 0x2875b)
> >   #4  0x00007f67b35b4cd6 __assert_fail (libc.so.6 + 0x4ecd6)
> >   #5  0x000055ca87fd411b memory_region_transaction_commit (qemu-kvm + 0x67511b)
> >   #6  0x000055ca87e17811 virtio_pci_ioeventfd_assign (qemu-kvm + 0x4b8811)
> >   #7  0x000055ca87e14836 virtio_bus_set_host_notifier (qemu-kvm + 0x4b5836)
> >   #8  0x000055ca87f8e14e virtio_scsi_set_host_notifier (qemu-kvm + 0x62f14e)
> >   #9  0x000055ca87f8dd62 virtio_scsi_dataplane_start (qemu-kvm + 0x62ed62)
> >   #10 0x000055ca87e14610 virtio_bus_start_ioeventfd (qemu-kvm + 0x4b5610)
> >   #11 0x000055ca87f8c29a virtio_scsi_handle_ctrl (qemu-kvm + 0x62d29a)
> >   #12 0x000055ca87fa5902 virtio_queue_host_notifier_read (qemu-kvm + 0x646902)
> >   #13 0x000055ca882c099e aio_dispatch_handler (qemu-kvm + 0x96199e)
> >   #14 0x000055ca882c1761 aio_poll (qemu-kvm + 0x962761)
> >   #15 0x000055ca880e1052 iothread_run (qemu-kvm + 0x782052)
> >   #16 0x000055ca882c562a qemu_thread_start (qemu-kvm + 0x96662a)
> > 
> > This patch assigns s->dataplane_started before attaching host notifiers
> > so that virtqueue handler functions that run in the IOThread before
> > virtio_scsi_data_plane_start() returns correctly identify that dataplane
> > does not need to be started.
> > 
> > Note that s->dataplane_started does not need the AioContext lock because
> > it is set before attaching host notifiers and cleared after detaching
> > host notifiers. In other words, the IOThread always sees the value true
> > and the main loop thread does not modify it while the IOThread is
> > active.
> > 
> > Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2099541
> > Reported-by: Qing Wang <qinwang@redhat.com>
> 
> Qing Wang has confirmed that this solves the assertion failures.
> 
> Paolo/Michael: Can this still be merged for QEMU 7.1?
> 
> Stefan

As a bugfix, for sure.

Can I have your ack?

-- 
MST



  reply	other threads:[~2022-08-05  7:10 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-03 16:28 [PATCH] virtio-scsi: fix race in virtio_scsi_dataplane_start() Stefan Hajnoczi
2022-08-04  7:48 ` Stefano Garzarella
2022-08-04 18:56 ` [PATCH 7.1] " Stefan Hajnoczi
2022-08-05  7:03   ` Michael S. Tsirkin [this message]
2022-08-05  7:04 ` [PATCH] " Michael S. Tsirkin
2022-08-05  9:41   ` Paolo Bonzini
2022-08-08 16:01     ` Stefan Hajnoczi
2022-08-05  8:31 ` Emanuele Giuseppe Esposito
2022-08-05  9:40 ` Paolo Bonzini
2022-08-05 10:49   ` 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=20220805030248-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=eesposit@redhat.com \
    --cc=fam@euphon.net \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qinwang@redhat.com \
    --cc=sgarzare@redhat.com \
    --cc=stefanha@redhat.com \
    /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.