From: Stephen Hemminger <stephen@networkplumber.org>
To: Ivan Malov <ivan.malov@arknetworks.am>
Cc: dev@dpdk.org, Andy Moreton <andy.moreton@amd.com>,
Viacheslav Galaktionov <viacheslav.galaktionov@arknetworks.am>,
Roman Zhukov <Roman.Zhukov@arknetworks.am>,
Pieter Jansen van Vuuren <pieter.jansen-van-vuuren@amd.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Subject: Re: [PATCH 0/3] net/sfc: miscellaneous bug fixes
Date: Tue, 11 Aug 2026 13:24:33 -0700 [thread overview]
Message-ID: <20260811132433.6f4551f2@phoenix.local> (raw)
In-Reply-To: <20260811174913.8961-1-ivan.malov@arknetworks.am>
On Tue, 11 Aug 2026 21:49:10 +0400
Ivan Malov <ivan.malov@arknetworks.am> wrote:
> Three independent fixes. The first ensures that Rx queue
> type flags are derived from scratch on every queue setup,
> preventing flags from a prior configuration persisting
> when an offload is disabled.
>
> The second patch removes an erroneous static qualifier
> from a flow RSS iterator variable, which incorrectly
> shared state between multiple interfaces.
>
> The third patch corrects reading of the advertised
> autoneg capability. When the user disables it, the
> corresponding bit was re-added upon the next
> link-state query.
>
> Ivan Malov (3):
> net/sfc: set Rx queue type flags from scratch on queue setup
> net/sfc: drop wrong static qualifier from iterator variable
> common/sfc_efx/base: fix reading advertised autoneg ability
>
> drivers/common/sfc_efx/base/efx_np.c | 11 +++++------
> drivers/common/sfc_efx/base/medford4_phy.c | 6 +++++-
> drivers/net/sfc/sfc_flow_rss.c | 2 +-
> drivers/net/sfc/sfc_rx.c | 2 +-
> 4 files changed, 12 insertions(+), 9 deletions(-)
>
Detailed AI review found some issues here.
Review of [PATCH 0/3] SFC bug fixes (Ivan Malov)
Patch 1/3 - net/sfc: set Rx queue type flags from scratch on queue setup
Error: replacing "|=" with "=" discards extra type flags that callers
seed via sfc_rx_qinit_info() immediately before sfc_rx_qinit().
Two call sites do this today:
drivers/net/sfc/sfc_repr_proxy.c:556
sfc_rx_qinit_info(sa, rxq->sw_index, EFX_RXQ_FLAG_INGRESS_MPORT);
sfc_rx_qinit(sa, rxq->sw_index, ...); /* line 562 */
drivers/net/sfc/sfc_mae_counter.c:870
sfc_rx_qinit_info(sa, sa->counter_rxq.sw_index,
EFX_RXQ_FLAG_USER_MARK);
sfc_rx_qinit(sa, sa->counter_rxq.sw_index, ...); /* line 875 */
sfc_rx_qinit_info() does "rxq_info->type_flags = extra_efx_type_flags"
(sfc_rx.c:1663). The "|=" at sfc_rx.c:1186 was what preserved that
value; with "=" it is overwritten before anything reads it.
Two consequences:
- rxq_info->type_flags is passed straight to efx_rx_qcreate()
(sfc_rx.c:822 and :842), so the hardware Rx prefix no longer
carries ingress mport / user mark for those queues.
- sfc_rx.c:1240 derives SFC_RXQ_FLAG_INGRESS_MPORT from type_flags,
and sfc_ef100_rx.c:824 consumes it. Representor proxy demux
loses its mport field.
EFX_RXQ_FLAG_USER_MARK is re-added at sfc_rx.c:1203, but only when
RTE_ETH_RX_METADATA_USER_MARK was negotiated or flow tunnel is active
- neither holds for the MAE counter queue.
The underlying problem the patch describes is real: sfc_rx_configure()
only calls sfc_rx_qinit_info() for newly added queues (sfc_rx.c:1837,
inside "while (sas->ethdev_rxq_count < nb_rx_queues)"), so existing
ethdev queues keep stale flags across a reconfigure. The fix needs to
reset only the offload-derived bits. Suggested approach: record the
caller-supplied flags in a separate field, e.g.
/* sfc_rx_qinit_info() */
rxq_info->extra_type_flags = extra_efx_type_flags;
rxq_info->type_flags = extra_efx_type_flags;
/* sfc_rx_qinit() */
rxq_info->type_flags = rxq_info->extra_type_flags |
((offloads & RTE_ETH_RX_OFFLOAD_SCATTER) ?
EFX_RXQ_FLAG_SCATTER : EFX_RXQ_FLAG_NONE);
Patch 2/3 - net/sfc: drop wrong static qualifier from iterator variable
Info: the change is correct, but the commit message overstates the
impact. TAILQ_FOREACH() assigns the variable from TAILQ_FIRST()
before the first iteration, and every return path returns a value
produced inside the loop, so the static storage is never read stale.
There is no observable misbehaviour to backport a fix for. Consider
rewording as a cleanup (unnecessary global state, not thread-safe by
construction) and dropping the Cc: stable and Fixes: tags, or state
explicitly that no functional change is expected.
Patch 3/3 - common/sfc_efx/base: fix reading advertised autoneg ability
Error: the first efx_np.c hunk does not apply to main. The patch
expects the block
if (lsp->enls_an_supported != B_FALSE)
lsp->enls_adv_cap_mask |= 1U << EFX_PHY_CAP_AN;
to sit after the LINK_STATE_OUT_ADVERTISED_ABILITIES conversion, but
upstream has it before it (efx_np.c:432), and at the position the
patch expects upstream has
if (status_flags & (1U << MC_CMD_LINK_STATUS_FLAGS_AN_ABLE))
lsp->enls_lp_cap_mask |= 1U << EFX_PHY_CAP_AN;
from 70857163b72a ("common/sfc_efx/base: fix autoneg detection with
netport MCDI"). git am and git apply -3 both fail on that hunk; the
efx_np_attach() hunk and medford4_phy.c apply cleanly. Please rebase
on main and resend.
The logic itself checks out on the rebased placement. Removing the
AN bit from enls_adv_cap_mask leaves only two consumers, and both are
covered: efx_np_attach() (efx_np.c:1005) now sets the bit itself, and
medford4_phy_get_link() (medford4_phy.c:43) restores it from
ep_adv_cap_mask. medford4_mac_poll() writes the result back into
ep_adv_cap_mask, so the bit is self-sustaining, and clearing it via
efx_phy_adv_cap_set() sticks. Setting it back is gated on
ep_phy_cap_mask (efx_phy.c:264), which attach only populates when
AN is supported, so the preserved bit cannot outlive AN support.
Info: the added local
const efx_port_t *port = &enp->en_port;
is used once and the file otherwise reaches through enp->en_port
directly (line 33) or names the local "epp" (medford4_phy_reconfigure,
medford4_mac_poll). Suggest dropping it:
preserve_an = enp->en_port.ep_adv_cap_mask &
(1U << EFX_PHY_CAP_AN);
Fixes: tags in all three patches resolve to real commits with matching
subjects.
prev parent reply other threads:[~2026-08-11 20:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 17:49 [PATCH 0/3] net/sfc: miscellaneous bug fixes Ivan Malov
2026-08-11 17:49 ` [PATCH 1/3] net/sfc: set Rx queue type flags from scratch on queue setup Ivan Malov
2026-08-11 17:49 ` [PATCH 2/3] net/sfc: drop wrong static qualifier from iterator variable Ivan Malov
2026-08-11 17:49 ` [PATCH 3/3] common/sfc_efx/base: fix reading advertised autoneg ability Ivan Malov
2026-08-11 20:24 ` Stephen Hemminger [this message]
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=20260811132433.6f4551f2@phoenix.local \
--to=stephen@networkplumber.org \
--cc=Roman.Zhukov@arknetworks.am \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=andy.moreton@amd.com \
--cc=dev@dpdk.org \
--cc=ivan.malov@arknetworks.am \
--cc=pieter.jansen-van-vuuren@amd.com \
--cc=viacheslav.galaktionov@arknetworks.am \
/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