From: "Michael S. Tsirkin" <mst@redhat.com>
To: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: Jonathan Corbet <corbet@lwn.net>,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
Jason Wang <jasowang@redhat.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
Shuah Khan <shuah@kernel.org>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, kvm@vger.kernel.org,
virtualization@lists.linux-foundation.org,
linux-kselftest@vger.kernel.org,
Yuri Benditovich <yuri.benditovich@daynix.com>,
Andrew Melnychenko <andrew@daynix.com>,
Stephen Hemminger <stephen@networkplumber.org>,
gur.stavi@huawei.com, devel@daynix.com
Subject: Re: [PATCH v2 3/3] tun: Set num_buffers for virtio 1.0
Date: Thu, 9 Jan 2025 02:32:18 -0500 [thread overview]
Message-ID: <20250109023144-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20250109-tun-v2-3-388d7d5a287a@daynix.com>
On Thu, Jan 09, 2025 at 03:58:45PM +0900, Akihiko Odaki wrote:
> The specification says the device MUST set num_buffers to 1 if
> VIRTIO_NET_F_MRG_RXBUF has not been negotiated.
>
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
How do we know this is v1 and not v0? Confused.
> ---
> drivers/net/tap.c | 2 +-
> drivers/net/tun.c | 6 ++++--
> drivers/net/tun_vnet.c | 14 +++++++++-----
> drivers/net/tun_vnet.h | 4 ++--
> 4 files changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/tap.c b/drivers/net/tap.c
> index 60804855510b..fe9554ee5b8b 100644
> --- a/drivers/net/tap.c
> +++ b/drivers/net/tap.c
> @@ -713,7 +713,7 @@ static ssize_t tap_put_user(struct tap_queue *q,
> int total;
>
> if (q->flags & IFF_VNET_HDR) {
> - struct virtio_net_hdr vnet_hdr;
> + struct virtio_net_hdr_v1 vnet_hdr;
>
> vnet_hdr_len = READ_ONCE(q->vnet_hdr_sz);
>
> diff --git a/drivers/net/tun.c b/drivers/net/tun.c
> index dbf0dee92e93..f211d0580887 100644
> --- a/drivers/net/tun.c
> +++ b/drivers/net/tun.c
> @@ -1991,7 +1991,9 @@ static ssize_t tun_put_user_xdp(struct tun_struct *tun,
> size_t total;
>
> if (tun->flags & IFF_VNET_HDR) {
> - struct virtio_net_hdr gso = { 0 };
> + struct virtio_net_hdr_v1 gso = {
> + .num_buffers = __virtio16_to_cpu(true, 1)
> + };
>
> vnet_hdr_sz = READ_ONCE(tun->vnet_hdr_sz);
> ret = tun_vnet_hdr_put(vnet_hdr_sz, iter, &gso);
> @@ -2044,7 +2046,7 @@ static ssize_t tun_put_user(struct tun_struct *tun,
> }
>
> if (vnet_hdr_sz) {
> - struct virtio_net_hdr gso;
> + struct virtio_net_hdr_v1 gso;
>
> ret = tun_vnet_hdr_from_skb(tun->flags, tun->dev, skb, &gso);
> if (ret < 0)
> diff --git a/drivers/net/tun_vnet.c b/drivers/net/tun_vnet.c
> index ffb2186facd3..a7a7989fae56 100644
> --- a/drivers/net/tun_vnet.c
> +++ b/drivers/net/tun_vnet.c
> @@ -130,15 +130,17 @@ int tun_vnet_hdr_get(int sz, unsigned int flags, struct iov_iter *from,
> EXPORT_SYMBOL_GPL(tun_vnet_hdr_get);
>
> int tun_vnet_hdr_put(int sz, struct iov_iter *iter,
> - const struct virtio_net_hdr *hdr)
> + const struct virtio_net_hdr_v1 *hdr)
> {
> + int content_sz = MIN(sizeof(*hdr), sz);
> +
> if (iov_iter_count(iter) < sz)
> return -EINVAL;
>
> - if (copy_to_iter(hdr, sizeof(*hdr), iter) != sizeof(*hdr))
> + if (copy_to_iter(hdr, content_sz, iter) != content_sz)
> return -EFAULT;
>
> - if (iov_iter_zero(sz - sizeof(*hdr), iter) != sz - sizeof(*hdr))
> + if (iov_iter_zero(sz - content_sz, iter) != sz - content_sz)
> return -EFAULT;
>
> return 0;
> @@ -154,11 +156,11 @@ EXPORT_SYMBOL_GPL(tun_vnet_hdr_to_skb);
>
> int tun_vnet_hdr_from_skb(unsigned int flags, const struct net_device *dev,
> const struct sk_buff *skb,
> - struct virtio_net_hdr *hdr)
> + struct virtio_net_hdr_v1 *hdr)
> {
> int vlan_hlen = skb_vlan_tag_present(skb) ? VLAN_HLEN : 0;
>
> - if (virtio_net_hdr_from_skb(skb, hdr,
> + if (virtio_net_hdr_from_skb(skb, (struct virtio_net_hdr *)hdr,
> tun_vnet_is_little_endian(flags), true,
> vlan_hlen)) {
> struct skb_shared_info *sinfo = skb_shinfo(skb);
> @@ -176,6 +178,8 @@ int tun_vnet_hdr_from_skb(unsigned int flags, const struct net_device *dev,
> return -EINVAL;
> }
>
> + hdr->num_buffers = 1;
> +
> return 0;
> }
> EXPORT_SYMBOL_GPL(tun_vnet_hdr_from_skb);
> diff --git a/drivers/net/tun_vnet.h b/drivers/net/tun_vnet.h
> index 2dfdbe92bb24..d8fd94094227 100644
> --- a/drivers/net/tun_vnet.h
> +++ b/drivers/net/tun_vnet.h
> @@ -12,13 +12,13 @@ int tun_vnet_hdr_get(int sz, unsigned int flags, struct iov_iter *from,
> struct virtio_net_hdr *hdr);
>
> int tun_vnet_hdr_put(int sz, struct iov_iter *iter,
> - const struct virtio_net_hdr *hdr);
> + const struct virtio_net_hdr_v1 *hdr);
>
> int tun_vnet_hdr_to_skb(unsigned int flags, struct sk_buff *skb,
> const struct virtio_net_hdr *hdr);
>
> int tun_vnet_hdr_from_skb(unsigned int flags, const struct net_device *dev,
> const struct sk_buff *skb,
> - struct virtio_net_hdr *hdr);
> + struct virtio_net_hdr_v1 *hdr);
>
> #endif /* TUN_VNET_H */
>
> --
> 2.47.1
next prev parent reply other threads:[~2025-01-09 7:32 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-09 6:58 [PATCH v2 0/3] tun: Unify vnet implementation and fill full vnet header Akihiko Odaki
2025-01-09 6:58 ` [PATCH v2 1/3] tun: Unify vnet implementation Akihiko Odaki
2025-01-09 14:06 ` Willem de Bruijn
2025-01-10 8:28 ` Akihiko Odaki
2025-01-10 3:24 ` Jason Wang
2025-01-09 6:58 ` [PATCH v2 2/3] tun: Pad virtio header with zero Akihiko Odaki
2025-01-09 7:31 ` Michael S. Tsirkin
2025-01-09 7:41 ` Akihiko Odaki
2025-01-09 7:43 ` Michael S. Tsirkin
2025-01-09 9:36 ` Akihiko Odaki
2025-01-09 10:37 ` Jan Kara
2025-01-09 12:46 ` Willem de Bruijn
2025-01-10 4:38 ` Akihiko Odaki
2025-01-10 8:33 ` Michael S. Tsirkin
2025-01-10 10:45 ` Akihiko Odaki
2025-01-10 11:32 ` Willem de Bruijn
2025-01-09 7:42 ` Michael S. Tsirkin
2025-01-10 3:27 ` Jason Wang
2025-01-10 10:25 ` Akihiko Odaki
2025-01-09 6:58 ` [PATCH v2 3/3] tun: Set num_buffers for virtio 1.0 Akihiko Odaki
2025-01-09 7:32 ` Michael S. Tsirkin [this message]
2025-01-09 7:40 ` Michael S. Tsirkin
2025-01-09 9:38 ` Akihiko Odaki
2025-01-09 10:54 ` Michael S. Tsirkin
2025-01-09 11:10 ` Akihiko Odaki
2025-01-10 3:27 ` Jason Wang
2025-01-10 10:04 ` Akihiko Odaki
2025-01-10 10:23 ` Michael S. Tsirkin
2025-01-10 11:12 ` Akihiko Odaki
2025-01-13 3:04 ` Jason Wang
2025-01-15 5:07 ` Akihiko Odaki
2025-01-16 1:06 ` Jason Wang
2025-01-16 5:30 ` Akihiko Odaki
2025-01-20 0:40 ` Jason Wang
2025-01-20 4:57 ` Akihiko Odaki
2025-01-09 13:46 ` [PATCH v2 0/3] tun: Unify vnet implementation and fill full vnet header Willem de Bruijn
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=20250109023144-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=akihiko.odaki@daynix.com \
--cc=andrew@daynix.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=devel@daynix.com \
--cc=edumazet@google.com \
--cc=gur.stavi@huawei.com \
--cc=jasowang@redhat.com \
--cc=kuba@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=shuah@kernel.org \
--cc=stephen@networkplumber.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=willemdebruijn.kernel@gmail.com \
--cc=xuanzhuo@linux.alibaba.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 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.