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 <mzhiv...@akamai.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

Reply via email to