From: sashiko-bot@kernel.org
To: "Lorenzo Bianconi" <lorenzo@kernel.org>
Cc: krzk+dt@kernel.org, robh@kernel.org, conor+dt@kernel.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH net-next v5 12/12] net: airoha: Better handle MIB for GDM with multiple port attached
Date: Sun, 10 May 2026 14:05:06 +0000 [thread overview]
Message-ID: <20260510140506.DBBDCC2BCC9@smtp.kernel.org> (raw)
In-Reply-To: <20260509-airoha-eth-multi-serdes-v5-12-805e38edc2aa@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Moving the statistics lock from the port level to the device level introduces a race condition on shared hardware registers, causing cross-interface statistics corruption.
--
commit 29334a9bde18f0777df549f0d135356a4b8bd3ee
Author: Christian Marangi <ansuelsmth@gmail.com>
net: airoha: Better handle MIB for GDM with multiple port attached
This commit enables a split MIB feature for GDM3/4 to track counters per
hardware channel instead of per GDM port. It moves the statistics structure,
including its protecting lock, from the port level to the device level.
> diff --git a/drivers/net/ethernet/airoha/airoha_eth.c b/drivers/net/ethernet/airoha/airoha_eth.c
> index 623cac42dfb71..b1a6586293457 100644
> --- a/drivers/net/ethernet/airoha/airoha_eth.c
> +++ b/drivers/net/ethernet/airoha/airoha_eth.c
> @@ -1621,143 +1621,150 @@ static void airoha_update_hw_stats(struct airoha_gdm_dev *dev)
> struct airoha_eth *eth = dev->eth;
> u32 val, i = 0;
>
> - spin_lock(&port->stats.lock);
> - u64_stats_update_begin(&port->stats.syncp);
> + spin_lock(&dev->stats.lock);
> + u64_stats_update_begin(&dev->stats.syncp);
> +
> + /* Read relevant MIB for GDM with multiple port attached */
> + if (port->id == AIROHA_GDM3_IDX || port->id == AIROHA_GDM4_IDX)
> + airoha_fe_rmw(eth, REG_FE_GDM_MIB_CFG(port->id),
> + FE_TX_MIB_ID_MASK | FE_RX_MIB_ID_MASK,
> + FIELD_PREP(FE_TX_MIB_ID_MASK, dev->nbq) |
> + FIELD_PREP(FE_RX_MIB_ID_MASK, dev->nbq));
Does moving the lock from the port to the device level introduce a race
condition on the shared port MIB registers?
Because ndo_get_stats64 can be called concurrently without the RTNL lock, if two
CPUs request stats for two different devices on the same port:
CPU1 calls airoha_update_hw_stats() for dev_A:
spin_lock(&dev_A->stats.lock);
airoha_fe_rmw(..., REG_FE_GDM_MIB_CFG(port->id), ... dev_A->nbq);
CPU2 concurrently calls airoha_update_hw_stats() for dev_B:
spin_lock(&dev_B->stats.lock);
airoha_fe_rmw(..., REG_FE_GDM_MIB_CFG(port->id), ... dev_B->nbq);
Could CPU1 then read the hardware counters for dev_B instead of dev_A?
[ ... ]
> /* reset mib counters */
> airoha_fe_set(eth, REG_FE_GDM_MIB_CLEAR(port->id),
> FE_GDM_MIB_RX_CLEAR_MASK | FE_GDM_MIB_TX_CLEAR_MASK);
When CPU1 then clears the counters here, could it wipe out the unread
hardware statistics for dev_B?
Is a port-level lock still needed to exclusively protect access to these shared
hardware MIB registers across multiple devices?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260509-airoha-eth-multi-serdes-v5-0-805e38edc2aa@kernel.org?part=12
next prev parent reply other threads:[~2026-05-10 14:05 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-09 13:05 [PATCH net-next v5 00/12] net: airoha: Support multiple net_devices connected to the same GDM port Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 01/12] dt-bindings: net: airoha: Add EN7581 ethernet-ports properties Lorenzo Bianconi
2026-05-10 14:05 ` sashiko-bot
2026-05-11 10:44 ` Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 02/12] net: airoha: Reserve RX headroom to avoid skb reallocation Lorenzo Bianconi
2026-05-10 14:05 ` sashiko-bot
2026-05-11 8:13 ` Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 03/12] net: airoha: Introduce airoha_gdm_dev struct Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 04/12] net: airoha: Move airoha_qdma pointer in " Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 05/12] net: airoha: Rely on airoha_gdm_dev pointer in airhoa_is_lan_gdm_port() Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 06/12] net: airoha: Move qos_sq_bmap in airoha_gdm_dev struct Lorenzo Bianconi
2026-05-10 14:05 ` sashiko-bot
2026-05-11 8:47 ` Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 07/12] net: airoha: Move {cpu,fwd}_tx_packets " Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 08/12] net: airoha: Support multiple net_devices for a single FE GDM port Lorenzo Bianconi
2026-05-10 14:05 ` sashiko-bot
2026-05-11 7:54 ` Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 09/12] net: airoha: Do not stop GDM port if it is shared Lorenzo Bianconi
2026-05-10 14:05 ` sashiko-bot
2026-05-11 7:47 ` Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 10/12] net: airoha: Introduce WAN device flag Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 11/12] net: airoha: Support multiple LAN/WAN interfaces for hw MAC address configuration Lorenzo Bianconi
2026-05-10 14:05 ` sashiko-bot
2026-05-11 7:02 ` Lorenzo Bianconi
2026-05-09 13:05 ` [PATCH net-next v5 12/12] net: airoha: Better handle MIB for GDM with multiple port attached Lorenzo Bianconi
2026-05-10 14:05 ` sashiko-bot [this message]
2026-05-11 6:51 ` Lorenzo Bianconi
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=20260510140506.DBBDCC2BCC9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=lorenzo@kernel.org \
--cc=robh@kernel.org \
--cc=sashiko@lists.linux.dev \
/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.