lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 9 Feb 2022 12:44:45 +0800
From:   Jason Wang <jasowang@...hat.com>
To:     Andrew Melnychenko <andrew@...nix.com>, davem@...emloft.net,
        kuba@...nel.org, mst@...hat.com, netdev@...r.kernel.org,
        linux-kernel@...r.kernel.org,
        virtualization@...ts.linux-foundation.org
Cc:     yuri.benditovich@...nix.com, yan@...nix.com
Subject: Re: [RFC PATCH 5/5] drivers/net/virtio_net.c: Added USO support.


在 2022/1/25 下午4:47, Andrew Melnychenko 写道:
> Now, it possible to enable GSO_UDP_L4("tx-udp-segmentation") for VirtioNet.
>
> Signed-off-by: Andrew Melnychenko <andrew@...nix.com>
> ---
>   drivers/net/virtio_net.c | 22 ++++++++++++++++++----
>   1 file changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index a801ea40908f..a45eee022be4 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -60,13 +60,17 @@ static const unsigned long guest_offloads[] = {
>   	VIRTIO_NET_F_GUEST_TSO6,
>   	VIRTIO_NET_F_GUEST_ECN,
>   	VIRTIO_NET_F_GUEST_UFO,
> -	VIRTIO_NET_F_GUEST_CSUM
> +	VIRTIO_NET_F_GUEST_CSUM,
> +	VIRTIO_NET_F_GUEST_USO4,
> +	VIRTIO_NET_F_GUEST_USO6
>   };
>   
>   #define GUEST_OFFLOAD_GRO_HW_MASK ((1ULL << VIRTIO_NET_F_GUEST_TSO4) | \
>   				(1ULL << VIRTIO_NET_F_GUEST_TSO6) | \
>   				(1ULL << VIRTIO_NET_F_GUEST_ECN)  | \
> -				(1ULL << VIRTIO_NET_F_GUEST_UFO))
> +				(1ULL << VIRTIO_NET_F_GUEST_UFO)  | \
> +				(1ULL << VIRTIO_NET_F_GUEST_USO4) | \
> +				(1ULL << VIRTIO_NET_F_GUEST_USO6))
>   
>   struct virtnet_stat_desc {
>   	char desc[ETH_GSTRING_LEN];
> @@ -2530,7 +2534,9 @@ static int virtnet_xdp_set(struct net_device *dev, struct bpf_prog *prog,
>   	        virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_TSO6) ||
>   	        virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_ECN) ||
>   		virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_UFO) ||
> -		virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM))) {
> +		virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM) ||
> +		virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_USO4) ||
> +		virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_USO6))) {
>   		NL_SET_ERR_MSG_MOD(extack, "Can't set XDP while host is implementing GRO_HW/CSUM, disable GRO_HW/CSUM first");
>   		return -EOPNOTSUPP;
>   	}
> @@ -3155,6 +3161,8 @@ static int virtnet_probe(struct virtio_device *vdev)
>   			dev->hw_features |= NETIF_F_TSO6;
>   		if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_ECN))
>   			dev->hw_features |= NETIF_F_TSO_ECN;
> +		if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_USO))
> +			dev->hw_features |= NETIF_F_GSO_UDP_L4;
>   
>   		dev->features |= NETIF_F_GSO_ROBUST;
>   
> @@ -3169,6 +3177,9 @@ static int virtnet_probe(struct virtio_device *vdev)
>   		dev->features |= NETIF_F_GRO_HW;
>   	if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS))
>   		dev->hw_features |= NETIF_F_GRO_HW;
> +	if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_USO4) ||
> +	    virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_USO6))
> +		dev->hw_features |= NETIF_F_LRO;


I think we need to use GRO_HW, see dbcf24d153884 ("virtio-net: use 
NETIF_F_GRO_HW instead of NETIF_F_LRO"

Thanks


>   
>   	dev->vlan_features = dev->features;
>   
> @@ -3200,7 +3211,9 @@ static int virtnet_probe(struct virtio_device *vdev)
>   	if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO4) ||
>   	    virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO6) ||
>   	    virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_ECN) ||
> -	    virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_UFO))
> +	    virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_UFO) ||
> +	    virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_USO4) ||
> +	    virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_USO6))
>   		vi->big_packets = true;
>   
>   	if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF))
> @@ -3400,6 +3413,7 @@ static struct virtio_device_id id_table[] = {
>   	VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_UFO, VIRTIO_NET_F_HOST_TSO6, \
>   	VIRTIO_NET_F_HOST_ECN, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6, \
>   	VIRTIO_NET_F_GUEST_ECN, VIRTIO_NET_F_GUEST_UFO, \
> +	VIRTIO_NET_F_HOST_USO, VIRTIO_NET_F_GUEST_USO4, VIRTIO_NET_F_GUEST_USO6, \
>   	VIRTIO_NET_F_MRG_RXBUF, VIRTIO_NET_F_STATUS, VIRTIO_NET_F_CTRL_VQ, \
>   	VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN, \
>   	VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ, \

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