[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aYYXAa2Fj36XG4yQ@p14s>
Date: Fri, 6 Feb 2026 09:29:53 -0700
From: Mathieu Poirier <mathieu.poirier@...aro.org>
To: Dan Carpenter <dan.carpenter@...aro.org>
Cc: Peng Fan <peng.fan@....com>,
Pengutronix Kernel Team <kernel@...gutronix.de>,
Fabio Estevam <festevam@...il.com>,
linux-remoteproc@...r.kernel.org, imx@...ts.linux.dev,
linux-arm-kernel@...ts.infradead.org,
linux-kernel <linux-kernel@...r.kernel.org>
Subject: Re: [bug report] remoteproc: imx_rproc: Introduce prepare ops for
imx_rproc_dcfg
On Fri, Feb 06, 2026 at 04:41:13PM +0300, Dan Carpenter wrote:
> [ Smatch checking is paused while we raise funding. #SadFace
> https://lore.kernel.org/all/aTaiGSbWZ9DJaGo7@stanley.mountain/ -dan ]
>
> Hello Peng Fan,
>
> Commit edd2a9956055 ("remoteproc: imx_rproc: Introduce prepare ops
> for imx_rproc_dcfg") from Jan 9, 2026 (linux-next), leads to the
> following Smatch static checker warning:
>
> drivers/remoteproc/imx_rproc.c:648 imx_rproc_prepare()
> warn: ignoring unreachable code.
>
> drivers/remoteproc/imx_rproc.c
> 605 static int imx_rproc_prepare(struct rproc *rproc)
> 606 {
> 607 struct imx_rproc *priv = rproc->priv;
> 608 struct device_node *np = priv->dev->of_node;
> 609 struct rproc_mem_entry *mem;
> 610 int i = 0;
> 611 u32 da;
> 612
> 613 /* Register associated reserved memory regions */
> 614 while (1) {
> 615 int err;
> 616 struct resource res;
> 617
> 618 err = of_reserved_mem_region_to_resource(np, i++, &res);
> 619 if (err)
> 620 return 0;
> 621
> 622 /*
> 623 * Ignore the first memory region which will be used vdev buffer.
> 624 * No need to do extra handlings, rproc_add_virtio_dev will handle it.
> 625 */
> 626 if (strstarts(res.name, "vdev0buffer"))
> 627 continue;
> 628
> 629 if (strstarts(res.name, "rsc-table"))
> 630 continue;
> 631
> 632 /* No need to translate pa to da, i.MX use same map */
> 633 da = res.start;
> 634
> 635 /* Register memory region */
> 636 mem = rproc_mem_entry_init(priv->dev, NULL, (dma_addr_t)res.start,
> 637 resource_size(&res), da,
> 638 imx_rproc_mem_alloc, imx_rproc_mem_release,
> 639 "%.*s", strchrnul(res.name, '@') - res.name,
> 640 res.name);
> 641 if (!mem)
> 642 return -ENOMEM;
> 643
> 644 rproc_coredump_add_segment(rproc, da, resource_size(&res));
> 645 rproc_add_carveout(rproc, mem);
> 646 }
> 647
> --> 648 if (priv->ops && priv->ops->prepare)
> 649 return priv->ops->prepare(rproc);
>
> This is unreachable code.
It looks like Dan (and Smatch) has a point.
>
> 650
> 651 return 0;
> 652 }
>
> regards,
> dan carpenter
>
Powered by blists - more mailing lists