Re: [net-next PATCH v2 1/5] net: virtio dynamically disable/enable LRO
From: John Fastabend <john.fastabend@gmail.com>
Date: 2016-11-22 08:16:49
On 16-11-21 03:23 PM, Michael S. Tsirkin wrote:
On Sat, Nov 19, 2016 at 06:49:34PM -0800, John Fastabend wrote:quoted
This adds support for dynamically setting the LRO feature flag. The message to control guest features in the backend uses the CTRL_GUEST_OFFLOADS msg type. Signed-off-by: John Fastabend <redacted> --- drivers/net/virtio_net.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-)diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index ca5239a..8189e5b 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c@@ -1419,6 +1419,41 @@ static void virtnet_init_settings(struct net_device *dev) .set_settings = virtnet_set_settings, }; +static int virtnet_set_features(struct net_device *netdev, + netdev_features_t features) +{ + struct virtnet_info *vi = netdev_priv(netdev); + struct virtio_device *vdev = vi->vdev; + struct scatterlist sg; + u64 offloads = 0; + + if (features & NETIF_F_LRO) + offloads |= (1 << VIRTIO_NET_F_GUEST_TSO4) | + (1 << VIRTIO_NET_F_GUEST_TSO6); + + if (features & NETIF_F_RXCSUM) + offloads |= (1 << VIRTIO_NET_F_GUEST_CSUM); + + if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)) { + sg_init_one(&sg, &offloads, sizeof(uint64_t)); + if (!virtnet_send_command(vi, + VIRTIO_NET_CTRL_GUEST_OFFLOADS, + VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET, + &sg)) { + dev_warn(&netdev->dev, + "Failed to set guest offloads by virtnet command.\n"); + return -EINVAL; + } + } else if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS) && + !virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) { + dev_warn(&netdev->dev, + "No support for setting offloads pre version_1.\n"); + return -EINVAL; + }I don't get this last warning. VIRTIO_NET_F_CTRL_GUEST_OFFLOADS was exposes by legacy devices, I don't think it's related to VIRTIO_F_VERSION_1.
OK looks like I can just drop the else if branch here. Thanks, John