All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: Jason Wang <jasowang@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	qemu-devel@nongnu.org, qemu-stable@nongnu.org
Subject: Re: [PATCH] virtio-net: Add queues before loading them
Date: Wed, 23 Oct 2024 04:02:14 -0400	[thread overview]
Message-ID: <20241023040059-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20241022-load-v1-1-99df0bff7939@daynix.com>

On Tue, Oct 22, 2024 at 03:49:01PM +0900, Akihiko Odaki wrote:
> Call virtio_net_set_multiqueue() to add queues before loading their
> states. Otherwise the loaded queues will not have handlers and elements
> in them will not be processed.
> 
> Cc: qemu-stable@nongnu.org
> Fixes: 8c49756825da ("virtio-net: Add only one queue pair when realizing")
> Reported-by: Laurent Vivier <lvivier@redhat.com>
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>


Jason, your queue?

> ---
>  include/hw/virtio/virtio.h |  2 ++
>  hw/net/virtio-net.c        | 10 ++++++++++
>  hw/virtio/virtio.c         |  7 +++++++
>  3 files changed, 19 insertions(+)
> 
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index f526ecc8fcc0..638691028050 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -210,6 +210,8 @@ struct VirtioDeviceClass {
>      void (*guest_notifier_mask)(VirtIODevice *vdev, int n, bool mask);
>      int (*start_ioeventfd)(VirtIODevice *vdev);
>      void (*stop_ioeventfd)(VirtIODevice *vdev);
> +    /* Called before loading queues. Useful to add queues before loading. */
> +    int (*pre_load_queues)(VirtIODevice *vdev);
>      /* Saving and loading of a device; trying to deprecate save/load
>       * use vmsd for new devices.
>       */
> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> index fb84d142ee29..c467ef130016 100644
> --- a/hw/net/virtio-net.c
> +++ b/hw/net/virtio-net.c
> @@ -3032,6 +3032,15 @@ static void virtio_net_set_multiqueue(VirtIONet *n, int multiqueue)
>      virtio_net_set_queue_pairs(n);
>  }
>  
> +static int virtio_net_pre_load_queues(VirtIODevice *vdev)
> +{
> +    virtio_net_set_multiqueue(VIRTIO_NET(vdev),
> +                              virtio_has_feature(vdev->guest_features, VIRTIO_NET_F_RSS) ||
> +                              virtio_has_feature(vdev->guest_features, VIRTIO_NET_F_MQ));
> +
> +    return 0;
> +}
> +
>  static int virtio_net_post_load_device(void *opaque, int version_id)
>  {
>      VirtIONet *n = opaque;
> @@ -4025,6 +4034,7 @@ static void virtio_net_class_init(ObjectClass *klass, void *data)
>      vdc->guest_notifier_mask = virtio_net_guest_notifier_mask;
>      vdc->guest_notifier_pending = virtio_net_guest_notifier_pending;
>      vdc->legacy_features |= (0x1 << VIRTIO_NET_F_GSO);
> +    vdc->pre_load_queues = virtio_net_pre_load_queues;
>      vdc->post_load = virtio_net_post_load_virtio;
>      vdc->vmsd = &vmstate_virtio_net_device;
>      vdc->primary_unplug_pending = primary_unplug_pending;
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index a26f18908ea5..f12c4aa81eb5 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -3255,6 +3255,13 @@ virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
>          config_len--;
>      }
>  
> +    if (vdc->pre_load_queues) {
> +        ret = vdc->pre_load_queues(vdev);
> +        if (ret) {
> +            return ret;
> +        }
> +    }
> +
>      num = qemu_get_be32(f);
>  
>      if (num > VIRTIO_QUEUE_MAX) {
> 
> ---
> base-commit: 7e3b6d8063f245d27eecce5aabe624b5785f2a77
> change-id: 20241017-load-fb5544456d28
> 
> Best regards,
> -- 
> Akihiko Odaki <akihiko.odaki@daynix.com>



  reply	other threads:[~2024-10-23  8:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-22  6:49 [PATCH] virtio-net: Add queues before loading them Akihiko Odaki
2024-10-23  8:02 ` Michael S. Tsirkin [this message]
2024-10-25  8:44   ` Jason Wang
2024-11-13 10:41     ` Laurent Vivier

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=20241023040059-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=akihiko.odaki@daynix.com \
    --cc=jasowang@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@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.