qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Kangjie Xu <kangjie.xu@linux.alibaba.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	wangyanan55@huawei.com, "Heng Qi" <hengqi@linux.alibaba.com>,
	"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>
Subject: Re: [PATCH v2 07/24] virtio-pci: support queue enable
Date: Thu, 25 Aug 2022 10:52:09 +0800	[thread overview]
Message-ID: <CACGkMEvrzc2asJfWVynh=Y=6mjrGLG5EOTDhfrDWV69SX7Yb1g@mail.gmail.com> (raw)
In-Reply-To: <a5cb0b2d-1a76-86eb-acd7-6421a5f6d3eb@linux.alibaba.com>

On Wed, Aug 24, 2022 at 7:27 PM Kangjie Xu <kangjie.xu@linux.alibaba.com> wrote:
>
>
> 在 2022/8/24 16:59, Jason Wang 写道:
>
>
> 在 2022/8/23 16:20, Kangjie Xu 写道:
>
>
> 在 2022/8/23 15:44, Jason Wang 写道:
>
>
> 在 2022/8/16 09:06, Kangjie Xu 写道:
>
> PCI devices support vq enable.
>
>
>
> Nit: it might be "support device specific vq enable"
>
>
> Get it.
>
>
> Based on this function, the driver can re-enable the virtqueue after the
> virtqueue is reset.
>
> Signed-off-by: Kangjie Xu <kangjie.xu@linux.alibaba.com>
> Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> ---
>   hw/virtio/virtio-pci.c | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> index ec8e92052f..3d560e45ad 100644
> --- a/hw/virtio/virtio-pci.c
> +++ b/hw/virtio/virtio-pci.c
> @@ -1335,6 +1335,7 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr,
> proxy->vqs[vdev->queue_sel].avail[0],
> ((uint64_t)proxy->vqs[vdev->queue_sel].used[1]) << 32 |
> proxy->vqs[vdev->queue_sel].used[0]);
> +            virtio_queue_enable(vdev, vdev->queue_sel);
>               proxy->vqs[vdev->queue_sel].enabled = 1;
>               proxy->vqs[vdev->queue_sel].reset = 0;
>
>
>
> Any reason we do it before the assignment of 1? It probably means the device specific method can't depend on virtio_queue_enabled()?
>
> Thanks
>
> Sorry, I don't get why device specific method can't depend on virtio_queue_enabled().
>
>
>
> I meant if the device specific method call virtio_queue_enabled() it will return false in this case, is this intended?
>
> Yes, I intend it to behave in this way.
>
>
>
> Before virtio_queue_enable() is done, virtqueue should always be not ready and disabled.
>
> Otherwise, If we put it after the assignment of enabled to 1, the virtqueue may be accessed illegally and may cause panic, because the virtqueue is still being intialized and being configured.
>
>
>
> How? Shouldn't we make transport ready before making device virtqueue(device) ready?
>
> Thanks
>
> I am not experienced in this field, could you tell me why we should make the transport ready first?

That's a must for the device to work.

E.g for PCI device, I can't image the device is ready to work before
PCI is ready.

>
> I make the transport ready later than making device ready for two aspects:
>
> 1. In QEMU, the virtio_queue_enabled() is used only when we start the device/queue pair (vhost_dev_start_one), or reading VIRTIO_PCI_COMMON_Q_ENABLE. These two operations and resetting the queue will be synchronized using iothread lock, so we do not need to worry about the case currently.

Note that virtio_queue_enabled() is an exported helper, you can't
assume how it will be used in the future.

>
> 2. Suppose we use virtio_queue_enabled() or access the enabled status asynchronously, and we make the transport ready first.
>
> After enabled set to true, and before virtio_queue_enable() is finished, somewhere  that call virtio_queue_enabled()  or access the enabled status of VirtIOPCIQueue. Then the caller will consider the virtqueue as enabled(enabled = true in VirtIOPCIQueue). The caller might access the virtqueue(access avail ring / desc table). But I think the access here is illegal because the virtqueue might still be unintialized status.
>

How can this happen, won't we call device specific method after we set
queue_enabled as true? It's the charge of the device specific method
to synchronize the necessary external I/O in this case.

Thanks

> Thus, from my perspective, to prevent illegal access, we need to make transport ready after virtio_queue_enable().
>
> Thanks
>
>
>
> Thanks
>
>
>           } else {
>
>



  reply	other threads:[~2022-08-25  2:54 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-16  1:06 [PATCH 00/24] Support VIRTIO_F_RING_RESET for virtio-net, vhost-user, vhost-kernel in virtio pci-modern Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 01/24] virtio: sync relevant definitions with linux Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 02/24] virtio: introduce __virtio_queue_reset() Kangjie Xu
