On 02.06.2014 16:35, Jiri Pirko wrote:
Mon, Jun 02, 2014 at 04:25:15PM CEST, mpriv...@redhat.com wrote:
The link speed is available at /sys/class/net/$nic/speed.
However, the speed is printed in unsigned integer format. This
makes userspace applications read an incorrect value (which
moreover changes through several architectures) while in fact
'-1' should be reported.

Before the change:
  # cat /sys/class/net/eth0/speed
  4294967295

After the change:
  # cat /sys/class/net/eth0/speed
  -1

Signed-off-by: Michal Privoznik <mpriv...@redhat.com>
---
net/core/net-sysfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 1cac29e..99afdea 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -173,7 +173,7 @@ static ssize_t speed_show(struct device *dev,
        if (netif_running(netdev)) {
                struct ethtool_cmd cmd;
                if (!__ethtool_get_settings(netdev, &cmd))
-                       ret = sprintf(buf, fmt_udec, ethtool_cmd_speed(&cmd));
+                       ret = sprintf(buf, fmt_dec, ethtool_cmd_speed(&cmd));

I wonder why this should be signed. What -1 means? What driver reports
this?

This is e1000e. It seems like a default value. From e1000_get_settings() in drivers/net/ethernet/intel/e1000e/ethtool.c:

    speed = -1;
    ecmd->duplex = -1;

    if (netif_running(netdev)) {
        if (netif_carrier_ok(netdev)) {
            speed = adapter->link_speed;
            ecmd->duplex = adapter->link_duplex - 1;
        }
    } else if (!pm_runtime_suspended(netdev->dev.parent)) {
        ...
    }

    ethtool_cmd_speed_set(ecmd, speed);

If I unplug the cord, NIC is nor running nor runtime suspended.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to