From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Oleksij Rempel <o.rempel@pengutronix.de>
Cc: Jakub Kicinski <kuba@kernel.org>, Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <vladimir.oltean@nxp.com>,
Alexei Starovoitov <ast@kernel.org>,
Eric Dumazet <edumazet@google.com>, Rob Herring <robh@kernel.org>,
Florian Fainelli <f.fainelli@gmail.com>,
Donald Hunter <donald.hunter@gmail.com>,
Daniel Borkmann <daniel@iogearbox.net>,
Jonathan Corbet <corbet@lwn.net>,
John Fastabend <john.fastabend@gmail.com>,
Lukasz Majewski <lukma@denx.de>,
Maxime Chevallier <maxime.chevallier@bootlin.com>,
Stanislav Fomichev <sdf@fomichev.me>,
Paolo Abeni <pabeni@redhat.com>, Jiri Pirko <jiri@resnulli.us>,
Jesper Dangaard Brouer <hawk@kernel.org>,
Divya.Koppera@microchip.com,
Kory Maincent <kory.maincent@bootlin.com>,
Vadim Fedorenko <vadim.fedorenko@linux.dev>,
netdev@vger.kernel.org, Sabrina Dubroca <sd@queasysnail.net>,
linux-kernel@vger.kernel.org, kernel@pengutronix.de,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Heiner Kallweit <hkallweit1@gmail.com>
Subject: Re: [PATCH net-next v8 1/1] Documentation: net: add flow control guide and document ethtool API
Date: Fri, 28 Nov 2025 09:35:00 +0000 [thread overview]
Message-ID: <aSlsxNo_bpGbkfhe@shell.armlinux.org.uk> (raw)
In-Reply-To: <aSljeggP5UHYhFaP@pengutronix.de>
On Fri, Nov 28, 2025 at 09:55:22AM +0100, Oleksij Rempel wrote:
> Hi all,
>
> Before sending v9, I would like to summarize the discussion and validate
> the intended logic one last time.
>
> Based on the feedback (specifically Russell's clarification on API
> semantics and Phylink behavior), I will document the following logic.
>
> Proposed Text: Documentation/networking/flow_control.rst
> --------------------------------------------------------
>
> Kernel Policy: User Intent & Resolution
> =======================================
>
> The ethtool pause API ('ethtool -A' or '--pause') configures the **User
> Intent** for **Link-wide PAUSE** (IEEE 802.3 Annex 31B). The
> **Operational State** (what actually happens on the wire) is derived
> from this intent, the active link mode, and the link partner.
>
> **Disambiguation: Pause Autoneg vs. Link Autoneg**
> In this section, "autonegotiation" refers exclusively to the **Pause
> Autonegotiation** parameter ('ethtool -A / --pause ... autoneg <on|off>').
> This is distinct from, but interacts with, **Generic Link
> Autonegotiation** ('ethtool -s / --change ... autoneg <on|off>').
>
> The semantics of the Pause API depend on the 'autoneg' parameter:
>
> 1. **Resolution Mode** ('ethtool -A ... autoneg on')
> The user intends for the device to **respect the negotiated result**.
>
> - **Advertisement:** The system updates the PHY advertisement
> (Symmetric/Asymmetric pause bits if the link medium supports
> advertisement) to match the ``rx`` and ``tx`` parameters.
> - **Resolution:** The system configures the MAC to follow the standard
> IEEE 802.3 Resolution Truth Table based on the Local Advertisement
> vs. Link Partner Advertisement.
> - **Constraint:** If Link Autonegotiation ('ethtool -s / --change')
> is disabled, the resolution cannot occur. The Operational State
> effectively becomes **Disabled** (as negotiation is impossible)
> regardless of the advertisement. However, the system **MUST**
> accept this configuration as a valid stored intent for future use.
This looks fine to me now, thanks.
>
> 2. **Forced Mode** ('ethtool -A ... autoneg off')
> The user intends to **override negotiation** and force a specific
> state (if the link mode permits).
>
> - **Advertisement:** The system should update the PHY advertisement
> (if the link medium supports advertisement) to match the ``rx`` and
> ``tx`` parameters, ensuring the link partner is aware of the forced
> configuration.
> - **Resolution:** The system configures the MAC according to the
> specified ``rx`` and ``tx`` parameters, ignoring the link partner's
> advertisement.
>
> **Global Constraint: Full-Duplex Only**
> Link-wide PAUSE (Annex 31B) is strictly defined for **Full-Duplex** links.
> If the link mode is **Half-Duplex** (whether forced or negotiated),
> Link-wide PAUSE is operationally **disabled** regardless of the
> parameters set above.
>
> **Summary of "autoneg" Flag Meaning:**
> - true -> **Delegate decision:** "Use the IEEE 802.3 logic to decide."
> - false -> **Force decision:** "Do exactly what I say (if the link supports it)."
"if the network device supports it"
>
> Proposed Text: include/linux/ethtool.h
> --------------------------------------
>
> /**
> * @get_pauseparam: Report the configured administrative policy for
> * link-wide PAUSE (IEEE 802.3 Annex 31B). Drivers must fill struct
> * ethtool_pauseparam such that:
> * @autoneg:
> * This refers to **Pause Autoneg** (IEEE 802.3 Annex 31B) only.
> * true -> the device follows the negotiated result of pause
> * autonegotiation (Pause/Asym) when the link allows it;
"the device follows the result of pause autonegotiation
when the link allows it;"
> * false -> the device uses a forced configuration.
> * @rx_pause/@tx_pause:
> * Represent the desired policy (Administrative State).
> * In autoneg mode they describe what is to be advertised;
> * in forced mode they describe the MAC configuration to be forced.
> *
> * @set_pauseparam: Apply a policy for link-wide PAUSE (IEEE 802.3 Annex 31B).
> * @rx_pause/@tx_pause:
> * Desired state. If @autoneg is true, these define the
> * advertisement. If @autoneg is false, these define the
> * forced MAC configuration (and preferably the advertisement too).
> * @autoneg:
> * Select Resolution Mode (true) or Forced Mode (false).
> *
> * **Constraint Checking:**
> * Drivers MUST accept a setting of @autoneg (true) even if generic
> * link autonegotiation ('ethtool -s / --change') is currently disabled.
> * This allows the user to pre-configure the desired policy for future
> * link modes.
> *
> * New drivers are strongly encouraged to use phylink_ethtool_get_pauseparam()
> * and phylink_ethtool_set_pauseparam() which implement this logic
> * correctly.
> */
Apart from the two minor issues above,
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thanks!
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
next prev parent reply other threads:[~2025-11-28 9:35 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-19 14:03 [PATCH net-next v8 1/1] Documentation: net: add flow control guide and document ethtool API Oleksij Rempel
2025-11-26 2:19 ` Jakub Kicinski
2025-11-26 8:36 ` Oleksij Rempel
2025-11-26 22:42 ` Jakub Kicinski
2025-11-27 9:20 ` Oleksij Rempel
2025-11-27 15:07 ` Andrew Lunn
2025-11-27 15:31 ` Maxime Chevallier
2025-11-27 15:48 ` Andrew Lunn
2025-11-27 16:18 ` Russell King (Oracle)
2025-11-27 16:14 ` Russell King (Oracle)
2025-11-28 1:21 ` Jakub Kicinski
2025-11-27 16:10 ` Russell King (Oracle)
2025-11-28 1:27 ` Russell King (Oracle)
2025-11-28 1:47 ` Russell King (Oracle)
2025-11-28 8:55 ` Oleksij Rempel
2025-11-28 9:35 ` Russell King (Oracle) [this message]
2025-11-28 18:32 ` Jakub Kicinski
2025-11-28 20:16 ` Andrew Lunn
2025-11-28 20:38 ` Russell King (Oracle)
2025-11-28 22:17 ` Jakub Kicinski
2025-12-01 9:49 ` Oleksij Rempel
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=aSlsxNo_bpGbkfhe@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=Divya.Koppera@microchip.com \
--cc=andrew@lunn.ch \
--cc=ast@kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=hawk@kernel.org \
--cc=hkallweit1@gmail.com \
--cc=jiri@resnulli.us \
--cc=john.fastabend@gmail.com \
--cc=kernel@pengutronix.de \
--cc=kory.maincent@bootlin.com \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukma@denx.de \
--cc=maxime.chevallier@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=sd@queasysnail.net \
--cc=sdf@fomichev.me \
--cc=vadim.fedorenko@linux.dev \
--cc=vladimir.oltean@nxp.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.