PCI: mvebu: return NULL instead of ERR_PTR(ret)
Jingoo Han
jg1.han at samsung.com
Tue Nov 26 00:31:44 EST 2013
On Tuesday, November 26, 2013 5:03 AM, Jason Gunthorpe wrote:
> On Sat, Nov 23, 2013 at 10:00:33PM -0500, Jason Cooper wrote:
> > And a small addendum: I currently have the following in mvebu/drivers
> > 058100a08be8 PCI: mvebu: return NULL instead of ERR_PTR(ret)
>
> Folks, I took a quick look at this, and it looks suspicious (sorry, I
> can't seem to find the thread to followup post)
>
> > PCI: mvebu: return NULL instead of ERR_PTR(ret)
> >
> > Return NULL instead of ERR_PTR(ret) in order to fix the following
> > sparse warning:
> >
> > drivers/pci/host/pci-mvebu.c:744:31: warning: incorrect type in return expression (different
> address
> > spaces)
> > drivers/pci/host/pci-mvebu.c:744:31: expected void [noderef] <asn:2>*
> > drivers/pci/host/pci-mvebu.c:744:31: got void *
> >
> > Signed-off-by: Jingoo Han <jg1.han at samsung.com>
> > Acked-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> > Signed-off-by: Jason Cooper <jason at lakedaemon.net>
> >
> >--- a/drivers/pci/host/pci-mvebu.c
> >+++ b/drivers/pci/host/pci-mvebu.c
> >@@ -740,7 +740,7 @@ static void __iomem *mvebu_pcie_map_registers(struct platform_device *pdev,
> >
> > ret = of_address_to_resource(np, 0, ®s);
> > if (ret)
> >- return ERR_PTR(ret);
> >+ return NULL;
> >
> > return devm_ioremap_resource(&pdev->dev, ®s);
>
> So we drop the ERR_PTR for that return but 'devm_ioremap_resource'
> returns ERR_PTR too:
Yes, you're right.
It makes the problem.
Thus, this commit "PCI: mvebu: return NULL instead of ERR_PTR(ret)"
should be reverted.
Previously, I sent the patch in order to fix sparse warning as below:
How about this?
static void __iomem *mvebu_pcie_map_registers(struct platform_device *pdev,
struct device_node *np, struct mvebu_pcie_port *port)
{
struct resource regs;
int ret = 0;
ret = of_address_to_resource(np, 0, ®s);
if (ret)
- return ERR_PTR(ret);
+ return (void __iomem *)ERR_PTR(ret);
return devm_ioremap_resource(&pdev->dev, ®s);
}
static int mvebu_pcie_probe(struct platform_device *pdev)
{
.....
port->base = mvebu_pcie_map_registers(pdev, child, port);
if (IS_ERR(port->base)) {
dev_err(&pdev->dev, "PCIe%d.%d: cannot map registers\n",
port->port, port->lane);
port->base = NULL;
clk_disable_unprepare(port->clk);
continue;
}
Best regards,
Jingoo Han
More information about the linux-arm-kernel
mailing list