From: Akihiko Odaki <akihiko.odaki@daynix.com>
To: Jason Wang <jasowang@redhat.com>,
Dmitry Fleytman <dmitry.fleytman@gmail.com>,
Sriram Yagnaraman <sriram.yagnaraman@est.tech>,
"Michael S. Tsirkin" <mst@redhat.com>,
Luigi Rizzo <rizzo@iet.unipi.it>,
Giuseppe Lettieri <g.lettieri@iet.unipi.it>,
Vincenzo Maffione <v.maffione@gmail.com>,
Andrew Melnychenko <andrew@daynix.com>,
Yuri Benditovich <yuri.benditovich@daynix.com>
Cc: qemu-devel@nongnu.org, Akihiko Odaki <akihiko.odaki@daynix.com>
Subject: [PATCH v8 04/19] net: Remove receive_raw()
Date: Sun, 10 Dec 2023 14:29:42 +0900 [thread overview]
Message-ID: <20231210-rss-v8-4-9553ee714d38@daynix.com> (raw)
In-Reply-To: <20231210-rss-v8-0-9553ee714d38@daynix.com>
While netmap implements virtio-net header, it does not implement
receive_raw(). Instead of implementing receive_raw for netmap, add
virtio-net headers in the common code and use receive_iov()/receive()
instead. This also fixes the buffer size for the virtio-net header.
Fixes: fbbdbddec0 ("tap: allow extended virtio header with hash info")
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
---
include/net/net.h | 1 -
net/net.c | 18 ++++++++++++------
net/tap.c | 1 -
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/include/net/net.h b/include/net/net.h
index 374a827190..899ed63047 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -72,7 +72,6 @@ typedef struct NetClientInfo {
NetClientDriver type;
size_t size;
NetReceive *receive;
- NetReceive *receive_raw;
NetReceiveIOV *receive_iov;
NetCanReceive *can_receive;
NetStart *start;
diff --git a/net/net.c b/net/net.c
index 2e70c4f221..3aa0fc393d 100644
--- a/net/net.c
+++ b/net/net.c
@@ -782,11 +782,7 @@ static ssize_t nc_sendv_compat(NetClientState *nc, const struct iovec *iov,
offset = iov_to_buf(iov, iovcnt, 0, buf, offset);
}
- if (flags & QEMU_NET_PACKET_FLAG_RAW && nc->info->receive_raw) {
- ret = nc->info->receive_raw(nc, buffer, offset);
- } else {
- ret = nc->info->receive(nc, buffer, offset);
- }
+ ret = nc->info->receive(nc, buffer, offset);
g_free(buf);
return ret;
@@ -801,6 +797,8 @@ static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
MemReentrancyGuard *owned_reentrancy_guard;
NetClientState *nc = opaque;
int ret;
+ struct virtio_net_hdr_v1_hash vnet_hdr = { };
+ g_autofree struct iovec *iov_copy = NULL;
if (nc->link_down) {
@@ -819,7 +817,15 @@ static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
owned_reentrancy_guard->engaged_in_io = true;
}
- if (nc->info->receive_iov && !(flags & QEMU_NET_PACKET_FLAG_RAW)) {
+ if ((flags & QEMU_NET_PACKET_FLAG_RAW) && nc->vnet_hdr_len) {
+ iov_copy = g_new(struct iovec, iovcnt + 1);
+ iov_copy[0].iov_base = &vnet_hdr;
+ iov_copy[0].iov_len = nc->vnet_hdr_len;
+ memcpy(&iov_copy[1], iov, iovcnt * sizeof(*iov));
+ iov = iov_copy;
+ }
+
+ if (nc->info->receive_iov) {
ret = nc->info->receive_iov(nc, iov, iovcnt);
} else {
ret = nc_sendv_compat(nc, iov, iovcnt, flags);
diff --git a/net/tap.c b/net/tap.c
index f2021b699c..09ad8ae255 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -360,7 +360,6 @@ static NetClientInfo net_tap_info = {
.type = NET_CLIENT_DRIVER_TAP,
.size = sizeof(TAPState),
.receive = tap_receive,
- .receive_raw = tap_receive_raw,
.receive_iov = tap_receive_iov,
.poll = tap_poll,
.cleanup = tap_cleanup,
--
2.43.0
next prev parent reply other threads:[~2023-12-10 5:31 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-10 5:29 [PATCH v8 00/19] virtio-net RSS/hash report fixes and improvements Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 01/19] tap: Remove tap_probe_vnet_hdr_len() Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 02/19] tap: Remove qemu_using_vnet_hdr() Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 03/19] net: Move virtio-net header length assertion Akihiko Odaki
2023-12-10 5:29 ` Akihiko Odaki [this message]
2023-12-10 5:29 ` [PATCH v8 05/19] tap: Call tap_receive_iov() from tap_receive() Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 06/19] tap: Shrink zeroed virtio-net header Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 07/19] virtio-net: Copy header only when necessary Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 08/19] virtio-net: Disable RSS on reset Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 09/19] virtio-net: Unify the logic to update NIC state for RSS Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 10/19] virtio-net: Return an error when vhost cannot enable RSS Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 11/19] virtio-net: Report RSS warning at device realization Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 12/19] virtio-net: Always set populate_hash Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 13/19] virtio-net: Do not write hashes to peer buffer Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 14/19] ebpf: Fix RSS error handling Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 15/19] ebpf: Use standard section name Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 16/19] ebpf: Simplify error handling Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 17/19] ebpf: Return 0 when configuration fails Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 18/19] ebpf: Refactor tun_rss_steering_prog() Akihiko Odaki
2023-12-10 5:29 ` [PATCH v8 19/19] ebpf: Add a separate target for skeleton Akihiko Odaki
2023-12-11 11:54 ` [PATCH v8 00/19] virtio-net RSS/hash report fixes and improvements Yuri Benditovich
2023-12-11 12:01 ` Akihiko Odaki
2023-12-11 12:34 ` Yuri Benditovich
2023-12-11 15:43 ` Michael S. Tsirkin
2023-12-11 19:51 ` Yuri Benditovich
2023-12-11 19:52 ` Yuri Benditovich
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=20231210-rss-v8-4-9553ee714d38@daynix.com \
--to=akihiko.odaki@daynix.com \
--cc=andrew@daynix.com \
--cc=dmitry.fleytman@gmail.com \
--cc=g.lettieri@iet.unipi.it \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rizzo@iet.unipi.it \
--cc=sriram.yagnaraman@est.tech \
--cc=v.maffione@gmail.com \
--cc=yuri.benditovich@daynix.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).