Commit 1a03b8a3 authored by Tonghao Zhang's avatar Tonghao Zhang Committed by David S. Miller
Browse files

virtio-net: don't disable guest csum when disable LRO



Open vSwitch and Linux bridge will disable LRO of the interface
when this interface added to them. Now when disable the LRO, the
virtio-net csum is disable too. That drops the forwarding performance.

Fixes: a02e8964 ("virtio-net: ethtool configurable LRO")
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Willem de Bruijn <willemb@google.com>
Signed-off-by: default avatarTonghao Zhang <xiangxia.m.yue@gmail.com>
Acked-by: default avatarWillem de Bruijn <willemb@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 78b70155
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -63,6 +63,11 @@ static const unsigned long guest_offloads[] = {
	VIRTIO_NET_F_GUEST_CSUM
};

#define GUEST_OFFLOAD_LRO_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))

struct virtnet_stat_desc {
	char desc[ETH_GSTRING_LEN];
	size_t offset;
@@ -2531,7 +2536,8 @@ static int virtnet_set_features(struct net_device *dev,
		if (features & NETIF_F_LRO)
			offloads = vi->guest_offloads_capable;
		else
			offloads = 0;
			offloads = vi->guest_offloads_capable &
				   ~GUEST_OFFLOAD_LRO_MASK;

		err = virtnet_set_guest_offloads(vi, offloads);
		if (err)