From: Yuri Benditovich <yuri.benditovich@daynix.com>
To: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: qemu-devel@nongnu.org, Andrew Melnychenko <andrew@daynix.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>
Subject: Re: [PATCH v6 11/21] virtio-net: Return an error when vhost cannot enable RSS
Date: Mon, 30 Oct 2023 14:14:34 +0200 [thread overview]
Message-ID: <CAOEp5OdEEVcojjwCOU+9Z5yBKN+e5iNbAMOA5d-97D81N4Y0tw@mail.gmail.com> (raw)
In-Reply-To: <20231030051356.33123-12-akihiko.odaki@daynix.com>
[-- Attachment #1: Type: text/plain, Size: 5006 bytes --]
On Mon, Oct 30, 2023 at 7:14 AM Akihiko Odaki <akihiko.odaki@daynix.com>
wrote:
> vhost requires eBPF for RSS. When eBPF is not available, virtio-net
> implicitly disables RSS even if the user explicitly requests it. Return
> an error instead of implicitly disabling RSS if RSS is requested but not
> available.
>
I think that suggesting RSS feature when in fact it is not available is not
a good idea, this rather desinforms the guest.
Existing behavior (IMHO) makes more sense.
We can extend this discussion if needed, of course.
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
> ---
> hw/net/virtio-net.c | 97 ++++++++++++++++++++++-----------------------
> 1 file changed, 48 insertions(+), 49 deletions(-)
>
> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> index 5d4afd12b2..7bb91617d0 100644
> --- a/hw/net/virtio-net.c
> +++ b/hw/net/virtio-net.c
> @@ -792,9 +792,6 @@ static uint64_t virtio_net_get_features(VirtIODevice
> *vdev, uint64_t features,
> return features;
> }
>
> - if (!ebpf_rss_is_loaded(&n->ebpf_rss)) {
> - virtio_clear_feature(&features, VIRTIO_NET_F_RSS);
> - }
> features = vhost_net_get_features(get_vhost_net(nc->peer), features);
> vdev->backend_features = features;
>
> @@ -3533,6 +3530,50 @@ static bool
> failover_hide_primary_device(DeviceListener *listener,
> return qatomic_read(&n->failover_primary_hidden);
> }
>
> +static void virtio_net_device_unrealize(DeviceState *dev)
> +{
> + VirtIODevice *vdev = VIRTIO_DEVICE(dev);
> + VirtIONet *n = VIRTIO_NET(dev);
> + int i, max_queue_pairs;
> +
> + if (virtio_has_feature(n->host_features, VIRTIO_NET_F_RSS)) {
> + virtio_net_unload_ebpf(n);
> + }
> +
> + /* This will stop vhost backend if appropriate. */
> + virtio_net_set_status(vdev, 0);
> +
> + g_free(n->netclient_name);
> + n->netclient_name = NULL;
> + g_free(n->netclient_type);
> + n->netclient_type = NULL;
> +
> + g_free(n->mac_table.macs);
> + g_free(n->vlans);
> +
> + if (n->failover) {
> + qobject_unref(n->primary_opts);
> + device_listener_unregister(&n->primary_listener);
> + migration_remove_notifier(&n->migration_state);
> + } else {
> + assert(n->primary_opts == NULL);
> + }
> +
> + max_queue_pairs = n->multiqueue ? n->max_queue_pairs : 1;
> + for (i = 0; i < max_queue_pairs; i++) {
> + virtio_net_del_queue(n, i);
> + }
> + /* delete also control vq */
> + virtio_del_queue(vdev, max_queue_pairs * 2);
> + qemu_announce_timer_del(&n->announce_timer, false);
> + g_free(n->vqs);
> + qemu_del_nic(n->nic);
> + virtio_net_rsc_cleanup(n);
> + g_free(n->rss_data.indirections_table);
> + net_rx_pkt_uninit(n->rx_pkt);
> + virtio_cleanup(vdev);
> +}
> +
> static void virtio_net_device_realize(DeviceState *dev, Error **errp)
> {
> VirtIODevice *vdev = VIRTIO_DEVICE(dev);
> @@ -3704,53 +3745,11 @@ static void virtio_net_device_realize(DeviceState
> *dev, Error **errp)
>
> net_rx_pkt_init(&n->rx_pkt);
>
> - if (virtio_has_feature(n->host_features, VIRTIO_NET_F_RSS)) {
> - virtio_net_load_ebpf(n);
> - }
> -}
> -
> -static void virtio_net_device_unrealize(DeviceState *dev)
> -{
> - VirtIODevice *vdev = VIRTIO_DEVICE(dev);
> - VirtIONet *n = VIRTIO_NET(dev);
> - int i, max_queue_pairs;
> -
> - if (virtio_has_feature(n->host_features, VIRTIO_NET_F_RSS)) {
> - virtio_net_unload_ebpf(n);
> + if (virtio_has_feature(n->host_features, VIRTIO_NET_F_RSS) &&
> + !virtio_net_load_ebpf(n)) {
> + error_setg(errp, "Can't load eBPF RSS");
> + virtio_net_device_unrealize(dev);
> }
> -
> - /* This will stop vhost backend if appropriate. */
> - virtio_net_set_status(vdev, 0);
> -
> - g_free(n->netclient_name);
> - n->netclient_name = NULL;
> - g_free(n->netclient_type);
> - n->netclient_type = NULL;
> -
> - g_free(n->mac_table.macs);
> - g_free(n->vlans);
> -
> - if (n->failover) {
> - qobject_unref(n->primary_opts);
> - device_listener_unregister(&n->primary_listener);
> - migration_remove_notifier(&n->migration_state);
> - } else {
> - assert(n->primary_opts == NULL);
> - }
> -
> - max_queue_pairs = n->multiqueue ? n->max_queue_pairs : 1;
> - for (i = 0; i < max_queue_pairs; i++) {
> - virtio_net_del_queue(n, i);
> - }
> - /* delete also control vq */
> - virtio_del_queue(vdev, max_queue_pairs * 2);
> - qemu_announce_timer_del(&n->announce_timer, false);
> - g_free(n->vqs);
> - qemu_del_nic(n->nic);
> - virtio_net_rsc_cleanup(n);
> - g_free(n->rss_data.indirections_table);
> - net_rx_pkt_uninit(n->rx_pkt);
> - virtio_cleanup(vdev);
> }
>
> static void virtio_net_reset(VirtIODevice *vdev)
> --
> 2.42.0
>
>
[-- Attachment #2: Type: text/html, Size: 6264 bytes --]
next prev parent reply other threads:[~2023-10-30 12:15 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-30 5:12 [PATCH v6 00/21] virtio-net RSS/hash report fixes and improvements Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 01/21] tap: Remove tap_probe_vnet_hdr_len() Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 02/21] tap: Remove qemu_using_vnet_hdr() Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 03/21] net: Move virtio-net header length assertion Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 04/21] net: Remove receive_raw() Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 05/21] tap: Remove tap_receive() Akihiko Odaki
2023-10-30 18:52 ` Zhang, Chen
2023-10-31 4:57 ` Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 06/21] net: Remove flag propagation Akihiko Odaki
2023-11-10 7:35 ` Pavel Dovgalyuk
2023-11-11 14:27 ` Akihiko Odaki
2023-11-13 8:14 ` Pavel Dovgalyuk
2023-10-30 5:12 ` [PATCH v6 07/21] tap: Shrink zeroed virtio-net header Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 08/21] virtio-net: Copy header only when necessary Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 09/21] virtio-net: Disable RSS on reset Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 10/21] virtio-net: Unify the logic to update NIC state for RSS Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 11/21] virtio-net: Return an error when vhost cannot enable RSS Akihiko Odaki
2023-10-30 12:14 ` Yuri Benditovich [this message]
2023-10-30 12:21 ` Akihiko Odaki
2023-10-30 12:51 ` Yuri Benditovich
2023-10-30 13:14 ` Akihiko Odaki
2023-11-01 4:19 ` Jason Wang
2023-11-01 4:50 ` Akihiko Odaki
2023-11-01 6:38 ` Michael S. Tsirkin
2023-11-01 8:35 ` Akihiko Odaki
2023-11-01 9:09 ` Michael S. Tsirkin
2023-11-01 9:15 ` Akihiko Odaki
2023-11-02 9:09 ` Yuri Benditovich
2023-11-02 9:33 ` Michael S. Tsirkin
2023-11-02 10:20 ` Yuri Benditovich
2023-11-02 11:26 ` Michael S. Tsirkin
2023-11-02 12:00 ` Yuri Benditovich
2023-11-02 13:18 ` Michael S. Tsirkin
2023-11-02 14:56 ` Akihiko Odaki
2023-11-03 9:35 ` Yuri Benditovich
2023-11-03 9:55 ` Akihiko Odaki
2023-11-03 13:14 ` Yuri Benditovich
2023-11-11 15:28 ` Akihiko Odaki
2023-11-13 11:44 ` Yuri Benditovich
2023-11-13 12:44 ` Akihiko Odaki
2023-11-13 17:26 ` Yuri Benditovich
2023-11-14 7:03 ` Akihiko Odaki
2023-11-14 22:09 ` Yuri Benditovich
2023-11-15 6:09 ` Akihiko Odaki
2023-11-16 5:14 ` Jason Wang
2023-10-30 5:12 ` [PATCH v6 12/21] virtio-net: Enable software RSS Akihiko Odaki
2023-10-30 12:42 ` Yuri Benditovich
2023-10-30 5:12 ` [PATCH v6 13/21] virtio-net: Always set populate_hash Akihiko Odaki
2023-10-30 19:02 ` Zhang, Chen
2023-10-31 4:47 ` Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 14/21] virtio-net: Do not write hashes to peer buffer Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 15/21] virtio-net: Do not clear VIRTIO_NET_F_HASH_REPORT Akihiko Odaki
2023-11-03 13:26 ` Yuri Benditovich
2023-10-30 5:12 ` [PATCH v6 16/21] ebpf: Fix RSS error handling Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 17/21] ebpf: Use standard section name Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 18/21] ebpf: Simplify error handling Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 19/21] ebpf: Return 0 when configuration fails Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 20/21] ebpf: Refactor tun_rss_steering_prog() Akihiko Odaki
2023-10-30 5:12 ` [PATCH v6 21/21] ebpf: Add a separate target for skeleton Akihiko Odaki
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=CAOEp5OdEEVcojjwCOU+9Z5yBKN+e5iNbAMOA5d-97D81N4Y0tw@mail.gmail.com \
--to=yuri.benditovich@daynix.com \
--cc=akihiko.odaki@daynix.com \
--cc=andrew@daynix.com \
--cc=jasowang@redhat.com \
--cc=mst@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 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).