The variables used to store return values of kernel and driver functions throughout the ixgbe driver are declared as u32 in several places. Such functions return negative errno values on error (e.g. -EIO, -EFAULT), which are sign-extended negative integers. Storing them in an unsigned u32 silently wraps the value: -EIO (0xFFFFFFF7) stored in u32 becomes a large positive number, so any "if (status)" truthiness check still works by accident, but comparisons against specific negative error codes or propagation up the call stack would produce wrong results.
In the Linux kernel, u32 is reserved for fixed-width quantities used in hardware interfaces or protocol structures. Using it for generic error codes misleads reviewers into thinking the value is hardware-constrained. Change all such local variables from u32 to int driver-wide: one in ixgbe_main.c (ixgbe_resume), three in ixgbe_phy.c (ixgbe_identify_phy_generic, ixgbe_tn_check_overtemp, ixgbe_set_copper_phy_power), and six in ixgbe_x550.c (ixgbe_check_link_t_X550em, ixgbe_get_lasi_ext_t_x550em, ixgbe_enable_lasi_ext_t_x550em, ixgbe_handle_lasi_ext_t_x550em, ixgbe_ext_phy_t_x550em_get_link, ixgbe_setup_internal_phy_t_x550em). No functional change. Signed-off-by: Aleksandr Loktionov <[email protected]> --- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +- drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 6 +++--- drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 210c7b9..703451d 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -7518,6 +7518,6 @@ static int ixgbe_resume(struct device *dev_d) struct pci_dev *pdev = to_pci_dev(dev_d); struct ixgbe_adapter *adapter = pci_get_drvdata(pdev); struct net_device *netdev = adapter->netdev; - u32 err; + int err; adapter->hw.hw_addr = adapter->io_addr; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c index a1b2c3d..b4c5d6e 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c @@ -264,5 +264,5 @@ int ixgbe_identify_phy_generic(struct ixgbe_hw *hw) { - u32 status = -EFAULT; + int status = -EFAULT; u32 phy_addr; if (!hw->phy.phy_semaphore_mask) { @@ -2812,6 +2812,6 @@ bool ixgbe_tn_check_overtemp(struct ixgbe_hw *hw) { u16 phy_data = 0; - u32 status; + int status; if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM) return false; @@ -2833,5 +2833,5 @@ int ixgbe_set_copper_phy_power(struct ixgbe_hw *hw, bool on) { - u32 status; + int status; u16 reg; /* Bail if we don't have copper phy */ diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c index c1d2e3f..d4e5f6a 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c @@ -1912,6 +1912,6 @@ static int ixgbe_check_link_t_X550em(struct ixgbe_hw *hw, bool link_up_wait_to_complete) { - u32 status; + int status; u16 i, autoneg_status; if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper) @@ -2331,6 +2331,6 @@ static int ixgbe_get_lasi_ext_t_x550em(struct ixgbe_hw *hw, bool *lsc, bool *is_overtemp) { - u32 status; + int status; u16 reg; *is_overtemp = false; @@ -2419,6 +2419,6 @@ static int ixgbe_enable_lasi_ext_t_x550em(struct ixgbe_hw *hw) { bool lsc, overtemp; - u32 status; + int status; u16 reg; /* Clear interrupt flags */ @@ -2512,7 +2512,7 @@ static int ixgbe_handle_lasi_ext_t_x550em(struct ixgbe_hw *hw, { struct ixgbe_phy_info *phy = &hw->phy; bool lsc; - u32 status; + int status; status = ixgbe_get_lasi_ext_t_x550em(hw, &lsc, is_overtemp); if (status) @@ -2608,5 +2608,5 @@ static int ixgbe_ext_phy_t_x550em_get_link(struct ixgbe_hw *hw, bool *link_up) { - u32 ret; + int ret; u16 autoneg_status; *link_up = false; @@ -2642,7 +2642,7 @@ static int ixgbe_setup_internal_phy_t_x550em(struct ixgbe_hw *hw) { ixgbe_link_speed force_speed; bool link_up; - u32 status; + int status; u16 speed; if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper) -- 2.52.0
