]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
virtio-net: Ensure queue index fits with RSS
authorAkihiko Odaki <akihiko.odaki@daynix.com>
Mon, 1 Jul 2024 11:58:04 +0000 (20:58 +0900)
committerJason Wang <jasowang@redhat.com>
Fri, 2 Aug 2024 03:08:44 +0000 (11:08 +0800)
Ensure the queue index points to a valid queue when software RSS
enabled. The new calculation matches with the behavior of Linux's TAP
device with the RSS eBPF program.

Fixes: 4474e37a5b3a ("virtio-net: implement RX RSS processing")
Reported-by: Zhibin Hu <huzhibin5@huawei.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
hw/net/virtio-net.c

index 8f309727086925a7ce20e772b855b5d3304381ab..5635620a31729acabceb8140ab4a38a0667466c8 100644 (file)
@@ -1905,7 +1905,8 @@ static ssize_t virtio_net_receive_rcu(NetClientState *nc, const uint8_t *buf,
     if (!no_rss && n->rss_data.enabled && n->rss_data.enabled_software_rss) {
         int index = virtio_net_process_rss(nc, buf, size, &extra_hdr);
         if (index >= 0) {
-            NetClientState *nc2 = qemu_get_subqueue(n->nic, index);
+            NetClientState *nc2 =
+                qemu_get_subqueue(n->nic, index % n->curr_queue_pairs);
             return virtio_net_receive_rcu(nc2, buf, size, true);
         }
     }