RE: [PATCH net-next 3/3] net: stmmac: Convert to phylink and remove phylib logic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Jon Hunter <jonathanh@xxxxxxxxxx>

> I have been looking at this a bit closer and I can see the problem. What
> happens is that ...
> 
> 1. stmmac_mac_link_up() is called and priv->eee_active is set to false
> 2. stmmac_eee_init() is called but because priv->eee_active is false,
>    timer_setup() for eee_ctrl_timer is never called.
> 3. stmmac_eee_init() returns true and so then priv->eee_enabled is set 
>    to true.
> 4. When stmmac_tx_clean() is called because priv->eee_enabled is set to    
>    true, mod_timer() is called for the eee_ctrl_timer, but because 
>    timer_setup() was never called, we hit the BUG defined at
>    kernel/time/timer.c:952, because no function is defined for the 
>    timer.
> 
> The following fixes it for me ...
> 
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -399,10 +399,13 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
>         mutex_lock(&priv->lock);
>  
>         /* Check if it needs to be deactivated */
> -       if (!priv->eee_active && priv->eee_enabled) {
> -               netdev_dbg(priv->dev, "disable EEE\n");
> -               del_timer_sync(&priv->eee_ctrl_timer);
> -               stmmac_set_eee_timer(priv, priv->hw, 0, tx_lpi_timer);
> +       if (!priv->eee_active) {
> +               if (priv->eee_enabled) {
> +                       netdev_dbg(priv->dev, "disable EEE\n");
> +                       del_timer_sync(&priv->eee_ctrl_timer);
> +                       stmmac_set_eee_timer(priv, priv->hw, 0, tx_lpi_timer);
> +               }
> +               mutex_unlock(&priv->lock);
>                 return false;
>         }
> 
> It also looks like you have a potention deadlock in the current code
> because in the case of if (!priv->eee_active && priv->eee_enabled)
> you don't unlock the mutex. The above fixes this as well. I can send a
> formal patch if this looks correct. 

Thanks for looking into this! The fix looks correct so if you could 
submit a patch it would be great!

Thanks,
Jose Miguel Abreu




[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux