Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1343505 > unrolled thread
| Started by | Simon Xiao <sixiao@microsoft.com> |
|---|---|
| First post | 2016-02-25 22:50 +0100 |
| Last post | 2016-03-01 16:40 +0100 |
| Articles | 5 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH net-next] hv_netvsc: add ethtool support for set and get of settings Simon Xiao <sixiao@microsoft.com> - 2016-02-25 22:50 +0100
Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings David Miller <davem@davemloft.net> - 2016-02-29 23:10 +0100
Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings Ben Hutchings <ben@decadent.org.uk> - 2016-02-29 23:40 +0100
Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings David Miller <davem@davemloft.net> - 2016-03-01 00:00 +0100
Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings Ben Hutchings <ben@decadent.org.uk> - 2016-03-01 16:40 +0100
| From | Simon Xiao <sixiao@microsoft.com> |
|---|---|
| Date | 2016-02-25 22:50 +0100 |
| Subject | [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings |
| Message-ID | <r6bXk-1x8-17@gated-at.bofh.it> |
This patch allows the user to set and retrieve speed and duplex of the
hv_netvsc device via ethtool.
Example:
$ ethtool eth0
Settings for eth0:
...
Speed: Unknown!
Duplex: Unknown! (255)
...
$ ethtool -s eth0 speed 1000 duplex full
$ ethtool eth0
Settings for eth0:
...
Speed: 1000Mb/s
Duplex: Full
...
This is based on patches by Roopa Prabhu and Nikolay Aleksandrov.
Signed-off-by: Simon Xiao <sixiao@microsoft.com>
---
drivers/net/hyperv/hyperv_net.h | 4 +++
drivers/net/hyperv/netvsc_drv.c | 56 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+)
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index fcb92c0..b4c6878 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -658,6 +658,10 @@ struct net_device_context {
struct netvsc_stats __percpu *tx_stats;
struct netvsc_stats __percpu *rx_stats;
+
+ /* Ethtool settings */
+ u8 duplex;
+ u32 speed;
};
/* Per netvsc device */
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 202e2b1..e703b9a 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -799,6 +799,58 @@ static int netvsc_set_channels(struct net_device *net,
goto do_set;
}
+static bool netvsc_validate_ethtool_ss_cmd(const struct ethtool_cmd *cmd)
+{
+ struct ethtool_cmd diff1 = *cmd;
+ struct ethtool_cmd diff2 = {};
+
+ ethtool_cmd_speed_set(&diff1, 0);
+ diff1.duplex = 0;
+ /* advertising and cmd are usually set */
+ diff1.advertising = 0;
+ diff1.cmd = 0;
+ /* We set port to PORT_OTHER */
+ diff2.port = PORT_OTHER;
+
+ return !memcmp(&diff1, &diff2, sizeof(diff1));
+}
+
+static void netvsc_init_settings(struct net_device *dev)
+{
+ struct net_device_context *ndc = netdev_priv(dev);
+
+ ndc->speed = SPEED_UNKNOWN;
+ ndc->duplex = DUPLEX_UNKNOWN;
+}
+
+static int netvsc_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+ struct net_device_context *ndc = netdev_priv(dev);
+
+ ethtool_cmd_speed_set(cmd, ndc->speed);
+ cmd->duplex = ndc->duplex;
+ cmd->port = PORT_OTHER;
+
+ return 0;
+}
+
+static int netvsc_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+ struct net_device_context *ndc = netdev_priv(dev);
+ u32 speed;
+
+ speed = ethtool_cmd_speed(cmd);
+ if (!ethtool_validate_speed(speed) ||
+ !ethtool_validate_duplex(cmd->duplex) ||
+ !netvsc_validate_ethtool_ss_cmd(cmd))
+ return -EINVAL;
+
+ ndc->speed = speed;
+ ndc->duplex = cmd->duplex;
+
+ return 0;
+}
+
static int netvsc_change_mtu(struct net_device *ndev, int mtu)
{
struct net_device_context *ndevctx = netdev_priv(ndev);
@@ -923,6 +975,8 @@ static const struct ethtool_ops ethtool_ops = {
.get_channels = netvsc_get_channels,
.set_channels = netvsc_set_channels,
.get_ts_info = ethtool_op_get_ts_info,
+ .get_settings = netvsc_get_settings,
+ .set_settings = netvsc_set_settings,
};
static const struct net_device_ops device_ops = {
@@ -1112,6 +1166,8 @@ static int netvsc_probe(struct hv_device *dev,
netif_set_real_num_tx_queues(net, nvdev->num_chn);
netif_set_real_num_rx_queues(net, nvdev->num_chn);
+ netvsc_init_settings(net);
+
ret = register_netdev(net);
if (ret != 0) {
pr_err("Unable to register netdev.\n");
--
2.5.0
[toc] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-02-29 23:10 +0100 |
| Subject | Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings |
| Message-ID | <r7EaT-q9-15@gated-at.bofh.it> |
| In reply to | #1343505 |
From: Simon Xiao <sixiao@microsoft.com> Date: Thu, 25 Feb 2016 15:24:08 -0800 > This patch allows the user to set and retrieve speed and duplex of the > hv_netvsc device via ethtool. > > Example: > $ ethtool eth0 > Settings for eth0: > ... > Speed: Unknown! > Duplex: Unknown! (255) > ... > $ ethtool -s eth0 speed 1000 duplex full > $ ethtool eth0 > Settings for eth0: > ... > Speed: 1000Mb/s > Duplex: Full > ... > > This is based on patches by Roopa Prabhu and Nikolay Aleksandrov. > > Signed-off-by: Simon Xiao <sixiao@microsoft.com> Applied, thanks.
[toc] | [prev] | [next] | [standalone]
| From | Ben Hutchings <ben@decadent.org.uk> |
|---|---|
| Date | 2016-02-29 23:40 +0100 |
| Subject | Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings |
| Message-ID | <r7EDV-zZ-35@gated-at.bofh.it> |
| In reply to | #1346196 |
[Multipart message — attachments visible in raw view] — view raw
On Mon, 2016-02-29 at 17:09 -0500, David Miller wrote: > From: Simon Xiao <sixiao@microsoft.com> > Date: Thu, 25 Feb 2016 15:24:08 -0800 > > > This patch allows the user to set and retrieve speed and duplex of the > > hv_netvsc device via ethtool. > > > > Example: > > $ ethtool eth0 > > Settings for eth0: > > ... > > Speed: Unknown! > > Duplex: Unknown! (255) > > ... > > $ ethtool -s eth0 speed 1000 duplex full > > $ ethtool eth0 > > Settings for eth0: > > ... > > Speed: 1000Mb/s > > Duplex: Full > > ... > > > > This is based on patches by Roopa Prabhu and Nikolay Aleksandrov. > > > > Signed-off-by: Simon Xiao <sixiao@microsoft.com> > > Applied, thanks. I missed this due to flu, but now I look at it - I don't see the point. Link speed isn't meaingful for a memory-based transport, so "unknown" is correct. The link is effectively full duplex though. If the issue is that ethtool is a bit shouty about unknowns, let's consider changing that in ethtool, not teaching drivers to lie. Ben. -- Ben Hutchings If God had intended Man to program, we'd have been born with serial I/O ports.
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-03-01 00:00 +0100 |
| Subject | Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings |
| Message-ID | <r7EXg-Ih-23@gated-at.bofh.it> |
| In reply to | #1346222 |
From: Ben Hutchings <ben@decadent.org.uk> Date: Mon, 29 Feb 2016 22:34:38 +0000 > On Mon, 2016-02-29 at 17:09 -0500, David Miller wrote: >> From: Simon Xiao <sixiao@microsoft.com> >> Date: Thu, 25 Feb 2016 15:24:08 -0800 >> >> > This patch allows the user to set and retrieve speed and duplex of the >> > hv_netvsc device via ethtool. >> > >> > Example: >> > $ ethtool eth0 >> > Settings for eth0: >> > ... >> > Speed: Unknown! >> > Duplex: Unknown! (255) >> > ... >> > $ ethtool -s eth0 speed 1000 duplex full >> > $ ethtool eth0 >> > Settings for eth0: >> > ... >> > Speed: 1000Mb/s >> > Duplex: Full >> > ... >> > >> > This is based on patches by Roopa Prabhu and Nikolay Aleksandrov. >> > >> > Signed-off-by: Simon Xiao <sixiao@microsoft.com> >> >> Applied, thanks. > > I missed this due to flu, but now I look at it - I don't see the point. > Link speed isn't meaingful for a memory-based transport, so "unknown" > is correct. The link is effectively full duplex though. > > If the issue is that ethtool is a bit shouty about unknowns, let's > consider changing that in ethtool, not teaching drivers to lie. The issue is that certain bonding modes do not work properly without a speed being reported by a device. We're doing this for other "virtual" devices already thanks to changes that went in last week, so there is precedence.
[toc] | [prev] | [next] | [standalone]
| From | Ben Hutchings <ben@decadent.org.uk> |
|---|---|
| Date | 2016-03-01 16:40 +0100 |
| Subject | Re: [PATCH net-next] hv_netvsc: add ethtool support for set and get of settings |
| Message-ID | <r7Uz0-2wf-9@gated-at.bofh.it> |
| In reply to | #1346231 |
[Multipart message — attachments visible in raw view] — view raw
On Mon, 2016-02-29 at 17:50 -0500, David Miller wrote: > From: Ben Hutchings <ben@decadent.org.uk> > Date: Mon, 29 Feb 2016 22:34:38 +0000 > > > On Mon, 2016-02-29 at 17:09 -0500, David Miller wrote: > >> From: Simon Xiao <sixiao@microsoft.com> > >> Date: Thu, 25 Feb 2016 15:24:08 -0800 > >> > >> > This patch allows the user to set and retrieve speed and duplex of the > >> > hv_netvsc device via ethtool. > >> > > >> > Example: > >> > $ ethtool eth0 > >> > Settings for eth0: > >> > ... > >> > Speed: Unknown! > >> > Duplex: Unknown! (255) > >> > ... > >> > $ ethtool -s eth0 speed 1000 duplex full > >> > $ ethtool eth0 > >> > Settings for eth0: > >> > ... > >> > Speed: 1000Mb/s > >> > Duplex: Full > >> > ... > >> > > >> > This is based on patches by Roopa Prabhu and Nikolay Aleksandrov. > >> > > >> > Signed-off-by: Simon Xiao <sixiao@microsoft.com> > >> > >> Applied, thanks. > > > > I missed this due to flu, but now I look at it - I don't see the point. > > Link speed isn't meaingful for a memory-based transport, so "unknown" > > is correct. The link is effectively full duplex though. > > > > If the issue is that ethtool is a bit shouty about unknowns, let's > > consider changing that in ethtool, not teaching drivers to lie. > > The issue is that certain bonding modes do not work properly without > a speed being reported by a device. Ah, of course. > We're doing this for other "virtual" devices already thanks to changes > that went in last week, so there is precedence. I know, just wasn't convinced it was a good precedent. Ben. -- Ben Hutchings If God had intended Man to program, we'd have been born with serial I/O ports.
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web