From: sashiko-bot@kernel.org
To: "Elson Serrao" <elson.serrao@oss.qualcomm.com>
Cc: devicetree@vger.kernel.org, conor+dt@kernel.org, robh@kernel.org
Subject: Re: [PATCH v7 4/8] usb: misc: qcom_eud: add per-path role switch support
Date: Mon, 31 Aug 2026 03:17:27 +0000 [thread overview]
Message-ID: <20260831031727.E7BF81F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260831030147.1500616-5-elson.serrao@oss.qualcomm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but it is a pre-existing issue that remains unaddressed in the series. Missing locking between sysfs `port_store` and `enable_store` leads to race conditions, unbalanced PHY operations, and potential PHY refcount corruption.
- [High] This problem wasn't introduced by this patch, but it is a critical pre-existing bug. The hardirq handler calls `readl_poll_timeout()` which uses `usleep_range()`, leading to sleeping in atomic context.
--
commit e05abacd8a248a2f644735928e7cccc3961822a1
Author: Elson Serrao <elson.serrao@oss.qualcomm.com>
usb: misc: qcom_eud: add per-path role switch support
The commit replaces the single chip-level role switch with per-path role
switches to properly handle multi-path configurations. It also forwards
role change requests from the EUD to the respective USB controllers
and removes the unnecessary role switch call from enable_eud().
> diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c
> index 03d1c200658c8..45c90d9f3b1f6 100644
> --- a/drivers/usb/misc/qcom_eud.c
> +++ b/drivers/usb/misc/qcom_eud.c
[ ... ]
> @@ -270,12 +273,15 @@ static irqreturn_t handle_eud_irq(int irq, void *data)
[Severity: High]
This isn't a bug introduced by this patch, but it is a critical pre-existing
bug that remains unaddressed in the series. The primary hardirq handler
handle_eud_irq() calls pet_eud():
drivers/usb/misc/qcom_eud.c:handle_eud_irq() {
...
case EUD_INT_SAFE_MODE:
pet_eud(chip);
return IRQ_HANDLED;
...
}
Inside pet_eud(), we sleep in an atomic context:
drivers/usb/misc/qcom_eud.c:pet_eud() {
...
/* Delay to make sure detach pet is done before attach pet */
ret = readl_poll_timeout(chip->base + EUD_REG_SW_ATTACH_DET,
reg, (reg == 0), 1, 100);
...
}
Does this code trigger a "BUG: scheduling while atomic" and lead to a kernel
panic when the EUD_INT_SAFE_MODE hardware interrupt fires?
The readl_poll_timeout() macro uses usleep_range() under the hood when a
non-zero delay is provided, which is invalid to call from a hardirq handler.
> static irqreturn_t handle_eud_irq_thread(int irq, void *data)
> {
> struct eud_chip *chip = data;
[ ... ]
[Severity: High]
This is also a pre-existing issue, but I noticed a potential race condition
between sysfs callbacks that modify the port and enable states locklessly:
drivers/usb/misc/qcom_eud.c:port_store() {
...
/* Port selection must be done before enabling EUD */
if (chip->enabled)
return -EBUSY;
writel(port, chip->base + EUD_REG_PORT_SEL);
chip->port_idx = port;
...
}
and
drivers/usb/misc/qcom_eud.c:enable_store() {
...
if (enable) {
ret = enable_eud(chip);
if (!ret)
chip->enabled = enable;
...
}
Could concurrent execution of port_store() and enable_store() lead to race
conditions since they locklessly read and write chip->enabled and
chip->port_idx?
Can this result in unbalanced PHY operations, PHY refcount underflow, or
permanent resource leaks if the port index changes during an enable
operation?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831030147.1500616-1-elson.serrao@oss.qualcomm.com?part=4
next prev parent reply other threads:[~2026-08-31 3:17 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 3:01 [PATCH v7 0/8] Improve Qualcomm EUD driver and platform support Elson Serrao
2026-08-31 3:01 ` [PATCH v7 1/8] dt-bindings: soc: qcom: eud: Add per-path child nodes for UTMI routing Elson Serrao
2026-08-31 3:09 ` sashiko-bot
2026-08-31 22:39 ` Bjorn Andersson
2026-08-31 3:01 ` [PATCH v7 2/8] usb: misc: qcom_eud: add sysfs attribute for port selection Elson Serrao
2026-08-31 3:12 ` sashiko-bot
2026-08-31 3:01 ` [PATCH v7 3/8] usb: misc: qcom_eud: add per-path High-Speed PHY control Elson Serrao
2026-08-31 3:15 ` sashiko-bot
2026-08-31 3:01 ` [PATCH v7 4/8] usb: misc: qcom_eud: add per-path role switch support Elson Serrao
2026-08-31 3:17 ` sashiko-bot [this message]
2026-08-31 3:01 ` [PATCH v7 5/8] usb: misc: qcom_eud: improve enable_store API Elson Serrao
2026-08-31 3:13 ` sashiko-bot
2026-08-31 3:01 ` [PATCH v7 6/8] usb: misc: qcom_eud: add role-based EUD control Elson Serrao
2026-08-31 3:13 ` sashiko-bot
2026-09-01 11:36 ` Konrad Dybcio
2026-09-10 1:37 ` Elson Serrao
2026-08-31 3:01 ` [PATCH v7 7/8] usb: misc: qcom_eud: fix virtual attach/detach event handling Elson Serrao
2026-08-31 3:17 ` sashiko-bot
2026-08-31 3:01 ` [PATCH v7 8/8] arm64: dts: qcom: kodiak: Desribe EUD UTMI routing and connector mapping Elson Serrao
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=20260831031727.E7BF81F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=elson.serrao@oss.qualcomm.com \
--cc=robh@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 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.