Re: [PATCH] drivers: Inline code in devm_platform_ioremap_resource() from two functions
On Fri, Jun 14, 2019 at 11:22:40AM +0200, Markus Elfring wrote: > From: Markus Elfring > Date: Fri, 14 Jun 2019 11:05:33 +0200 > > Two function calls were combined in this function implementation. > Inline corresponding code so that extra error checks can be avoided here. > > Signed-off-by: Markus Elfring > --- > drivers/base/platform.c | 39 ++- > 1 file changed, 34 insertions(+), 5 deletions(-) Hey, looks like you timed out from my kill-file and this snuck through somehow. Let me go add you again to it, so I'm not bothered by pointless stuff like this anymore. *plonk*
Re: [Cocci] [PATCH] drivers: Inline code in devm_platform_ioremap_resource() from two functions
On Fri, 14 Jun 2019, Markus Elfring wrote: > From: Markus Elfring > Date: Fri, 14 Jun 2019 11:05:33 +0200 > > Two function calls were combined in this function implementation. > Inline corresponding code so that extra error checks can be avoided here. I don't see any point to this at all. By inlining the code, you have created a clone, which will introduce extra work to maintain in the future. julia > > Signed-off-by: Markus Elfring > --- > drivers/base/platform.c | 39 ++- > 1 file changed, 34 insertions(+), 5 deletions(-) > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > index 4d1729853d1a..baadca72f949 100644 > --- a/drivers/base/platform.c > +++ b/drivers/base/platform.c > @@ -80,8 +80,8 @@ struct resource *platform_get_resource(struct > platform_device *dev, > EXPORT_SYMBOL_GPL(platform_get_resource); > > /** > - * devm_platform_ioremap_resource - call devm_ioremap_resource() for a > platform > - * device > + * devm_platform_ioremap_resource > + * Achieve devm_ioremap_resource() functionality for a platform device > * > * @pdev: platform device to use both for memory resource lookup as well as > *resource management > @@ -91,10 +91,39 @@ EXPORT_SYMBOL_GPL(platform_get_resource); > void __iomem *devm_platform_ioremap_resource(struct platform_device *pdev, >unsigned int index) > { > - struct resource *res; > + u32 i; > > - res = platform_get_resource(pdev, IORESOURCE_MEM, index); > - return devm_ioremap_resource(&pdev->dev, res); > + for (i = 0; i < pdev->num_resources; i++) { > + struct resource *res = &pdev->resource[i]; > + > + if (resource_type(res) == IORESOURCE_MEM && index-- == 0) { > + struct device *dev = &pdev->dev; > + resource_size_t size = resource_size(res); > + void __iomem *dest; > + > + if (!devm_request_mem_region(dev, > + res->start, > + size, > + dev_name(dev))) { > + dev_err(dev, > + "can't request region for resource > %pR\n", > + res); > + return IOMEM_ERR_PTR(-EBUSY); > + } > + > + dest = devm_ioremap(dev, res->start, size); > + if (!dest) { > + dev_err(dev, > + "ioremap failed for resource %pR\n", > + res); > + devm_release_mem_region(dev, res->start, size); > + dest = IOMEM_ERR_PTR(-ENOMEM); > + } > + > + return dest; > + } > + } > + return IOMEM_ERR_PTR(-EINVAL); > } > EXPORT_SYMBOL_GPL(devm_platform_ioremap_resource); > #endif /* CONFIG_HAS_IOMEM */ > -- > 2.22.0 > > ___ > Cocci mailing list > Cocci@systeme.lip6.fr > https://systeme.lip6.fr/mailman/listinfo/cocci >
[PATCH] drivers: Inline code in devm_platform_ioremap_resource() from two functions
From: Markus Elfring Date: Fri, 14 Jun 2019 11:05:33 +0200 Two function calls were combined in this function implementation. Inline corresponding code so that extra error checks can be avoided here. Signed-off-by: Markus Elfring --- drivers/base/platform.c | 39 ++- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 4d1729853d1a..baadca72f949 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -80,8 +80,8 @@ struct resource *platform_get_resource(struct platform_device *dev, EXPORT_SYMBOL_GPL(platform_get_resource); /** - * devm_platform_ioremap_resource - call devm_ioremap_resource() for a platform - * device + * devm_platform_ioremap_resource + * Achieve devm_ioremap_resource() functionality for a platform device * * @pdev: platform device to use both for memory resource lookup as well as *resource management @@ -91,10 +91,39 @@ EXPORT_SYMBOL_GPL(platform_get_resource); void __iomem *devm_platform_ioremap_resource(struct platform_device *pdev, unsigned int index) { - struct resource *res; + u32 i; - res = platform_get_resource(pdev, IORESOURCE_MEM, index); - return devm_ioremap_resource(&pdev->dev, res); + for (i = 0; i < pdev->num_resources; i++) { + struct resource *res = &pdev->resource[i]; + + if (resource_type(res) == IORESOURCE_MEM && index-- == 0) { + struct device *dev = &pdev->dev; + resource_size_t size = resource_size(res); + void __iomem *dest; + + if (!devm_request_mem_region(dev, +res->start, +size, +dev_name(dev))) { + dev_err(dev, + "can't request region for resource %pR\n", + res); + return IOMEM_ERR_PTR(-EBUSY); + } + + dest = devm_ioremap(dev, res->start, size); + if (!dest) { + dev_err(dev, + "ioremap failed for resource %pR\n", + res); + devm_release_mem_region(dev, res->start, size); + dest = IOMEM_ERR_PTR(-ENOMEM); + } + + return dest; + } + } + return IOMEM_ERR_PTR(-EINVAL); } EXPORT_SYMBOL_GPL(devm_platform_ioremap_resource); #endif /* CONFIG_HAS_IOMEM */ -- 2.22.0