lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 1 Apr 2019 13:14:28 -0400
From:   Michael Zhivich <mzhivich@...mai.com>
To:     <davem@...emloft.net>
CC:     <netdev@...r.kernel.org>, <dledford@...hat.com>, <andrew@...n.ch>,
        <LinoSanfilippo@....de>, <thomas.lendacky@....com>,
        <iyappan@...amperecomputing.com>, <quan@...amperecomputing.com>,
        <jcliburn@...il.com>, <siva.kallam@...adcom.com>,
        <sgoutham@...ium.com>, <shshaikh@...vell.com>,
        <bh74.an@...sung.com>, <peppe.cavallaro@...com>,
        <mcoquelin.stm32@...il.com>, <hkallweit1@...il.com>,
        Michael Zhivich <mzhivich@...mai.com>
Subject: [PATCH] ethtool: fix SPEED_UNKNOWN definition to avoid signed-unsigned comparison

When building C++ userspace code that includes ethtool.h
with "-Werror -Wall", g++ complains about signed-unsigned comparison in
ethtool_validate_speed() due to definition of SPEED_UNKNOWN as -1.

Change definition of SPEED_UNKNOWN to UINT_MAX to match the type of
ethtool_validate_speed() argument (__u32).

Update storage type for link speed in drivers to use u32 instead of int
or u16 to bring drivers up-to-date with ethtool.h which includes SPEED_*
constants larger than range of u16.

Fix usage of SPEED_* constants in
drivers/net/ethernet/cavium/thunder/thunder_bgx.c and
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c.

Signed-off-by: Michael Zhivich <mzhivich@...mai.com>
---
 drivers/infiniband/ulp/ipoib/ipoib_ethtool.c      |  7 ++++---
 drivers/net/dsa/mv88e6xxx/chip.c                  |  5 +++--
 drivers/net/dsa/mv88e6xxx/serdes.c                |  2 +-
 drivers/net/ethernet/alacritech/slic.h            |  2 +-
 drivers/net/ethernet/alacritech/slicoss.c         |  6 +++---
 drivers/net/ethernet/amd/xgbe/xgbe-mdio.c         |  2 +-
 drivers/net/ethernet/amd/xgbe/xgbe-phy-v1.c       |  2 +-
 drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c       |  4 ++--
 drivers/net/ethernet/amd/xgbe/xgbe.h              |  6 +++---
 drivers/net/ethernet/apm/xgene-v2/main.h          |  2 +-
 drivers/net/ethernet/apm/xgene/xgene_enet_main.h  |  2 +-
 drivers/net/ethernet/atheros/alx/hw.h             |  2 +-
 drivers/net/ethernet/atheros/alx/main.c           |  2 +-
 drivers/net/ethernet/broadcom/bgmac.h             |  2 +-
 drivers/net/ethernet/broadcom/tg3.c               |  8 ++++----
 drivers/net/ethernet/broadcom/tg3.h               |  4 ++--
 drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 16 ++++++++--------
 drivers/net/ethernet/qlogic/qlcnic/qlcnic.h       |  2 +-
 drivers/net/ethernet/samsung/sxgbe/sxgbe_common.h |  2 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac.h      |  2 +-
 drivers/net/phy/phy-core.c                        |  2 +-
 include/linux/phy.h                               |  4 ++--
 include/linux/phylink.h                           |  2 +-
 include/uapi/linux/ethtool.h                      |  2 +-
 24 files changed, 46 insertions(+), 44 deletions(-)

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c b/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
index 8342992..97c301a 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
@@ -157,7 +157,7 @@ static int ipoib_get_sset_count(struct net_device __always_unused *dev,
 }
 
 /* Return lane speed in unit of 1e6 bit/sec */
