From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Eugenio Pérez" <eperezma@redhat.com>
Cc: qemu-devel@nongnu.org, Liuxiangdong <liuxiangdong5@huawei.com>,
Markus Armbruster <armbru@redhat.com>,
Harpreet Singh Anand <hanand@xilinx.com>,
Eric Blake <eblake@redhat.com>,
Laurent Vivier <lvivier@redhat.com>,
Parav Pandit <parav@mellanox.com>,
Cornelia Huck <cohuck@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Gautam Dawar <gdawar@xilinx.com>, Eli Cohen <eli@mellanox.com>,
"Gonglei (Arei)" <arei.gonglei@huawei.com>,
Zhu Lingshan <lingshan.zhu@intel.com>, Cindy Lu <lulu@redhat.com>,
Jason Wang <jasowang@redhat.com>
Subject: Re: [RFC PATCH v9 03/23] vdpa: delay set_vring_ready after DRIVER_OK
Date: Wed, 13 Jul 2022 01:51:51 -0400 [thread overview]
Message-ID: <20220713014746-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20220706184008.1649478-4-eperezma@redhat.com>
On Wed, Jul 06, 2022 at 08:39:48PM +0200, Eugenio Pérez wrote:
> To restore the device in the destination of a live migration we send the
> commands through control virtqueue. For a device to read CVQ it must
> have received DRIVER_OK status bit.
>
> However this open a window where the device could start receiving
> packets in rx queue 0 before it receive the RSS configuration. To avoid
> that, we will not send vring_enable until all configuration is used by
> the device.
>
> As a first step, reverse the DRIVER_OK and SET_VRING_ENABLE steps.
>
> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
Not a comment on this patch specifically, but generally:
You should know that lots of existing drivers are buggy and
try to poke at the VQs before DRIVER_OK. We are doing our best
to fix them but it's taking forever. For now it's a good
idea to support such drivers even if they are out of spec.
You do that by starting on the first kick in absence of DRIVER_OK.
Further, adding buffers before DRIVER_OK is actually allowed,
as long as you don't kick.
> ---
> hw/virtio/vhost-vdpa.c | 22 ++++++++++++++++------
> 1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> index 66f054a12c..2ee8009594 100644
> --- a/hw/virtio/vhost-vdpa.c
> +++ b/hw/virtio/vhost-vdpa.c
> @@ -728,13 +728,18 @@ static int vhost_vdpa_get_vq_index(struct vhost_dev *dev, int idx)
> return idx;
> }
>
> +/**
> + * Set ready all vring of the device
> + *
> + * @dev: Vhost device
> + */
> static int vhost_vdpa_set_vring_ready(struct vhost_dev *dev)
> {
> int i;
> trace_vhost_vdpa_set_vring_ready(dev);
> - for (i = 0; i < dev->nvqs; ++i) {
> + for (i = 0; i < dev->vq_index_end; ++i) {
> struct vhost_vring_state state = {
> - .index = dev->vq_index + i,
> + .index = i,
> .num = 1,
> };
> vhost_vdpa_call(dev, VHOST_VDPA_SET_VRING_ENABLE, &state);
> @@ -1097,7 +1102,6 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev, bool started)
> if (unlikely(!ok)) {
> return -1;
> }
> - vhost_vdpa_set_vring_ready(dev);
> } else {
> ok = vhost_vdpa_svqs_stop(dev);
> if (unlikely(!ok)) {
> @@ -1111,16 +1115,22 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev, bool started)
> }
>
> if (started) {
> + int r;
> +
> memory_listener_register(&v->listener, &address_space_memory);
> - return vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
> + r = vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
> + if (unlikely(r)) {
> + return r;
> + }
> + vhost_vdpa_set_vring_ready(dev);
> } else {
> vhost_vdpa_reset_device(dev);
> vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE |
> VIRTIO_CONFIG_S_DRIVER);
> memory_listener_unregister(&v->listener);
> -
> - return 0;
> }
> +
> + return 0;
> }
>
> static int vhost_vdpa_set_log_base(struct vhost_dev *dev, uint64_t base,
> --
> 2.31.1
next prev parent reply other threads:[~2022-07-13 5:54 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-06 18:39 [RFC PATCH v9 00/23] Net Control VQ support in SVQ Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 01/23] vhost: Return earlier if used buffers overrun Eugenio Pérez
2022-07-08 8:52 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 02/23] vhost: move descriptor translation to vhost_svq_vring_write_descs Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 03/23] vdpa: delay set_vring_ready after DRIVER_OK Eugenio Pérez
2022-07-08 9:06 ` Jason Wang
2022-07-08 9:56 ` Eugenio Perez Martin
2022-07-08 9:59 ` Eugenio Perez Martin
2022-07-13 5:51 ` Michael S. Tsirkin [this message]
2022-07-13 6:18 ` Eugenio Perez Martin
2022-07-06 18:39 ` [RFC PATCH v9 04/23] vhost: Get vring base from vq, not svq Eugenio Pérez
2022-07-08 9:12 ` Jason Wang
2022-07-08 10:10 ` Eugenio Perez Martin
2022-07-12 7:42 ` Jason Wang
2022-07-12 9:42 ` Eugenio Perez Martin
2022-07-06 18:39 ` [RFC PATCH v9 05/23] vhost: Add ShadowVirtQueueStart operation Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 06/23] virtio-net: Expose ctrl virtqueue logic Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 07/23] vhost: add vhost_svq_push_elem Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 08/23] vhost: Decouple vhost_svq_add_split from VirtQueueElement Eugenio Pérez
2022-07-11 8:00 ` Jason Wang
2022-07-11 8:27 ` Eugenio Perez Martin
2022-07-12 7:43 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 09/23] vhost: Add SVQElement Eugenio Pérez
2022-07-11 9:00 ` Jason Wang
2022-07-11 9:33 ` Eugenio Perez Martin
2022-07-12 7:49 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 10/23] vhost: Reorder vhost_svq_last_desc_of_chain Eugenio Pérez
2022-07-06 18:39 ` [RFC PATCH v9 11/23] vhost: Move last chain id to SVQ element Eugenio Pérez
2022-07-11 9:02 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 12/23] vhost: Add opaque member to SVQElement Eugenio Pérez
2022-07-11 9:05 ` Jason Wang
2022-07-11 9:56 ` Eugenio Perez Martin
2022-07-12 7:53 ` Jason Wang
2022-07-12 8:32 ` Eugenio Perez Martin
2022-07-12 8:43 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 13/23] vhost: Add vhost_svq_inject Eugenio Pérez
2022-07-11 9:14 ` Jason Wang
2022-07-11 9:43 ` Eugenio Perez Martin
2022-07-12 7:58 ` Jason Wang
2022-07-06 18:39 ` [RFC PATCH v9 14/23] vhost: add vhost_svq_poll Eugenio Pérez
2022-07-11 9:19 ` Jason Wang
2022-07-11 17:52 ` Eugenio Perez Martin
2022-07-06 18:40 ` [RFC PATCH v9 15/23] vhost: Add custom used buffer callback Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 16/23] vhost: Add svq avail_handler callback Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 17/23] vhost: add detach SVQ operation Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 18/23] vdpa: Export vhost_vdpa_dma_map and unmap calls Eugenio Pérez
2022-07-11 9:22 ` Jason Wang
2022-07-06 18:40 ` [RFC PATCH v9 19/23] vdpa: Extract get features part from vhost_vdpa_get_max_queue_pairs Eugenio Pérez
2022-07-12 4:11 ` Jason Wang
2022-07-06 18:40 ` [RFC PATCH v9 20/23] vdpa: Buffer CVQ support on shadow virtqueue Eugenio Pérez
2022-07-12 7:17 ` Jason Wang
2022-07-12 9:47 ` Eugenio Perez Martin
2022-07-14 6:54 ` Eugenio Perez Martin
2022-07-14 7:04 ` Jason Wang
2022-07-14 17:37 ` Eugenio Perez Martin
2022-07-06 18:40 ` [RFC PATCH v9 21/23] vdpa: Add vhost_vdpa_start_control_svq Eugenio Pérez
2022-07-12 7:26 ` Jason Wang
2022-07-17 10:30 ` Eugenio Perez Martin
2022-07-17 11:00 ` Eugenio Perez Martin
2022-07-06 18:40 ` [RFC PATCH v9 22/23] vdpa: Inject virtio-net mac address via CVQ at start Eugenio Pérez
2022-07-06 18:40 ` [RFC PATCH v9 23/23] vdpa: Add x-svq to NetdevVhostVDPAOptions Eugenio Pérez
2022-07-07 6:23 ` Markus Armbruster
2022-07-08 10:53 ` Eugenio Perez Martin
2022-07-08 12:51 ` Markus Armbruster
2022-07-11 7:14 ` Eugenio Perez Martin
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=20220713014746-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=cohuck@redhat.com \
--cc=eblake@redhat.com \
--cc=eli@mellanox.com \
--cc=eperezma@redhat.com \
--cc=gdawar@xilinx.com \
--cc=hanand@xilinx.com \
--cc=jasowang@redhat.com \
--cc=lingshan.zhu@intel.com \
--cc=liuxiangdong5@huawei.com \
--cc=lulu@redhat.com \
--cc=lvivier@redhat.com \
--cc=parav@mellanox.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.