virtio_net: ethtool tx napi configuration
Subsystems (4)
PATCH v3 1/1 virtio_net: ethtool tx napi configuration
Implement ethtool .set_coalesce (-C) and .get_coalesce (-c) handlers. Interrupt moderation is currently not supported, so these accept and display the default settings of 0 usec and 1 frame.
Toggle tx napi through setting tx-frames. So as to not interfere with possible future interrupt moderation, value 1 means tx napi while value 0 means not.
Only allow the switching when device is down for simplicity.
---
Changes from V2:
- only allow the switching when device is done
- remove unnecessary global variable and initialization
Changes from V1:
- try to synchronize with datapath to allow changing mode when interface is up.
- use tx-frames 0 as to disable tx napi while tx-frames 1 to enable tx napi
--- drivers/net/virtio_net.c | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+)
drivers/net/virtio_net.c +50 -0
@@ -2181,6 +2181,54 @@ static int virtnet_get_link_ksettings(struct net_device *dev,return 0 ; } +static int virtnet_set_coalesce (struct net_device *dev, +struct ethtool_coalesce *ec) +{ +struct ethtool_coalesce ec_default = { + .cmd =ETHTOOL_SCOALESCE , + .rx_max_coalesced_frames =1 , + }; +struct virtnet_info *vi =netdev_priv (dev); +int i, napi_weight; +bool running =netif_running (dev); + +if (ec->tx_max_coalesced_frames >1 ) +return -EINVAL ; + + ec_default.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; + napi_weight = ec->tx_max_coalesced_frames ?NAPI_POLL_WEIGHT :0 ; + +/* disallow changes to fields not explicitly tested above */ +if (memcmp (ec, &ec_default,sizeof (ec_default))) +return -EINVAL ; + +if (napi_weight ^ vi->sq[0 ].napi.weight) { +if (dev->flags &IFF_UP ) +return -EBUSY ; +for (i =0 ; i < vi->max_queue_pairs; i++) + vi->sq[i].napi.weight = napi_weight; + } + +return 0 ; +} + +static int virtnet_get_coalesce (struct net_device *dev, +struct ethtool_coalesce *ec) +{ +struct ethtool_coalesce ec_default = { + .cmd =ETHTOOL_GCOALESCE , + .rx_max_coalesced_frames =1 , + }; +struct virtnet_info *vi =netdev_priv (dev); + +memcpy (ec, &ec_default,sizeof (ec_default)); + +if (vi->sq[0 ].napi.weight) + ec->tx_max_coalesced_frames =1 ; + +return 0 ; +} +static void virtnet_init_settings (struct net_device *dev) {struct virtnet_info *vi =netdev_priv (dev);
@@ -2219,6 +2267,8 @@ static const struct ethtool_ops virtnet_ethtool_ops = { .get_ts_info = ethtool_op_get_ts_info, .get_link_ksettings = virtnet_get_link_ksettings, .set_link_ksettings = virtnet_set_link_ksettings, + .set_coalesce = virtnet_set_coalesce, + .get_coalesce = virtnet_get_coalesce, };static void virtnet_freeze_down (struct virtio_device *vdev)
Signature · 1 line
2.17.1
From: Jason Wang <[email protected]>
Date: Tue, 9 Oct 2018 10:06:26 +0800
Quoted 14 lines
Implement ethtool .set_coalesce (-C) and .get_coalesce (-c) handlers. Interrupt moderation is currently not supported, so these accept and display the default settings of 0 usec and 1 frame.
Toggle tx napi through setting tx-frames. So as to not interfere with possible future interrupt moderation, value 1 means tx napi while value 0 means not.
Only allow the switching when device is down for simplicity.
Suggested-by Jason Wang <[email protected]>Signed-off-by Willem de Bruijn <[email protected]>Signed-off-by Jason Wang <[email protected]>
Quoted 8 lines
---
Changes from V2:
- only allow the switching when device is done
- remove unnecessary global variable and initialization
Changes from V1:
- try to synchronize with datapath to allow changing mode when interface is up.
- use tx-frames 0 as to disable tx napi while tx-frames 1 to enable tx napi
Applied, with...
drivers/net/virtio_net.c static int virtnet_get_link_ksettings(struct net_device *dev, · line 2193
Quoted 1 line
drivers/net/virtio_net.c +1
-0+bool running =netif_running (dev);
this unused variable removed.
Quoted 25 lines · David Miller
From: Jason Wang <[email protected]>
Date: Tue, 9 Oct 2018 10:06:26 +0800Quoted 14 lines
Implement ethtool .set_coalesce (-C) and .get_coalesce (-c) handlers. Interrupt moderation is currently not supported, so these accept and display the default settings of 0 usec and 1 frame.
Toggle tx napi through setting tx-frames. So as to not interfere with possible future interrupt moderation, value 1 means tx napi while value 0 means not.
Only allow the switching when device is down for simplicity.
Suggested-by Jason Wang <[email protected]>Signed-off-by Willem de Bruijn <[email protected]>Signed-off-by Jason Wang <[email protected]>Quoted 8 lines
---
Changes from V2:
- only allow the switching when device is done
- remove unnecessary global variable and initialization
Changes from V1:
- try to synchronize with datapath to allow changing mode when interface is up.
- use tx-frames 0 as to disable tx napi while tx-frames 1 to enable tx napi
Quoted 4 lines
Applied, with...
drivers/net/virtio_net.c static int virtnet_get_link_ksettings(struct net_device *dev, · line 2193
Quoted 1 line
drivers/net/virtio_net.c +1
-0+bool running =netif_running (dev);this unused variable removed.
My bad, thanks for the fixup.
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Quoted 25 lines · David Miller
From: Jason Wang <[email protected]>
Date: Tue, 9 Oct 2018 10:06:26 +0800Quoted 14 lines
Implement ethtool .set_coalesce (-C) and .get_coalesce (-c) handlers. Interrupt moderation is currently not supported, so these accept and display the default settings of 0 usec and 1 frame.
Toggle tx napi through setting tx-frames. So as to not interfere with possible future interrupt moderation, value 1 means tx napi while value 0 means not.
Only allow the switching when device is down for simplicity.
Suggested-by Jason Wang <[email protected]>Signed-off-by Willem de Bruijn <[email protected]>Signed-off-by Jason Wang <[email protected]>Quoted 8 lines
---
Changes from V2:
- only allow the switching when device is done
- remove unnecessary global variable and initialization
Changes from V1:
- try to synchronize with datapath to allow changing mode when interface is up.
- use tx-frames 0 as to disable tx napi while tx-frames 1 to enable tx napi
Quoted 4 lines
Applied, with...
drivers/net/virtio_net.c static int virtnet_get_link_ksettings(struct net_device *dev, · line 2193
Quoted 1 line
drivers/net/virtio_net.c +1
-0+bool running =netif_running (dev);this unused variable removed.
My bad, thanks for the fixup.
From: Jason Wang <[email protected]>
Date: Tue, 9 Oct 2018 10:06:26 +0800
Quoted 14 lines
Implement ethtool .set_coalesce (-C) and .get_coalesce (-c) handlers. Interrupt moderation is currently not supported, so these accept and display the default settings of 0 usec and 1 frame.
Toggle tx napi through setting tx-frames. So as to not interfere with possible future interrupt moderation, value 1 means tx napi while value 0 means not.
Only allow the switching when device is down for simplicity.
Suggested-by Jason Wang <[email protected]>Signed-off-by Willem de Bruijn <[email protected]>Signed-off-by Jason Wang <[email protected]>
Quoted 8 lines
---
Changes from V2:
- only allow the switching when device is done
- remove unnecessary global variable and initialization
Changes from V1:
- try to synchronize with datapath to allow changing mode when interface is up.
- use tx-frames 0 as to disable tx napi while tx-frames 1 to enable tx napi
Applied, with...
drivers/net/virtio_net.c static int virtnet_get_link_ksettings(struct net_device *dev, · line 2193
Quoted 1 line
drivers/net/virtio_net.c +1
-0+bool running =netif_running (dev);
this unused variable removed.