* [PATCHv2 net-next] net: dsa: b53: srab: propagate errors from init helpers
@ 2026-07-27 23:40 Rosen Penev
2026-07-28 7:59 ` Jonas Gorski
0 siblings, 1 reply; 2+ messages in thread
From: Rosen Penev @ 2026-07-27 23:40 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, Jonas Gorski, Andrew Lunn, Vladimir Oltean,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
open list
Convert b53_srab_prepare_irq() and b53_srab_mux_init() from void to
int-returning functions so probe failures are properly propagated.
b53_srab_prepare_irq() now returns -ENOMEM on allocation failure and
-EPROBE_DEFER if any port IRQ is not yet available.
b53_srab_mux_init() now returns PTR_ERR on ioremap failure instead of
silently ignoring it.
Check and propagate both return values in b53_srab_probe() so the
driver core sees the real error instead of always reaching
b53_switch_register().
Add error handling in probe as a result of b53_srab_prepare_irq().
Assisted-by: Opencode:Big-Pickle
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v2: address memory leak in b53_srab_prepare_irq().
drivers/net/dsa/b53/b53_srab.c | 36 ++++++++++++++++++++++++++--------
1 file changed, 28 insertions(+), 8 deletions(-)
diff --git a/drivers/net/dsa/b53/b53_srab.c b/drivers/net/dsa/b53/b53_srab.c
index b9939bbd2cd5..289504321f3e 100644
--- a/drivers/net/dsa/b53/b53_srab.c
+++ b/drivers/net/dsa/b53/b53_srab.c
@@ -531,7 +531,7 @@ static void b53_srab_intr_set(struct b53_srab_priv *priv, bool set)
writel(reg, priv->regs + B53_SRAB_CTRLS);
}
-static void b53_srab_prepare_irq(struct platform_device *pdev)
+static int b53_srab_prepare_irq(struct platform_device *pdev)
{
struct b53_device *dev = platform_get_drvdata(pdev);
struct b53_srab_priv *priv = dev->priv;
@@ -551,18 +551,22 @@ static void b53_srab_prepare_irq(struct platform_device *pdev)
name = kasprintf(GFP_KERNEL, "link_state_p%d", i);
if (!name)
- return;
+ return -ENOMEM;
port->num = i;
port->dev = dev;
port->irq = platform_get_irq_byname_optional(pdev, name);
kfree(name);
+ if (port->irq == -EPROBE_DEFER)
+ return port->irq;
}
b53_srab_intr_set(priv, true);
+
+ return 0;
}
-static void b53_srab_mux_init(struct platform_device *pdev)
+static int b53_srab_mux_init(struct platform_device *pdev)
{
struct b53_device *dev = platform_get_drvdata(pdev);
struct b53_srab_priv *priv = dev->priv;
@@ -572,11 +576,11 @@ static void b53_srab_mux_init(struct platform_device *pdev)
int ret;
if (dev->pdata && dev->pdata->chip_id != BCM58XX_DEVICE_ID)
- return;
+ return -ENODEV;
priv->mux_config = devm_platform_ioremap_resource(pdev, 1);
if (IS_ERR(priv->mux_config))
- return;
+ return PTR_ERR(priv->mux_config);
/* Obtain the port mux configuration so we know which lanes
* actually map to SerDes lanes
@@ -613,6 +617,8 @@ static void b53_srab_mux_init(struct platform_device *pdev)
dev_info(&pdev->dev, "Port %d mode: %s\n",
port, phy_modes(p->mode));
}
+
+ return 0;
}
static int b53_srab_probe(struct platform_device *pdev)
@@ -622,6 +628,7 @@ static int b53_srab_probe(struct platform_device *pdev)
const struct of_device_id *of_id = NULL;
struct b53_srab_priv *priv;
struct b53_device *dev;
+ int err;
if (dn)
of_id = of_match_node(b53_srab_of_match, dn);
@@ -651,10 +658,23 @@ static int b53_srab_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, dev);
- b53_srab_prepare_irq(pdev);
- b53_srab_mux_init(pdev);
+ err = b53_srab_prepare_irq(pdev);
+ if (err)
+ return err;
+
+ err = b53_srab_mux_init(pdev);
+ if (err)
+ goto err_irq;
+
+ err = b53_switch_register(dev);
+ if (err)
+ goto err_irq;
+
+ return 0;
- return b53_switch_register(dev);
+err_irq:
+ b53_srab_intr_set(priv, false);
+ return err;
}
static void b53_srab_remove(struct platform_device *pdev)
--
2.55.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCHv2 net-next] net: dsa: b53: srab: propagate errors from init helpers
2026-07-27 23:40 [PATCHv2 net-next] net: dsa: b53: srab: propagate errors from init helpers Rosen Penev
@ 2026-07-28 7:59 ` Jonas Gorski
0 siblings, 0 replies; 2+ messages in thread
From: Jonas Gorski @ 2026-07-28 7:59 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, Florian Fainelli, Andrew Lunn, Vladimir Oltean,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
open list
Hi,
On Tue, Jul 28, 2026 at 1:40 AM Rosen Penev <rosenp@gmail.com> wrote:
>
> Convert b53_srab_prepare_irq() and b53_srab_mux_init() from void to
> int-returning functions so probe failures are properly propagated.
>
> b53_srab_prepare_irq() now returns -ENOMEM on allocation failure and
> -EPROBE_DEFER if any port IRQ is not yet available.
>
> b53_srab_mux_init() now returns PTR_ERR on ioremap failure instead of
> silently ignoring it.
>
> Check and propagate both return values in b53_srab_probe() so the
> driver core sees the real error instead of always reaching
> b53_switch_register().
>
> Add error handling in probe as a result of b53_srab_prepare_irq().
>
> Assisted-by: Opencode:Big-Pickle
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
> ---
> v2: address memory leak in b53_srab_prepare_irq().
> drivers/net/dsa/b53/b53_srab.c | 36 ++++++++++++++++++++++++++--------
> 1 file changed, 28 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/dsa/b53/b53_srab.c b/drivers/net/dsa/b53/b53_srab.c
> index b9939bbd2cd5..289504321f3e 100644
> --- a/drivers/net/dsa/b53/b53_srab.c
> +++ b/drivers/net/dsa/b53/b53_srab.c
> @@ -531,7 +531,7 @@ static void b53_srab_intr_set(struct b53_srab_priv *priv, bool set)
> writel(reg, priv->regs + B53_SRAB_CTRLS);
> }
>
> -static void b53_srab_prepare_irq(struct platform_device *pdev)
> +static int b53_srab_prepare_irq(struct platform_device *pdev)
> {
> struct b53_device *dev = platform_get_drvdata(pdev);
> struct b53_srab_priv *priv = dev->priv;
> @@ -551,18 +551,22 @@ static void b53_srab_prepare_irq(struct platform_device *pdev)
>
> name = kasprintf(GFP_KERNEL, "link_state_p%d", i);
> if (!name)
> - return;
> + return -ENOMEM;
>
> port->num = i;
> port->dev = dev;
> port->irq = platform_get_irq_byname_optional(pdev, name);
> kfree(name);
> + if (port->irq == -EPROBE_DEFER)
> + return port->irq;
> }
>
> b53_srab_intr_set(priv, true);
> +
> + return 0;
> }
>
> -static void b53_srab_mux_init(struct platform_device *pdev)
> +static int b53_srab_mux_init(struct platform_device *pdev)
> {
> struct b53_device *dev = platform_get_drvdata(pdev);
> struct b53_srab_priv *priv = dev->priv;
> @@ -572,11 +576,11 @@ static void b53_srab_mux_init(struct platform_device *pdev)
> int ret;
>
> if (dev->pdata && dev->pdata->chip_id != BCM58XX_DEVICE_ID)
> - return;
> + return -ENODEV;
I don't think this is correct. If you look at the b53_srab_of_match[]
table, only some srab devices have BCM58XX_DEVICE_ID, so returning an
error code here would break probing all other srab devices.
Just returning 0 here is not enough though ...
>
> priv->mux_config = devm_platform_ioremap_resource(pdev, 1);
> if (IS_ERR(priv->mux_config))
> - return;
> + return PTR_ERR(priv->mux_config);
... since some devices don't have match data, so their pdata is
unpoulated and the above check would still allow them, so they would
then be rejected here.
So the above check should be if (!dev->pdata || dev->pdata->chip_id !=
BCM58XX_DEVICE_ID) return 0;
Best regards,
Jonas
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-28 7:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-27 23:40 [PATCHv2 net-next] net: dsa: b53: srab: propagate errors from init helpers Rosen Penev
2026-07-28 7:59 ` Jonas Gorski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox