All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Xueming(Steven) Li" <xuemingl@nvidia.com>
To: "mst@redhat.com" <mst@redhat.com>
Cc: "zhangyuwei.9149@bytedance.com" <zhangyuwei.9149@bytedance.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"qemu-stable@nongnu.org" <qemu-stable@nongnu.org>,
	"tiwei.bie@intel.com" <tiwei.bie@intel.com>
Subject: Re: [PATCH v2 1/2] vhost-user: fix VirtQ notifier cleanup
Date: Fri, 8 Oct 2021 08:00:03 +0000	[thread overview]
Message-ID: <90f5dc9ab8cbb1c70ede5e5a53d67f29816f9cb1.camel@nvidia.com> (raw)
In-Reply-To: <20211005103916-mutt-send-email-mst@kernel.org>

On Tue, 2021-10-05 at 10:40 -0400, Michael S. Tsirkin wrote:
> On Fri, Sep 17, 2021 at 08:26:15PM +0800, Xueming Li wrote:
> > When vhost-user device stop and unmmap notifier address, vCPU thread
> > that writing the notifier via old flatview failed with accessing invalid
> > address.
> > 
> > To avoid this concurrent issue, wait memory flatview update by draining
> > rcu callbacks before unmaping notifiers.
> > 
> > Fixes: 44866521bd6e ("vhost-user: support registering external host notifiers")
> > Cc: tiwei.bie@intel.com
> > Cc: qemu-stable@nongnu.org
> > Cc: Yuwei Zhang <zhangyuwei.9149@bytedance.com>
> > Signed-off-by: Xueming Li <xuemingl@nvidia.com>
> 
> 
> Pls post v2 as a new thread, with changelog in the cover letter.

Thanks, v3 posted with below coding style and comment fixes.

> 
> > ---
> >  hw/virtio/vhost-user.c | 20 +++++++++++++-------
> >  1 file changed, 13 insertions(+), 7 deletions(-)
> > 
> > diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> > index 2c8556237f..08581e6711 100644
> > --- a/hw/virtio/vhost-user.c
> > +++ b/hw/virtio/vhost-user.c
> > @@ -1165,6 +1165,11 @@ static void vhost_user_host_notifier_remove(struct vhost_dev *dev,
> >  
> >      if (n->addr && n->set) {
> >          virtio_queue_set_host_notifier_mr(vdev, queue_idx, &n->mr, false);
> > +        if (!qemu_in_vcpu_thread())
> > +            /* Wait vCPU threads accessing notifier via old flatview. */
> 
> Wait VM - Wait for VM
> 
> > +            drain_call_rcu();
> 
> okay.
> but this has a coding style violation:
> should use {} in if.
> 
> 
> > +        munmap(n->addr, qemu_real_host_page_size);
> > +        n->addr = NULL;
> >          n->set = false;
> >      }
> >  }
> > @@ -1502,12 +1507,7 @@ static int vhost_user_slave_handle_vring_host_notifier(struct vhost_dev *dev,
> >  
> >      n = &user->notifier[queue_idx];
> >  
> > -    if (n->addr) {
> > -        virtio_queue_set_host_notifier_mr(vdev, queue_idx, &n->mr, false);
> > -        object_unparent(OBJECT(&n->mr));
> > -        munmap(n->addr, page_size);
> > -        n->addr = NULL;
> > -    }
> > +    vhost_user_host_notifier_remove(dev, queue_idx);
> >  
> >      if (area->u64 & VHOST_USER_VRING_NOFD_MASK) {
> >          return 0;
> > @@ -2484,11 +2484,17 @@ void vhost_user_cleanup(VhostUserState *user)
> >      for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
> >          if (user->notifier[i].addr) {
> >              object_unparent(OBJECT(&user->notifier[i].mr));
> > +        }
> > +    }
> > +    memory_region_transaction_commit();
> > +    /* Wait VM threads accessing old flatview which contains notifier. */
> 
> Wait VM - Wait for VM
> 
> > +    drain_call_rcu();
> > +    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
> > +        if (user->notifier[i].addr) {
> >              munmap(user->notifier[i].addr, qemu_real_host_page_size);
> >              user->notifier[i].addr = NULL;
> >          }
> >      }
> > -    memory_region_transaction_commit();
> >      user->chr = NULL;
> >  }
> >  
> > -- 
> > 2.33.0
> 


  reply	other threads:[~2021-10-08  8:04 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-12 16:20 [PATCH 0/2] Improve vhost-user VQ notifier unmap Xueming Li
2021-09-12 16:20 ` [PATCH 1/2] vhost-user: fix VirtQ notifier cleanup Xueming Li
2021-09-14  8:42   ` Xueming(Steven) Li
2021-09-12 16:20 ` [PATCH 2/2] vhost-user: remove VirtQ notifier restore Xueming Li
2021-09-17 12:26 ` [PATCH v2 0/2] Improve vhost-user VQ notifier unmap Xueming Li
2021-09-17 12:26   ` [PATCH v2 1/2] vhost-user: fix VirtQ notifier cleanup Xueming Li
2021-10-05 14:40     ` Michael S. Tsirkin
2021-10-08  8:00       ` Xueming(Steven) Li [this message]
2021-09-17 12:26   ` [PATCH v2 2/2] vhost-user: remove VirtQ notifier restore Xueming Li

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=90f5dc9ab8cbb1c70ede5e5a53d67f29816f9cb1.camel@nvidia.com \
    --to=xuemingl@nvidia.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    --cc=tiwei.bie@intel.com \
    --cc=zhangyuwei.9149@bytedance.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.