From: sashiko-bot@kernel.org
To: "Chih Kai Hsu" <hsu.chih.kai@realtek.com>
Cc: linux-usb@vger.kernel.org
Subject: Re: [PATCH net-next v6 08/10] r8152: add TGPHY register access for RTL8157 and RTL8159
Date: Fri, 09 Oct 2026 08:17:23 +0000 [thread overview]
Message-ID: <sashiko-outbox-165068@kernel.org> (raw)
In-Reply-To: <20261008081556.47901-9-nic_swsd@realtek.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] net: r8152: read_mii_word() propagates negative error codes to MII library
- [Medium] net: usb: r8152: silent divergence of software and hardware states on MII_ADVERTISE write failure
--
commit 1a66cb27853181290552776e26318bd7353533ff
Author: Chih Kai Hsu <hsu.chih.kai@realtek.com>
Subject: r8152: add TGPHY register access for RTL8157 and RTL8159
This commit introduces TGPHY command channel access for RTL8157 and RTL8159
chips, adding busy timeouts to register accesses. It updates the PHY accessors
to return integer error codes and propagates these statuses in several places,
while deferring other callers to a follow-up series.
> diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
> index b7c201ac6d160..023e7af4c5fa6 100644
> --- a/drivers/net/usb/r8152.c
> +++ b/drivers/net/usb/r8152.c
> @@ -1664,16 +1675,33 @@ static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data)
[ ... ]
> -static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr)
> +static int r8152_mdio_read(struct r8152 *tp, u32 reg_addr)
> {
> - return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2);
> + u16 data;
> + int ret;
> +
> + ret = ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2, &data);
> +
> + return ret < 0 ? ret : data;
> }
[Severity: High]
Does this introduce a regression by propagating negative error codes to the
MII library before the follow-up series is merged?
If a TGPHY access times out, this will return a negative error code
(like -ETIMEDOUT). This propagates back to read_mii_word(), which is used
as the MII library's mdio_read callback.
The MII library callbacks (e.g., mii_ethtool_get_link_ksettings, mii_link_ok)
expect a 16-bit register value and do not check for negative errors. They will
silently cast the negative integer to u16. A negative error code will have
spurious bits set, causing the MII library to misinterpret the link state
(e.g., falsely assuming BMCR_ANENABLE is set or BMSR_LSTATUS is cleared),
leading to silent link state corruption.
[ ... ]
> @@ -6601,7 +6779,11 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
> if (!advertising)
> return -EINVAL;
>
> - orig = r8152_mdio_read(tp, MII_ADVERTISE);
> + ret = r8152_mdio_read(tp, MII_ADVERTISE);
> + if (ret < 0)
> + goto out;
> +
> + orig = ret;
> new1 = orig & ~(ADVERTISE_10HALF | ADVERTISE_10FULL |
> ADVERTISE_100HALF | ADVERTISE_100FULL);
[ ... ]
> @@ -6628,7 +6810,11 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
> }
>
> if (tp->mii.supports_gmii) {
> - orig = r8152_mdio_read(tp, MII_CTRL1000);
> + ret = r8152_mdio_read(tp, MII_CTRL1000);
> + if (ret < 0)
> + goto out;
> +
> + orig = ret;
> new1 = orig & ~(ADVERTISE_1000FULL |
> ADVERTISE_1000HALF);
[Severity: Medium]
Are we missing error checks for the subsequent writes after these reads?
Looking at rtl8152_set_speed(), the return values of intermediate writes to
MII_ADVERTISE, MII_CTRL1000, and OCP_10GBT_CTRL are ignored:
if (orig != new1) {
r8152_mdio_write(tp, MII_ADVERTISE, new1);
tp->mii.advertising = new1;
}
If one of these writes fails due to a TGPHY timeout, the software state
variables (like tp->mii.advertising and tp->ups_info.speed_duplex) are still
unconditionally updated.
If the final write to MII_BMCR succeeds, the function returns 0 (success).
This causes the hardware to restart autonegotiation with old settings while
the driver falsely reports the new settings to userspace via ethtool. Could
this lead to a silent divergence between software and hardware states?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261008081556.47901-1-nic_swsd@realtek.com?part=8
next prev parent reply other threads:[~2026-10-09 8:17 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-08 8:15 [PATCH net-next v6 0/10] r8152: refactor and extend RTL8157/8159 support Chih Kai Hsu
2026-10-08 8:15 ` [PATCH net-next v6 01/10] r8152: split r8156_init per chip and factor out wait_autoload_done Chih Kai Hsu
2026-10-08 12:17 ` Birger Koblitz
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 02/10] r8152: add new init writes for RTL8156B/8157/8159 Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 03/10] r8152: split RTL_VER_17 into QFN68 and QFN100 package variants Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 04/10] r8152: split rtl8156_enable/up/down into per-chip-family functions Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 05/10] r8152: fix up and down register settings for RTL8156/8156B/8157/8159 Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 06/10] r8152: split r8157_hw_phy_cfg into RTL8157 and RTL8159 variants Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 07/10] r8152: add rtl8157_unload and rtl8157_change_mtu Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 08/10] r8152: add TGPHY register access for RTL8157 and RTL8159 Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot [this message]
2026-10-08 8:15 ` [PATCH net-next v6 09/10] r8152: extract rtl_fc_pause_pkt_en() and apply it to RTL8156/8157/8159 Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:15 ` [PATCH net-next v6 10/10] r8152: enable UPS for RTL8157 and RTL8159 QFN68 Chih Kai Hsu
2026-10-09 8:17 ` sashiko-bot
2026-10-08 8:19 ` [PATCH net-next v6 0/10] r8152: refactor and extend RTL8157/8159 support netdev-bot+sinfo
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=sashiko-outbox-165068@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=hsu.chih.kai@realtek.com \
--cc=linux-usb@vger.kernel.org \
--cc=sashiko-reviews@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox