qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Raphael Norwitz <raphael.s.norwitz@gmail.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Cc: mst@redhat.com, peterx@redhat.com, farosas@suse.de,
	raphael@enfabrica.net,  sgarzare@redhat.com,
	marcandre.lureau@redhat.com, pbonzini@redhat.com,
	 kwolf@redhat.com, hreitz@redhat.com, berrange@redhat.com,
	eblake@redhat.com,  armbru@redhat.com, qemu-devel@nongnu.org,
	qemu-block@nongnu.org,  steven.sistare@oracle.com,
	den-plotnikov@yandex-team.ru
Subject: Re: [PATCH 10/33] vhost: vhost_virtqueue_start(): fix failure path
Date: Thu, 9 Oct 2025 15:00:05 -0400	[thread overview]
Message-ID: <CAFubqFs1azct9_UPyDD9npgPie3bBpSbMc9b0agZrDE8kasSUg@mail.gmail.com> (raw)
In-Reply-To: <20250813164856.950363-11-vsementsov@yandex-team.ru>

Nice cleanup.

Reviewed-by: Raphael Norwitz <raphael.s.norwitz@gmail.com>

On Wed, Aug 13, 2025 at 12:56 PM Vladimir Sementsov-Ogievskiy
<vsementsov@yandex-team.ru> wrote:
>
> We miss call to unmap in cases when vhost_memory_map() returns
> lenght less than requested (still we consider such cases as an
> error). Let's fix it in vhost_memory_map().
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
>  hw/virtio/vhost.c | 33 +++++++++++++++++++++------------
>  1 file changed, 21 insertions(+), 12 deletions(-)
>
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 2631bbabcf..1e14987cd5 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -467,10 +467,19 @@ static inline void vhost_dev_log_resize(struct vhost_dev *dev, uint64_t size)
>  }
>
>  static void *vhost_memory_map(struct vhost_dev *dev, hwaddr addr,
> -                              hwaddr *plen, bool is_write)
> +                              hwaddr len, bool is_write)
>  {
> +    hwaddr mapped_len = len;
>      if (!vhost_dev_has_iommu(dev)) {
> -        return cpu_physical_memory_map(addr, plen, is_write);
> +        void *res = cpu_physical_memory_map(addr, &mapped_len, is_write);
> +        if (!res) {
> +            return NULL;
> +        }
> +        if (len != mapped_len) {
> +            cpu_physical_memory_unmap(res, mapped_len, 0, 0);
> +            return NULL;
> +        }
> +        return res;
>      } else {
>          return (void *)(uintptr_t)addr;
>      }
> @@ -1259,7 +1268,7 @@ int vhost_virtqueue_start(struct vhost_dev *dev,
>      BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev)));
>      VirtioBusState *vbus = VIRTIO_BUS(qbus);
>      VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(vbus);
> -    hwaddr s, l, a;
> +    hwaddr l, a;
>      int r;
>      int vhost_vq_index = dev->vhost_ops->vhost_get_vq_index(dev, idx);
>      struct vhost_vring_file file = {
> @@ -1299,24 +1308,24 @@ int vhost_virtqueue_start(struct vhost_dev *dev,
>          }
>      }
>
> -    vq->desc_size = s = l = virtio_queue_get_desc_size(vdev, idx);
> +    vq->desc_size = l = virtio_queue_get_desc_size(vdev, idx);
>      vq->desc_phys = a;
> -    vq->desc = vhost_memory_map(dev, a, &l, false);
> -    if (!vq->desc || l != s) {
> +    vq->desc = vhost_memory_map(dev, a, l, false);
> +    if (!vq->desc) {
>          r = -ENOMEM;
>          goto fail_alloc_desc;
>      }
> -    vq->avail_size = s = l = virtio_queue_get_avail_size(vdev, idx);
> +    vq->avail_size = l = virtio_queue_get_avail_size(vdev, idx);
>      vq->avail_phys = a = virtio_queue_get_avail_addr(vdev, idx);
> -    vq->avail = vhost_memory_map(dev, a, &l, false);
> -    if (!vq->avail || l != s) {
> +    vq->avail = vhost_memory_map(dev, a, l, false);
> +    if (!vq->avail) {
>          r = -ENOMEM;
>          goto fail_alloc_avail;
>      }
> -    vq->used_size = s = l = virtio_queue_get_used_size(vdev, idx);
> +    vq->used_size = l = virtio_queue_get_used_size(vdev, idx);
>      vq->used_phys = a = virtio_queue_get_used_addr(vdev, idx);
> -    vq->used = vhost_memory_map(dev, a, &l, true);
> -    if (!vq->used || l != s) {
> +    vq->used = vhost_memory_map(dev, a, l, true);
> +    if (!vq->used) {
>          r = -ENOMEM;
>          goto fail_alloc_used;
>      }
> --
> 2.48.1
>
>


  reply	other threads:[~2025-10-09 19:00 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-13 16:48 [PATCH 00/33] vhost-user-blk: live-backend local migration Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 01/33] vhost: introduce vhost_ops->vhost_set_vring_enable_supported method Vladimir Sementsov-Ogievskiy
2025-10-09 18:56   ` Raphael Norwitz
2025-10-09 19:25     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 02/33] vhost: drop backend_features field Vladimir Sementsov-Ogievskiy
2025-09-12 14:39   ` Markus Armbruster
2025-10-09 18:57   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 03/33] vhost-user: introduce vhost_user_has_prot() helper Vladimir Sementsov-Ogievskiy
2025-10-09 18:57   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 04/33] vhost: move protocol_features to vhost_user Vladimir Sementsov-Ogievskiy
2025-10-09 18:57   ` Raphael Norwitz
2025-10-09 19:35     ` Vladimir Sementsov-Ogievskiy
2025-10-09 19:45       ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 05/33] vhost-user-gpu: drop code duplication Vladimir Sementsov-Ogievskiy
2025-08-18  6:54   ` Philippe Mathieu-Daudé
2025-10-09 18:58   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 06/33] vhost: make vhost_dev.features private Vladimir Sementsov-Ogievskiy
2025-10-09 18:58   ` Raphael Norwitz
2025-10-09 19:40     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 07/33] virtio: move common part of _set_guest_notifier to generic code Vladimir Sementsov-Ogievskiy
2025-08-14  4:53   ` Philippe Mathieu-Daudé
2025-08-14 11:15     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 08/33] virtio: drop *_set_guest_notifier_fd_handler() helpers Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 09/33] vhost-user: keep QIOChannelSocket for backend channel Vladimir Sementsov-Ogievskiy
2025-10-09 18:58   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 10/33] vhost: vhost_virtqueue_start(): fix failure path Vladimir Sementsov-Ogievskiy
2025-10-09 19:00   ` Raphael Norwitz [this message]
2025-08-13 16:48 ` [PATCH 11/33] vhost: make vhost_memory_unmap() null-safe Vladimir Sementsov-Ogievskiy
2025-10-09 19:00   ` Raphael Norwitz
2025-10-09 20:00     ` Vladimir Sementsov-Ogievskiy
2025-10-11 19:10       ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 12/33] vhost: simplify calls to vhost_memory_unmap() Vladimir Sementsov-Ogievskiy
2025-10-09 19:00   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 13/33] vhost: move vrings mapping to the top of vhost_virtqueue_start() Vladimir Sementsov-Ogievskiy
2025-10-09 19:01   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 14/33] vhost: vhost_virtqueue_start(): drop extra local variables Vladimir Sementsov-Ogievskiy
2025-10-09 19:02   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 15/33] vhost: final refactoring of vhost vrings map/unmap Vladimir Sementsov-Ogievskiy
2025-10-09 19:02   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 16/33] vhost: simplify vhost_dev_init() error-path Vladimir Sementsov-Ogievskiy
2025-10-09 19:04   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 17/33] vhost: move busyloop timeout initialization to vhost_virtqueue_init() Vladimir Sementsov-Ogievskiy
2025-10-09 19:04   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 18/33] vhost: introduce check_memslots() helper Vladimir Sementsov-Ogievskiy
2025-10-09 19:06   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 19/33] vhost: vhost_dev_init(): drop extra features variable Vladimir Sementsov-Ogievskiy
2025-10-09 19:06   ` Raphael Norwitz
2025-10-09 20:15     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 20/33] hw/virtio/virtio-bus: refactor virtio_bus_set_host_notifier() Vladimir Sementsov-Ogievskiy
2025-08-14  6:00   ` Philippe Mathieu-Daudé
2025-10-09 19:07   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 21/33] vhost-user: make trace events more readable Vladimir Sementsov-Ogievskiy
2025-08-14  5:59   ` Philippe Mathieu-Daudé
2025-10-09 19:07   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 22/33] vhost-user-blk: add some useful trace-points Vladimir Sementsov-Ogievskiy
2025-08-14  4:58   ` Philippe Mathieu-Daudé
2025-08-14 11:14     ` Vladimir Sementsov-Ogievskiy
2025-10-09 19:07   ` Raphael Norwitz
2025-10-09 20:19     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 23/33] vhost: " Vladimir Sementsov-Ogievskiy
2025-10-09 19:08   ` Raphael Norwitz
2025-10-09 20:20     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 24/33] chardev-add: support local migration Vladimir Sementsov-Ogievskiy
2025-09-12 14:56   ` Markus Armbruster
2025-09-12 15:04     ` Vladimir Sementsov-Ogievskiy
2025-09-12 15:24     ` Steven Sistare
2025-09-15 13:28       ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 25/33] virtio: introduce .skip_vhost_migration_log() handler Vladimir Sementsov-Ogievskiy
2025-10-09 19:08   ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 26/33] io/channel-socket: introduce qio_channel_socket_keep_nonblock() Vladimir Sementsov-Ogievskiy
2025-08-20 13:27   ` Peter Xu
2025-08-20 13:43     ` Daniel P. Berrangé
2025-08-20 14:37       ` Peter Xu
2025-08-20 14:42         ` Daniel P. Berrangé
2025-08-21 12:07       ` Vladimir Sementsov-Ogievskiy
2025-08-21 13:45         ` Peter Xu
2025-08-21 14:11           ` Daniel P. Berrangé
2025-08-20 13:37   ` Daniel P. Berrangé
2025-08-21 12:08     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 27/33] migration/socket: keep fds non-block Vladimir Sementsov-Ogievskiy
2025-08-20 13:30   ` Peter Xu
2025-08-21 12:15     ` Vladimir Sementsov-Ogievskiy
2025-08-21 13:49       ` Peter Xu
2025-08-13 16:48 ` [PATCH 28/33] vhost: introduce backend migration Vladimir Sementsov-Ogievskiy
2025-10-09 19:09   ` Raphael Norwitz
2025-10-09 20:51     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 29/33] vhost-user: support " Vladimir Sementsov-Ogievskiy
2025-10-09 19:09   ` Raphael Norwitz
2025-10-09 20:54     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 30/33] virtio: support vhost " Vladimir Sementsov-Ogievskiy
2025-10-09 19:09   ` Raphael Norwitz
2025-10-09 20:59     ` Vladimir Sementsov-Ogievskiy
2025-08-13 16:48 ` [PATCH 31/33] vhost-user-blk: " Vladimir Sementsov-Ogievskiy
2025-10-09 19:09   ` Raphael Norwitz
2025-10-09 21:14     ` Vladimir Sementsov-Ogievskiy
2025-10-09 23:43       ` Raphael Norwitz
2025-10-10  6:27         ` Vladimir Sementsov-Ogievskiy
2025-10-13 21:50           ` Raphael Norwitz
2025-08-13 16:48 ` [PATCH 32/33] test/functional: exec_command_and_wait_for_pattern: add vm arg Vladimir Sementsov-Ogievskiy
2025-08-14  5:01   ` Philippe Mathieu-Daudé
2025-08-18  6:55   ` Thomas Huth
2025-08-13 16:48 ` [PATCH 33/33] tests/functional: add test_x86_64_vhost_user_blk_fd_migration.py Vladimir Sementsov-Ogievskiy
2025-10-09 19:16 ` [PATCH 00/33] vhost-user-blk: live-backend local migration Raphael Norwitz
2025-10-09 22:43   ` Vladimir Sementsov-Ogievskiy
2025-10-09 23:28     ` Raphael Norwitz
2025-10-10  8:47       ` Vladimir Sementsov-Ogievskiy
2025-10-13 21:41         ` Raphael Norwitz

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=CAFubqFs1azct9_UPyDD9npgPie3bBpSbMc9b0agZrDE8kasSUg@mail.gmail.com \
    --to=raphael.s.norwitz@gmail.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=den-plotnikov@yandex-team.ru \
    --cc=eblake@redhat.com \
    --cc=farosas@suse.de \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=raphael@enfabrica.net \
    --cc=sgarzare@redhat.com \
    --cc=steven.sistare@oracle.com \
    --cc=vsementsov@yandex-team.ru \
    /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).