-static inline int ib_speed_enum_to_int(int speed)
+static inline u32 ib_speed_enum_to_int(int speed)
 {
 	switch (speed) {
 	case IB_SPEED_SDR:
@@ -181,7 +181,8 @@ static int ipoib_get_link_ksettings(struct net_device *netdev,
 {
 	struct ipoib_dev_priv *priv = ipoib_priv(netdev);
 	struct ib_port_attr attr;
-	int ret, speed, width;
+	int ret, width;
+	u32 speed;
 
 	if (!netif_carrier_ok(netdev)) {
 		cmd->base.speed = SPEED_UNKNOWN;
@@ -196,7 +197,7 @@ static int ipoib_get_link_ksettings(struct net_device *netdev,
 	speed = ib_speed_enum_to_int(attr.active_speed);
 	width = ib_width_enum_to_int(attr.active_width);
 
-	if (speed < 0 || width < 0)
+	if (speed == SPEED_UNKNOWN || width < 0)
 		return -EINVAL;
 
 	/* Except the following are set, the other members of
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index f4e2db4..de57fde 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -550,7 +550,7 @@ int mv88e6xxx_update(struct mv88e6xxx_chip *chip, int addr, int reg, u16 update)
 }
 
 int mv88e6xxx_port_setup_mac(struct mv88e6xxx_chip *chip, int port, int link,
-			     int speed, int duplex, int pause,
+			     u32 speed, int duplex, int pause,
 			     phy_interface_t mode)
 {
 	int err;
@@ -760,7 +760,8 @@ static void mv88e6xxx_mac_config(struct dsa_switch *ds, int port,
 				 const struct phylink_link_state *state)
 {
 	struct mv88e6xxx_chip *chip = ds->priv;
-	int speed, duplex, link, pause, err;
+	int duplex, link, pause, err;
+	u32 speed;
 
 	if ((mode == MLO_AN_PHY) && mv88e6xxx_phy_is_internal(ds, port))
 		return;
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index 6a5de1b7..83b26ef 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -511,7 +511,7 @@ static void mv88e6390_serdes_irq_link_sgmii(struct mv88e6xxx_chip *chip,
 {
 	struct dsa_switch *ds = chip->ds;
 	int duplex = DUPLEX_UNKNOWN;
-	int speed = SPEED_UNKNOWN;
+	u32 speed = SPEED_UNKNOWN;
 	int link, err;
 	u16 status;
 
diff --git a/drivers/net/ethernet/alacritech/slic.h b/drivers/net/ethernet/alacritech/slic.h
index 3add305..b218982 100644
--- a/drivers/net/ethernet/alacritech/slic.h
+++ b/drivers/net/ethernet/alacritech/slic.h
@@ -550,7 +550,7 @@ struct slic_device {
 	/* link configuration lock */
 	spinlock_t link_lock;
 	bool promisc;
-	int speed;
+	u32 speed;
 	unsigned int duplex;
 	bool is_fiber;
 	unsigned char model;
diff --git a/drivers/net/ethernet/alacritech/slicoss.c b/drivers/net/ethernet/alacritech/slicoss.c
index 16477aa..4bdbf65 100644
--- a/drivers/net/ethernet/alacritech/slicoss.c
+++ b/drivers/net/ethernet/alacritech/slicoss.c
@@ -280,7 +280,7 @@ static void slic_configure_mac(struct slic_device *sdev)
 	slic_write(sdev, SLIC_REG_WMCFG, val);
 }
 
-static void slic_configure_link_locked(struct slic_device *sdev, int speed,
+static void slic_configure_link_locked(struct slic_device *sdev, u32 speed,
 				       unsigned int duplex)
 {
 	struct net_device *dev = sdev->netdev;
@@ -306,7 +306,7 @@ static void slic_configure_link_locked(struct slic_device *sdev, int speed,
 	}
 }
 
-static void slic_configure_link(struct slic_device *sdev, int speed,
+static void slic_configure_link(struct slic_device *sdev, u32 speed,
 				unsigned int duplex)
 {
 	spin_lock_bh(&sdev->link_lock);
@@ -639,7 +639,7 @@ static void slic_handle_link_irq(struct slic_device *sdev)
 	struct slic_shmem *sm = &sdev->shmem;
 	struct slic_shmem_data *sm_data = sm->shmem_data;
 	unsigned int duplex;
-	int speed;
+	u32 speed;
 	u32 link;
 
 	link = le32_to_cpu(sm_data->link);
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
index 8a3a60b..9f165af3 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
@@ -1522,7 +1522,7 @@ static void xgbe_dump_phy_registers(struct xgbe_prv_data *pdata)
 	dev_dbg(dev, "\n*************************************************\n");
 }
 
-static int xgbe_phy_best_advertised_speed(struct xgbe_prv_data *pdata)
+static u32 xgbe_phy_best_advertised_speed(struct xgbe_prv_data *pdata)
 {
 	struct ethtool_link_ksettings *lks = &pdata->phy.lks;
 
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v1.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v1.c
index d16eae4..ce7e90c 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v1.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v1.c
@@ -533,7 +533,7 @@ static enum xgbe_mode xgbe_phy_switch_mode(struct xgbe_prv_data *pdata)
 }
 
 static enum xgbe_mode xgbe_phy_get_mode(struct xgbe_prv_data *pdata,
-					int speed)
+					u32 speed)
 {
 	struct xgbe_phy_data *phy_data = pdata->phy_data;
 
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
index 128cd64..7651f49 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
@@ -2204,7 +2204,7 @@ static enum xgbe_mode xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data,
 }
 
 static enum xgbe_mode xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data,
-					    int speed)
+					    u32 speed)
 {
 	switch (speed) {
 	case SPEED_100:
@@ -2245,7 +2245,7 @@ static enum xgbe_mode xgbe_phy_get_bp_mode(int speed)
 }
 
 static enum xgbe_mode xgbe_phy_get_mode(struct xgbe_prv_data *pdata,
-					int speed)
+					u32 speed)
 {
 	struct xgbe_phy_data *phy_data = pdata->phy_data;
 
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
index 47bcbcf..18f2ce6 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
@@ -617,7 +617,7 @@ struct xgbe_phy {
 	int address;
 
 	int autoneg;
-	int speed;
+	u32 speed;
 	int duplex;
 
 	int link;
@@ -863,7 +863,7 @@ struct xgbe_phy_impl_if {
 	/* Switch the PHY into various modes */
 	void (*set_mode)(struct xgbe_prv_data *, enum xgbe_mode);
 	/* Retrieve mode needed for a specific speed */
-	enum xgbe_mode (*get_mode)(struct xgbe_prv_data *, int);
+	enum xgbe_mode (*get_mode)(struct xgbe_prv_data *, u32);
 	/* Retrieve new/next mode when trying to auto-negotiate */
 	enum xgbe_mode (*switch_mode)(struct xgbe_prv_data *);
 	/* Retrieve current mode */
@@ -1234,7 +1234,7 @@ struct xgbe_prv_data {
 	/* Current PHY settings */
 	phy_interface_t phy_mode;
 	int phy_link;
-	int phy_speed;
+	u32 phy_speed;
 
 	/* MDIO/PHY related settings */
 	unsigned int phy_started;
diff --git a/drivers/net/ethernet/apm/xgene-v2/main.h b/drivers/net/ethernet/apm/xgene-v2/main.h
index 969b258..25d44db 100644
--- a/drivers/net/ethernet/apm/xgene-v2/main.h
+++ b/drivers/net/ethernet/apm/xgene-v2/main.h
@@ -70,7 +70,7 @@ struct xge_pdata {
 	struct net_device *ndev;
 	struct napi_struct napi;
 	struct xge_stats stats;
-	int phy_speed;
+	u32 phy_speed;
 	u8 nbufs;
 };
 
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h
index 9857685..0ace0bc 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h
@@ -196,7 +196,7 @@ struct xgene_cle_ops {
 struct xgene_enet_pdata {
 	struct net_device *ndev;
 	struct mii_bus *mdio_bus;
-	int phy_speed;
+	u32 phy_speed;
 	struct clk *clk;
 	struct platform_device *pdev;
 	enum xgene_enet_id enet_id;
diff --git a/drivers/net/ethernet/atheros/alx/hw.h b/drivers/net/ethernet/atheros/alx/hw.h
index e42d7e0..de6d241 100644
--- a/drivers/net/ethernet/atheros/alx/hw.h
+++ b/drivers/net/ethernet/atheros/alx/hw.h
@@ -480,7 +480,7 @@ struct alx_hw {
 
 	u32 smb_timer;
 	/* SPEED_* + DUPLEX_*, SPEED_UNKNOWN if link is down */
-	int link_speed;
+	u32 link_speed;
 	u8 duplex;
 
 	/* auto-neg advertisement or force mode config */
diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c
index e3538ba..5295fd4 100644
--- a/drivers/net/ethernet/atheros/alx/main.c
+++ b/drivers/net/ethernet/atheros/alx/main.c
@@ -1277,7 +1277,7 @@ static void alx_check_link(struct alx_priv *alx)
 {
 	struct alx_hw *hw = &alx->hw;
 	unsigned long flags;
-	int old_speed;
+	u32 old_speed;
 	int err;
 
 	/* clear PHY internal interrupt status, otherwise the main
diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h
index 40d02fe..0c9cf98 100644
--- a/drivers/net/ethernet/broadcom/bgmac.h
+++ b/drivers/net/ethernet/broadcom/bgmac.h
@@ -512,7 +512,7 @@ struct bgmac {
 	u32 int_mask;
 
 	/* Current MAC state */
-	int mac_speed;
+	u32 mac_speed;
 	int mac_duplex;
 
 	u8 phyaddr;
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 328373e..060a6f3 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -4283,7 +4283,7 @@ static void tg3_power_down(struct tg3 *tp)
 	pci_set_power_state(tp->pdev, PCI_D3hot);
 }
 
-static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
+static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex)
 {
 	switch (val & MII_TG3_AUX_STAT_SPDMASK) {
 	case MII_TG3_AUX_STAT_10HALF:
@@ -4787,7 +4787,7 @@ static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
 	bool current_link_up;
 	u32 bmsr, val;
 	u32 lcl_adv, rmt_adv;
-	u16 current_speed;
+	u32 current_speed;
 	u8 current_duplex;
 	int i, err;
 
@@ -5719,7 +5719,7 @@ static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
 static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
 {
 	u32 orig_pause_cfg;
-	u16 orig_active_speed;
+	u32 orig_active_speed;
 	u8 orig_active_duplex;
 	u32 mac_status;
 	bool current_link_up;
@@ -5823,7 +5823,7 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
 {
 	int err = 0;
 	u32 bmsr, bmcr;
-	u16 current_speed = SPEED_UNKNOWN;
+	u32 current_speed = SPEED_UNKNOWN;
 	u8 current_duplex = DUPLEX_UNKNOWN;
 	bool current_link_up = false;
 	u32 local_adv, remote_adv, sgsr;
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h
index a772a33..6953d05 100644
--- a/drivers/net/ethernet/broadcom/tg3.h
+++ b/drivers/net/ethernet/broadcom/tg3.h
@@ -2873,7 +2873,7 @@ struct tg3_tx_ring_info {
 struct tg3_link_config {
 	/* Describes what we're trying to get. */
 	u32				advertising;
-	u16				speed;
+	u32				speed;
 	u8				duplex;
 	u8				autoneg;
 	u8				flowctrl;
@@ -2882,7 +2882,7 @@ struct tg3_link_config {
 	u8				active_flowctrl;
 
 	u8				active_duplex;
-	u16				active_speed;
+	u32				active_speed;
 	u32				rmt_adv;
 };
 
diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
index 673c57b..81c281a 100644
--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
@@ -962,13 +962,13 @@ static void bgx_poll_for_sgmii_link(struct lmac *lmac)
 	lmac->last_duplex = (an_result >> 1) & 0x1;
 	switch (speed) {
 	case 0:
-		lmac->last_speed = 10;
+		lmac->last_speed = SPEED_10;
 		break;
 	case 1:
-		lmac->last_speed = 100;
+		lmac->last_speed = SPEED_100;
 		break;
 	case 2:
-		lmac->last_speed = 1000;
+		lmac->last_speed = SPEED_1000;
 		break;
 	default:
 		lmac->link_up = false;
@@ -1012,10 +1012,10 @@ static void bgx_poll_for_link(struct work_struct *work)
 	    !(smu_link & SMU_RX_CTL_STATUS)) {
 		lmac->link_up = 1;
 		if (lmac->lmac_type == BGX_MODE_XLAUI)
-			lmac->last_speed = 40000;
+			lmac->last_speed = SPEED_40000;
 		else
-			lmac->last_speed = 10000;
-		lmac->last_duplex = 1;
+			lmac->last_speed = SPEED_10000;
+		lmac->last_duplex = DUPLEX_FULL;
 	} else {
 		lmac->link_up = 0;
 		lmac->last_speed = SPEED_UNKNOWN;
@@ -1105,8 +1105,8 @@ static int bgx_lmac_enable(struct bgx *bgx, u8 lmacid)
 			} else {
 				/* Default to below link speed and duplex */
 				lmac->link_up = true;
-				lmac->last_speed = 1000;
-				lmac->last_duplex = 1;
+				lmac->last_speed = SPEED_1000;
+				lmac->last_duplex = DUPLEX_FULL;
 				bgx_sgmii_change_link_state(lmac);
 				return 0;
 			}
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 0c443ea..374a4d4 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -497,7 +497,7 @@ struct qlcnic_hardware_context {
 	u16 board_type;
 	u16 supported_type;
 
-	u16 link_speed;
+	u32 link_speed;
 	u16 link_duplex;
 	u16 link_autoneg;
 	u16 module_type;
diff --git a/drivers/net/ethernet/samsung/sxgbe/sxgbe_common.h b/drivers/net/ethernet/samsung/sxgbe/sxgbe_common.h
index c61f260..55b70d0 100644
--- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_common.h
+++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_common.h
@@ -475,7 +475,7 @@ struct sxgbe_priv_data {
 	spinlock_t stats_lock;	/* lock for tx/rx statatics */
 
 	int oldlink;
-	int speed;
+	u32 speed;
 	int oldduplex;
 	struct mii_bus *mii;
 	int mii_irq[PHY_MAX_ADDR];
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index dd95d95..31a4ecb 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -148,7 +148,7 @@ struct stmmac_priv {
 	struct stmmac_channel channel[STMMAC_CH_MAX];
 
 	bool oldlink;
-	int speed;
+	u32 speed;
 	int oldduplex;
 	unsigned int flow_ctrl;
 	unsigned int pause;
diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
index 5016cd5f..63baf95 100644
--- a/drivers/net/phy/phy-core.c
+++ b/drivers/net/phy/phy-core.c
@@ -6,7 +6,7 @@
 #include <linux/phy.h>
 #include <linux/of.h>
 
-const char *phy_speed_to_str(int speed)
+const char *phy_speed_to_str(u32 speed)
 {
 	switch (speed) {
 	case SPEED_10:
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 3408489..0f54fa4 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -404,7 +404,7 @@ struct phy_device {
 	 * forced speed & duplex (no autoneg)
 	 * partner speed & duplex & pause (autoneg)
 	 */
-	int speed;
+	u32 speed;
 	int duplex;
 	int pause;
 	int asym_pause;
@@ -656,7 +656,7 @@ struct phy_fixup {
 	int (*run)(struct phy_device *phydev);
 };
 
-const char *phy_speed_to_str(int speed);
+const char *phy_speed_to_str(u32 speed);
 const char *phy_duplex_to_str(unsigned int duplex);
 
 /* A structure for mapping a particular speed and duplex
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index 6411c62..eec2a32 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -46,7 +46,7 @@ struct phylink_link_state {
 	__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
 	__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
 	phy_interface_t interface;
-	int speed;
+	u32 speed;
 	int duplex;
 	int pause;
 	unsigned int link:1;
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index 3652b239..8f98475 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1587,7 +1587,7 @@ enum ethtool_link_mode_bit_indices {
 #define SPEED_100000		100000
 #define SPEED_200000		200000
 
-#define SPEED_UNKNOWN		-1
+#define SPEED_UNKNOWN		UINT_MAX
 
 static inline int ethtool_validate_speed(__u32 speed)
 {
-- 
2.7.4

Powered by blists - more mailing lists