2022-08-23  7:31   ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 03/24] virtio: introduce virtio_queue_reset() Kangjie Xu
2022-08-23  7:32   ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 04/24] virtio: introduce virtio_queue_enable() Kangjie Xu
2022-08-23  7:37   ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 05/24] virtio: core: vq reset feature negotation support Kangjie Xu
2022-08-23  7:34   ` Jason Wang
2022-08-23  7:42     ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 06/24] virtio-pci: support queue reset Kangjie Xu
2022-08-23  7:40   ` Jason Wang
2022-08-23  7:52     ` Kangjie Xu
2022-08-24  8:56       ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 07/24] virtio-pci: support queue enable Kangjie Xu
2022-08-23  7:44   ` Jason Wang
2022-08-23  8:20     ` Kangjie Xu
2022-08-24  8:59       ` Jason Wang
2022-08-24 11:27         ` Kangjie Xu
2022-08-25  2:52           ` Jason Wang [this message]
2022-08-25  3:38             ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 08/24] vhost: extract the logic of unmapping the vrings and desc Kangjie Xu
2022-08-23  7:45   ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 09/24] vhost: introduce vhost_dev_virtqueue_stop() Kangjie Xu
2022-08-23  7:52   ` Jason Wang
2022-08-23  8:03     ` Kangjie Xu
2022-08-24  2:40       ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 10/24] vhost: introduce vhost_dev_virtqueue_restart() Kangjie Xu
2022-08-24  2:37   ` Jason Wang
2022-08-24  2:44     ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 11/24] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_stop() Kangjie Xu
2022-08-24  2:40   ` Jason Wang
2022-08-24  2:46     ` Kangjie Xu
2022-08-24  3:33     ` Kangjie Xu
2022-08-24  9:00       ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 12/24] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_restart() Kangjie Xu
2022-08-24  2:44   ` Jason Wang
2022-08-24  2:53     ` Kangjie Xu
2022-08-24  9:01       ` Jason Wang
2022-08-24  9:03         ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 13/24] docs: vhost-user: add VHOST_USER_RESET_VRING message Kangjie Xu
2022-08-24  2:46   ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 14/24] vhost-user: introduce vhost_reset_vring() interface Kangjie Xu
2022-08-24  2:50   ` Jason Wang
2022-08-24  3:03     ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 15/24] vhost-user: add op to enable or disable a single vring Kangjie Xu
2022-08-24  2:53   ` Jason Wang
2022-08-24  3:09     ` Kangjie Xu
2022-08-24  9:02       ` Jason Wang
2022-08-24  9:09         ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 16/24] vhost: vhost-user: update vhost_dev_virtqueue_stop() Kangjie Xu
2022-08-24  3:56   ` Jason Wang
2022-08-24  4:59     ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 17/24] vhost: vhost-user: update vhost_dev_virtqueue_restart() Kangjie Xu
2022-08-24  4:03   ` Jason Wang
2022-08-24  5:04     ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 18/24] vhost-net: vhost-user: update vhost_net_virtqueue_stop() Kangjie Xu
2022-08-24  4:05   ` Jason Wang
2022-08-24  4:57     ` Kangjie Xu
2022-08-24  9:04       ` Jason Wang
2022-08-24  9:18         ` Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 19/24] vhost-net: vhost-user: update vhost_net_virtqueue_restart() Kangjie Xu
2022-08-24  4:06   ` Jason Wang
2022-08-16  1:06 ` [PATCH v2 20/24] virtio-net: introduce flush_or_purge_queued_packets() Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 21/24] virtio-net: support queue reset Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 22/24] virtio-net: support queue_enable Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 23/24] vhost: vhost-kernel: enable vq reset feature Kangjie Xu
2022-08-16  1:06 ` [PATCH v2 24/24] vhost: vhost-user: " Kangjie Xu
2022-08-16  6:14 ` [PATCH 00/24] Support VIRTIO_F_RING_RESET for virtio-net, vhost-user, vhost-kernel in virtio pci-modern Michael S. Tsirkin
2022-08-16  6:15   ` Xuan Zhuo
2022-08-16  6:22     ` Michael S. Tsirkin
2022-08-16  6:40       ` Xuan Zhuo
2022-08-17  6:46       ` Kangjie Xu
2022-08-23  1:49 ` Kangjie Xu
2022-08-24  4:10 ` Jason Wang
2022-08-24  4:11 ` 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='CACGkMEvrzc2asJfWVynh=Y=6mjrGLG5EOTDhfrDWV69SX7Yb1g@mail.gmail.com' \
    --to=jasowang@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=f4bug@amsat.org \
    --cc=hengqi@linux.alibaba.com \
    --cc=kangjie.xu@linux.alibaba.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wangyanan55@huawei.com \
    --cc=xuanzhuo@linux.alibaba.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;
as well as URLs for NNTP newsgroup(s).