[Intel-wired-lan] [PATCH iwl-net v1 1/1] e1000e: fix non-deterministic behavior in e1000_shutdown
Tony Nguyen
anthony.l.nguyen at intel.com
Tue Jan 2 18:29:08 UTC 2024
On 1/2/2024 6:14 AM, Vitaly Lifshits wrote:
> A non-deterministic behavior was found in e1000_shutdown function.
> In it, the variable retval is being evaluated according to the
> configurations in the hardware. Sometimes, it might be validated
> for a previous assignment, where it is wrong.
retval looks to be initialized to 0 [1] and its only use, prior to this,
is checked for error [2], so this value will only be 0 or the result of
e1000_enable_ulp_lpt_lp(). The code looks to work correctly, however,
this change does make it more readable. I'm ok with this going via
iwl-next, with a different commit message, as I think it reads cleaner,
but I don't believe there's a bug here.
Thanks,
Tony
> Therefore curly braces were added at that part of the code.
>
> Fixes: 74f350ee08e2 ("e1000e: Feature Enable PHY Ultra Low Power Mode (ULP)")
> Signed-off-by: Vitaly Lifshits <vitaly.lifshits at intel.com>
> ---
> drivers/net/ethernet/intel/e1000e/netdev.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
> index f536c856727c..e51d79d8a7d7 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -6691,14 +6691,14 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
> if (adapter->hw.phy.type == e1000_phy_igp_3) {
> e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
> } else if (hw->mac.type >= e1000_pch_lpt) {
> - if (wufc && !(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
> + if (wufc && !(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC))) {
> /* ULP does not support wake from unicast, multicast
> * or broadcast.
> */
> retval = e1000_enable_ulp_lpt_lp(hw, !runtime);
> -
> - if (retval)
> - return retval;
> + if (retval)
> + return retval;
> + }
> }
>
> /* Ensure that the appropriate bits are set in LPI_CTRL
[1]
https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/intel/e1000e/netdev.c#L6628
[2]
https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/intel/e1000e/netdev.c#L6677
More information about the Intel-wired-lan
mailing list