From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
To: Andrew Lunn <andrew@lunn.ch>, Heiner Kallweit <hkallweit1@gmail.com>
Cc: Eric Woudstra <ericwouds@gmail.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH net-next 8/9] net: stmmac: combine stmmac_enable_eee_mode()
Date: Mon, 13 Jan 2025 11:46:15 +0000 [thread overview]
Message-ID: <E1tXItb-000MBa-OU@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <Z4T84SbaC4D-fN5y@shell.armlinux.org.uk>
Combine stmmac_enable_eee_mode() with stmmac_try_to_start_sw_lpi()
which makes the code easier to read and the flow more logical. We
can now trivially see that if the transmit queues are busy, we
(re-)start the eee_ctrl_timer. Otherwise, if the transmit path is
not already in LPI mode, we ask the hardware to enter LPI mode.
I believe that now we can see better what is going on here, this
shows that there is a bug with the software LPI timer implementation.
The LPI timer is supposed to define how long after the last
transmittion completed before we start signalling LPI. However,
this code structure shows that if all transmit queues are empty,
and stmmac_try_to_start_sw_lpi() is called immediately after cleaning
the transmit queue, we will instruct the hardware to start signalling
LPI immediately.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
.../net/ethernet/stmicro/stmmac/stmmac_main.c | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 677a2172a85f..72f270013086 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -422,27 +422,22 @@ static void stmmac_restart_sw_lpi_timer(struct stmmac_priv *priv)
}
/**
- * stmmac_enable_eee_mode - check and enter in LPI mode
+ * stmmac_try_to_start_sw_lpi - check and enter in LPI mode
* @priv: driver private structure
* Description: this function is to verify and enter in LPI mode in case of
* EEE.
*/
-static int stmmac_enable_eee_mode(struct stmmac_priv *priv)
+static void stmmac_try_to_start_sw_lpi(struct stmmac_priv *priv)
{
- if (stmmac_eee_tx_busy(priv))
- return -EBUSY; /* still unfinished work */
+ if (stmmac_eee_tx_busy(priv)) {
+ stmmac_restart_sw_lpi_timer(priv);
+ return;
+ }
/* Check and enter in LPI mode */
if (!priv->tx_path_in_lpi_mode)
stmmac_set_eee_mode(priv, priv->hw,
priv->plat->flags & STMMAC_FLAG_EN_TX_LPI_CLOCKGATING);
- return 0;
-}
-
-static void stmmac_try_to_start_sw_lpi(struct stmmac_priv *priv)
-{
- if (stmmac_enable_eee_mode(priv))
- stmmac_restart_sw_lpi_timer(priv);
}
/**
--
2.30.2
next prev parent reply other threads:[~2025-01-13 11:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-13 11:45 [PATCH net-next 0/9] net: stmmac: further EEE cleanups (and one fix!) Russell King (Oracle)
2025-01-13 11:45 ` [PATCH net-next 1/9] net: stmmac: rename stmmac_disable_sw_eee_mode() Russell King (Oracle)
2025-01-13 11:45 ` [PATCH net-next 2/9] net: stmmac: correct priv->eee_sw_timer_en setting Russell King (Oracle)
2025-01-13 11:45 ` [PATCH net-next 3/9] net: stmmac: simplify TX cleanup decision for ending sw LPI mode Russell King (Oracle)
2025-01-13 11:45 ` [PATCH net-next 4/9] net: stmmac: check priv->eee_sw_timer_en in suspend path Russell King (Oracle)
2025-01-13 11:46 ` [PATCH net-next 5/9] net: stmmac: add stmmac_try_to_start_sw_lpi() Russell King (Oracle)
2025-01-13 11:46 ` [PATCH net-next 6/9] net: stmmac: provide stmmac_eee_tx_busy() Russell King (Oracle)
2025-01-13 11:46 ` [PATCH net-next 7/9] net: stmmac: provide function for restarting sw LPI timer Russell King (Oracle)
2025-01-13 11:46 ` Russell King (Oracle) [this message]
2025-01-13 11:46 ` [PATCH net-next 9/9] net: stmmac: restart LPI timer after cleaning transmit descriptors Russell King (Oracle)
2025-01-15 2:50 ` [PATCH net-next 0/9] net: stmmac: further EEE cleanups (and one fix!) patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1tXItb-000MBa-OU@rmk-PC.armlinux.org.uk \
--to=rmk+kernel@armlinux.org.uk \
--cc=alexandre.torgue@foss.st.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=ericwouds@gmail.com \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).