From: Stefan Hajnoczi <stefanha@redhat.com>
To: Eugenio Perez Martin <eperezma@redhat.com>
Cc: kvm list <kvm@vger.kernel.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
qemu-level <qemu-devel@nongnu.org>,
Daniel Daly <dandaly0@gmail.com>,
virtualization@lists.linux-foundation.org,
Liran Alon <liralon@gmail.com>, Eli Cohen <eli@mellanox.com>,
Nitin Shrivastav <nitin.shrivastav@broadcom.com>,
Alex Barba <alex.barba@broadcom.com>,
Christophe Fontaine <cfontain@redhat.com>,
Lee Ballard <ballle98@gmail.com>,
Lars Ganrot <lars.ganrot@gmail.com>,
Rob Miller <rob.miller@broadcom.com>,
Howard Cai <howard.cai@gmail.com>,
Parav Pandit <parav@mellanox.com>, vm <vmireyno@marvell.com>,
Salil Mehta <mehta.salil.lnk@gmail.com>,
Stephen Finucane <stephenfin@redhat.com>,
Xiao W Wang <xiao.w.wang@intel.com>,
Sean Mooney <smooney@redhat.com>,
Jim Harford <jim.harford@broadcom.com>,
Dmytro Kazantsev <dmytro.kazantsev@gmail.com>,
Siwei Liu <loseweigh@gmail.com>,
Harpreet Singh Anand <hanand@xilinx.com>,
Michael Lilja <ml@napatech.com>, Max Gurtovoy <maxgu14@gmail.com>
Subject: Re: [RFC PATCH 04/27] vhost: add vhost_kernel_set_vring_enable
Date: Wed, 9 Dec 2020 16:08:57 +0000 [thread overview]
Message-ID: <20201209160857.GC396498@stefanha-x1.localdomain> (raw)
In-Reply-To: <CAJaqyWd5oAJ4kJOhyDz+1KNvwzqJi3NO+5Z7X6W5ju2Va=LTMQ@mail.gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 3529 bytes --]
On Wed, Dec 09, 2020 at 01:00:19PM +0100, Eugenio Perez Martin wrote:
> On Mon, Dec 7, 2020 at 5:43 PM Stefan Hajnoczi <stefanha@gmail.com> wrote:
> >
> > On Fri, Nov 20, 2020 at 07:50:42PM +0100, Eugenio Pérez wrote:
> > > Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> > > ---
> > > hw/virtio/vhost-backend.c | 29 +++++++++++++++++++++++++++++
> > > 1 file changed, 29 insertions(+)
> > >
> > > diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c
> > > index 222bbcc62d..317f1f96fa 100644
> > > --- a/hw/virtio/vhost-backend.c
> > > +++ b/hw/virtio/vhost-backend.c
> > > @@ -201,6 +201,34 @@ static int vhost_kernel_get_vq_index(struct vhost_dev *dev, int idx)
> > > return idx - dev->vq_index;
> > > }
> > >
> > > +static int vhost_kernel_set_vq_enable(struct vhost_dev *dev, unsigned idx,
> > > + bool enable)
> > > +{
> > > + struct vhost_vring_file file = {
> > > + .index = idx,
> > > + };
> > > +
> > > + if (!enable) {
> > > + file.fd = -1; /* Pass -1 to unbind from file. */
> > > + } else {
> > > + struct vhost_net *vn_dev = container_of(dev, struct vhost_net, dev);
> > > + file.fd = vn_dev->backend;
> > > + }
> > > +
> > > + return vhost_kernel_net_set_backend(dev, &file);
> >
> > This is vhost-net specific even though the function appears to be
> > generic. Is there a plan to extend this to all devices?
> >
>
> I expected each vhost backend to enable-disable in its own terms, but
> I think it could be 100% virtio-device generic with something like the
> device state capability:
> https://lists.oasis-open.org/archives/virtio-comment/202012/msg00005.html
> .
Great, thanks for the link!
> > > +}
> > > +
> > > +static int vhost_kernel_set_vring_enable(struct vhost_dev *dev, int enable)
> > > +{
> > > + int i;
> > > +
> > > + for (i = 0; i < dev->nvqs; ++i) {
> > > + vhost_kernel_set_vq_enable(dev, i, enable);
> > > + }
> > > +
> > > + return 0;
> > > +}
> >
> > I suggest exposing the per-vq interface (vhost_kernel_set_vq_enable())
> > in VhostOps so it follows the ioctl interface.
>
> It was actually the initial plan, I left as all-or-nothing to make less changes.
>
> > vhost_kernel_set_vring_enable() can be moved to vhost.c can loop over
> > all vqs if callers find it convenient to loop over all vqs.
>
> I'm ok with it. Thinking out loud, I don't know if it is easier for
> some devices to enable/disable all of it (less syscalls? less downtime
> somehow?) but I find more generic and useful the per-virtqueue
> approach.
That's an interesting question, the ability to enable/disable specific
virtqueues seems like it could be useful. For example, guests with vCPU
hotplug may want to enable/disable virtqueues so that multi-queue
adapts as the number of vCPUs changes. A per-vq interface is needed for
that.
I'm a little worried that some device types might not cope well with
quiescing individual vqs. Here "quiesce" means to complete in flight
requests. This would be where two or more vqs have a relationship and
disabling one vq could cause a deadlock when trying to disable the other
one. However, I can't think of a case where this happens.
virtio-vsock is the closest example but luckily we don't need complete
in flight requests, we can just stop the vq immediately. So although
there is a dependency on the other vq it won't deadlock in this case.
Stefan
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
[-- Attachment #2: Type: text/plain, Size: 183 bytes --]
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2020-12-09 16:09 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20201120185105.279030-1-eperezma@redhat.com>
2020-11-25 7:08 ` [RFC PATCH 00/27] vDPA software assisted live migration Jason Wang
[not found] ` <CAJaqyWf+6yoMHJuLv=QGLMP4egmdm722=V2kKJ_aiQAfCCQOFw@mail.gmail.com>
2020-11-26 3:07 ` Jason Wang
[not found] ` <20201120185105.279030-24-eperezma@redhat.com>
2020-11-27 15:29 ` [RFC PATCH 23/27] vhost: unmap qemu's shadow virtqueues on sw " Stefano Garzarella
2020-11-27 15:44 ` [RFC PATCH 00/27] vDPA software assisted " Stefano Garzarella
[not found] ` <20201120185105.279030-3-eperezma@redhat.com>
2020-12-07 16:19 ` [RFC PATCH 02/27] vhost: Add device callback in vhost_migration_log Stefan Hajnoczi
[not found] ` <20201120185105.279030-5-eperezma@redhat.com>
2020-12-07 16:43 ` [RFC PATCH 04/27] vhost: add vhost_kernel_set_vring_enable Stefan Hajnoczi
[not found] ` <CAJaqyWd5oAJ4kJOhyDz+1KNvwzqJi3NO+5Z7X6W5ju2Va=LTMQ@mail.gmail.com>
2020-12-09 16:08 ` Stefan Hajnoczi [this message]
[not found] ` <20201120185105.279030-6-eperezma@redhat.com>
2020-12-07 16:52 ` [RFC PATCH 05/27] vhost: Add hdev->dev.sw_lm_vq_handler Stefan Hajnoczi
[not found] ` <CAJaqyWfSUHD0MU=1yfU1N6pZ4TU7prxyoG6NY-VyNGt=MO9H4g@mail.gmail.com>
2020-12-10 11:30 ` Stefan Hajnoczi
[not found] ` <20201120185105.279030-7-eperezma@redhat.com>
2020-12-07 16:58 ` [RFC PATCH 06/27] virtio: Add virtio_queue_get_used_notify_split Stefan Hajnoczi
[not found] ` <CAJaqyWc4oLzL02GKpPSwEGRxK+UxjOGBAPLzrgrgKRZd9C81GA@mail.gmail.com>
2021-03-02 11:22 ` Stefan Hajnoczi
[not found] ` <CAJaqyWd0iRUUW5Hu=U3mwQ4f43kA=bse3EkN4+QauFR4BJwObQ@mail.gmail.com>
2021-03-08 10:46 ` Stefan Hajnoczi
[not found] ` <20201120185105.279030-8-eperezma@redhat.com>
2020-12-07 17:42 ` [RFC PATCH 07/27] vhost: Route guest->host notification through qemu Stefan Hajnoczi
[not found] ` <CAJaqyWfiMsRP9FgSv7cOj=3jHx=DJS7hRJTMbRcTTHHWng0eKg@mail.gmail.com>
2020-12-10 11:50 ` Stefan Hajnoczi
[not found] ` <20201120185105.279030-9-eperezma@redhat.com>
2020-12-08 7:20 ` [RFC PATCH 08/27] vhost: Add a flag for software assisted Live Migration Stefan Hajnoczi
[not found] ` <20201120185105.279030-10-eperezma@redhat.com>
2020-12-08 7:34 ` [RFC PATCH 09/27] vhost: Route host->guest notification through qemu Stefan Hajnoczi
[not found] ` <20201120185105.279030-11-eperezma@redhat.com>
2020-12-08 7:49 ` [RFC PATCH 10/27] vhost: Allocate shadow vring Stefan Hajnoczi
2020-12-08 8:17 ` Stefan Hajnoczi
[not found] ` <20201120185105.279030-14-eperezma@redhat.com>
2020-12-08 8:16 ` [RFC PATCH 13/27] vhost: Send buffers to device Stefan Hajnoczi
[not found] ` <CAJaqyWf13ta5MtzmTUz2N5XnQ+ebqFPYAivdggL64LEQAf=y+A@mail.gmail.com>
2020-12-10 11:55 ` Stefan Hajnoczi
[not found] ` <20201120185105.279030-17-eperezma@redhat.com>
2020-12-08 8:25 ` [RFC PATCH 16/27] virtio: Expose virtqueue_alloc_element Stefan Hajnoczi
[not found] ` <CAJaqyWdN7iudf8mDN4k4Fs9j1x+ztZARuBbinPHD3ZQSMH1pyQ@mail.gmail.com>
2020-12-10 11:57 ` Stefan Hajnoczi
[not found] ` <20201120185105.279030-19-eperezma@redhat.com>
2020-12-08 8:41 ` [RFC PATCH 18/27] vhost: add vhost_vring_poll_rcu Stefan Hajnoczi
[not found] ` <20201120185105.279030-21-eperezma@redhat.com>
2020-12-08 8:50 ` [RFC PATCH 20/27] vhost: Return used buffers Stefan Hajnoczi
[not found] ` <20201120185105.279030-25-eperezma@redhat.com>
2020-12-08 9:02 ` [RFC PATCH 24/27] vhost: iommu changes Stefan Hajnoczi
2020-12-08 9:37 ` [RFC PATCH 00/27] vDPA software assisted live migration Stefan Hajnoczi
2020-12-09 9:26 ` Jason Wang
2020-12-09 15:57 ` Stefan Hajnoczi
2020-12-10 9:12 ` Jason Wang
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=20201209160857.GC396498@stefanha-x1.localdomain \
--to=stefanha@redhat.com \
--cc=alex.barba@broadcom.com \
--cc=ballle98@gmail.com \
--cc=cfontain@redhat.com \
--cc=dandaly0@gmail.com \
--cc=dmytro.kazantsev@gmail.com \
--cc=eli@mellanox.com \
--cc=eperezma@redhat.com \
--cc=hanand@xilinx.com \
--cc=howard.cai@gmail.com \
--cc=jim.harford@broadcom.com \
--cc=kvm@vger.kernel.org \
--cc=lars.ganrot@gmail.com \
--cc=liralon@gmail.com \
--cc=loseweigh@gmail.com \
--cc=maxgu14@gmail.com \
--cc=mehta.salil.lnk@gmail.com \
--cc=ml@napatech.com \
--cc=mst@redhat.com \
--cc=nitin.shrivastav@broadcom.com \
--cc=parav@mellanox.com \
--cc=qemu-devel@nongnu.org \
--cc=rob.miller@broadcom.com \
--cc=smooney@redhat.com \
--cc=stephenfin@redhat.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=vmireyno@marvell.com \
--cc=xiao.w.wang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox