Subject: Re: [PATCH net v1] net: macb: fix an issue about leak related system resources

From: Dejin Zheng <[email-masked]>
Date: Tue, 28 Apr 2020 21:11:59 +0800

On Tue, Apr 28, 2020 at 10:42:56AM +0200, Nicolas Ferre wrote:
> On 28/04/2020 at 05:24, Dejin Zheng wrote:
> > On Mon, Apr 27, 2020 at 01:33:41PM +0300, Andy Shevchenko wrote:
> > > On Sat, Apr 25, 2020 at 3:57 PM Dejin Zheng <[email-masked]> wrote:
> > > > 
> > > > A call of the function macb_init() can fail in the function
> > > > fu540_c000_init. The related system resources were not released
> > > > then. use devm_ioremap() to replace ioremap() for fix it.
> > > > 
> > > 
> > > Why not to go further and convert to use devm_platform_ioremap_resource()?
> > > 
> > devm_platform_ioremap_resource() will call devm_request_mem_region(),
> > and here did not do it.
> 
> And what about devm_platform_get_and_ioremap_resource()? This would
> streamline this whole fu540_c000_init() function.
>
Nicolas, the function devm_platform_get_and_ioremap_resource() will also
call devm_request_mem_region(), after call it, These IO addresses will
be monopolized by this driver. the devm_ioremap() and ioremap() are not
do this. if this IO addresses will be shared with the other driver, call
devm_platform_get_and_ioremap_resource() may be fail.

BR,
Dejin

> Regards,
>   Nicolas
> 
> > > > Fixes: c218ad559020ff9 ("macb: Add support for SiFive FU540-C000")
> > > > Cc: Andy Shevchenko <[email-masked]>
> > > > Signed-off-by: Dejin Zheng <[email-masked]>
> > > > ---
> > > >   drivers/net/ethernet/cadence/macb_main.c | 2 +-
> > > >   1 file changed, 1 insertion(+), 1 deletion(-)
> > > > 
> > > > diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
> > > > index a0e8c5bbabc0..edba2eb56231 100644
> > > > --- a/drivers/net/ethernet/cadence/macb_main.c
> > > > +++ b/drivers/net/ethernet/cadence/macb_main.c
> > > > @@ -4178,7 +4178,7 @@ static int fu540_c000_init(struct platform_device *pdev)
> > > >          if (!res)
> > > >                  return -ENODEV;
> > > > 
> > > > -       mgmt->reg = ioremap(res->start, resource_size(res));
> > > > +       mgmt->reg = devm_ioremap(&pdev->dev, res->start, resource_size(res));
> > > >          if (!mgmt->reg)
> > > >                  return -ENOMEM;
> > > > 
> 
> 
> -- 
> Nicolas Ferre