lkml.org 
[lkml]   [2022]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 052/203] net: stmmac: reduce unnecessary wakeups from eee sw timer
    Date
    From: Jisheng Zhang <jszhang@kernel.org>

    [ Upstream commit c74ead223deb88bdf18af8c772d7ca5a9b6c3c2b ]

    Currently, on EEE capable platforms, if EEE SW timer is used, the SW
    timer cause 1 wakeup/s even if the TX has successfully entered EEE.
    Remove this unnecessary wakeup by only calling mod_timer() if we
    haven't successfully entered EEE.

    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 13 +++++++------
    1 file changed, 7 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    index c5ad28e543e43..f4015579e8adc 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    @@ -400,7 +400,7 @@ static void stmmac_lpi_entry_timer_config(struct stmmac_priv *priv, bool en)
    * Description: this function is to verify and enter in LPI mode in case of
    * EEE.
    */
    -static void stmmac_enable_eee_mode(struct stmmac_priv *priv)
    +static int stmmac_enable_eee_mode(struct stmmac_priv *priv)
    {
    u32 tx_cnt = priv->plat->tx_queues_to_use;
    u32 queue;
    @@ -410,13 +410,14 @@ static void stmmac_enable_eee_mode(struct stmmac_priv *priv)
    struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];

    if (tx_q->dirty_tx != tx_q->cur_tx)
    - return; /* still unfinished work */
    + return -EBUSY; /* still unfinished work */
    }

    /* Check and enter in LPI mode */
    if (!priv->tx_path_in_lpi_mode)
    stmmac_set_eee_mode(priv, priv->hw,
    priv->plat->en_tx_lpi_clockgating);
    + return 0;
    }

    /**
    @@ -448,8 +449,8 @@ static void stmmac_eee_ctrl_timer(struct timer_list *t)
    {
    struct stmmac_priv *priv = from_timer(priv, t, eee_ctrl_timer);

    - stmmac_enable_eee_mode(priv);
    - mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));
    + if (stmmac_enable_eee_mode(priv))
    + mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));
    }

    /**
    @@ -2641,8 +2642,8 @@ static int stmmac_tx_clean(struct stmmac_priv *priv, int budget, u32 queue)

    if (priv->eee_enabled && !priv->tx_path_in_lpi_mode &&
    priv->eee_sw_timer_en) {
    - stmmac_enable_eee_mode(priv);
    - mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));
    + if (stmmac_enable_eee_mode(priv))
    + mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));
    }

    /* We still have pending packets, let's call for a new scheduling */
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-02-14 11:27    [W:7.510 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site