From: sashiko-bot@kernel.org
To: "Rosen Penev" <rosenp@gmail.com>
Cc: dlemoal@kernel.org, cassel@kernel.org, linux-ide@vger.kernel.org
Subject: Re: [PATCHv2] ata: sata_mv: Use platform_get_irq() to get interrupt
Date: Sun, 12 Jul 2026 22:31:53 +0000 [thread overview]
Message-ID: <20260712223153.B24241F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260712222003.1008136-1-rosenp@gmail.com>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
Pre-existing issues:
- [High] Missing NULL check for `mv_platform_data` causes a kernel panic if the driver is bound to a device without platform data.
- [High] The `pdev->num_resources != 1` check prevents initialization on legacy platforms that provide multiple resources.
- [High] Unbalanced clock cleanup in error path triggers CCF warnings.
- [High] Clock resource leak when port PHY retrieval fails.
--
--- Patch [1]: [PATCHv2] ata: sata_mv: Use platform_get_irq() to get interrupt ---
commit a89dd91d3fc9df13b699dc2ac8e0b99f240449bf
Author: Rosen Penev <rosenp@gmail.com>
ata: sata_mv: Use platform_get_irq() to get interrupt
Extract platform_get_irq() out of the conditional block to run it
unconditionally, replacing the direct use of irq_of_parse_and_map()
for DT-based systems. This simplifies the probe logic and avoids the
need for irq_dispose_mapping. Remove dead branch for platform_get_irq().
> diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
> index 41647a56a9f4e..a2bf9551a6008 100644
> --- a/drivers/ata/sata_mv.c
> +++ b/drivers/ata/sata_mv.c
> @@ -4054,17 +4054,13 @@ static int mv_platform_probe(struct platform_device *pdev)
> n_ports);
> return -EINVAL;
> }
> -
> - irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
> } else {
> mv_platform_data = dev_get_platdata(&pdev->dev);
> n_ports = mv_platform_data->n_ports;
[Severity: High]
This is a pre-existing issue, but is there a missing NULL check here?
If the driver is manually bound via sysfs to a platform device lacking platform
data (and without a device tree node), dev_get_platdata() returns NULL, which
is immediately dereferenced when accessing n_ports. Could this cause a panic?
> - irq = platform_get_irq(pdev, 0);
> }
> + irq = platform_get_irq(pdev, 0);
> if (irq < 0)
> return irq;
> - if (!irq)
> - return -EINVAL;
>
> host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
> hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
[Severity: High]
This isn't a bug introduced by this patch, but does the strict resource
validation in mv_platform_probe() prevent initialization on legacy platforms?
drivers/ata/sata_mv.c:mv_platform_probe() {
...
if (unlikely(pdev->num_resources != 1)) {
dev_err(&pdev->dev, "invalid number of resources\n");
return -EINVAL;
}
...
}
Legacy board files instantiate the sata_mv platform device with two resources
(an IORESOURCE_MEM and an IORESOURCE_IRQ). This validation causes the probe to
immediately abort with -EINVAL. Could this render the SATA controller unusable
on legacy Orion boards?
[Severity: High]
This is a pre-existing issue, but does the cleanup path in mv_platform_probe()
unbalance the clock enable count?
drivers/ata/sata_mv.c:mv_platform_probe() {
...
hpriv->clk = clk_get(&pdev->dev, NULL);
if (IS_ERR(hpriv->clk)) {
dev_notice(&pdev->dev, "cannot get optional clkdev\n");
} else {
rc = clk_prepare_enable(hpriv->clk);
if (rc)
goto err;
}
...
err:
if (!IS_ERR(hpriv->clk)) {
clk_disable_unprepare(hpriv->clk);
clk_put(hpriv->clk);
}
...
}
If clk_prepare_enable(hpriv->clk) fails, the code branches to the err label.
Because !IS_ERR(hpriv->clk) evaluates to true (the pointer is valid), the
cleanup path attempts to disable the clock despite the initialization failure.
Does this trigger a WARN_ON in the Common Clock Framework?
[Severity: High]
This is a pre-existing issue, but is there a clock resource leak in
mv_platform_probe() when port PHY retrieval fails?
drivers/ata/sata_mv.c:mv_platform_probe() {
...
for (port = 0; port < n_ports; port++) {
...
hpriv->port_clks[port] = clk_get(&pdev->dev, port_number);
if (!IS_ERR(hpriv->port_clks[port]))
clk_prepare_enable(hpriv->port_clks[port]);
sprintf(port_number, "port%d", port);
hpriv->port_phys[port] = devm_phy_optional_get(&pdev->dev,
port_number);
if (IS_ERR(hpriv->port_phys[port])) {
rc = PTR_ERR(hpriv->port_phys[port]);
hpriv->port_phys[port] = NULL;
...
hpriv->n_ports = port;
goto err;
} else
...
err:
...
for (port = 0; port < hpriv->n_ports; port++) {
if (!IS_ERR(hpriv->port_clks[port])) {
clk_disable_unprepare(hpriv->port_clks[port]);
clk_put(hpriv->port_clks[port]);
}
phy_power_off(hpriv->port_phys[port]);
}
...
}
Inside the per-port initialization loop, hpriv->port_clks[port] is obtained
and enabled. Immediately after, devm_phy_optional_get() is called. If this
fails (e.g., returning -EPROBE_DEFER), the error handler sets
hpriv->n_ports = port and jumps to the err label.
The cleanup loop iterates up to hpriv->n_ports - 1, thereby skipping the
current port and failing to call clk_disable_unprepare() and clk_put() on the
successfully acquired clock. Can this cause a clock reference leak that
accumulates if the PHY driver defers probing?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260712222003.1008136-1-rosenp@gmail.com?part=1
prev parent reply other threads:[~2026-07-12 22:31 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-12 22:20 [PATCHv2] ata: sata_mv: Use platform_get_irq() to get interrupt Rosen Penev
2026-07-12 22:31 ` sashiko-bot [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=20260712223153.B24241F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=rosenp@gmail.com \
--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.