Re: PCI: mvebu: return NULL instead of ERR_PTR(ret)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxx>
>    Acked-by: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx>
>    Signed-off-by: Jason Cooper <jason@xxxxxxxxxxxxxx>
>
>--- 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, &regs);
>        if (ret)
>-               return ERR_PTR(ret);
>+               return NULL;
> 
>        return devm_ioremap_resource(&pdev->dev, &regs);

So we drop the ERR_PTR for that return but 'devm_ioremap_resource'
returns ERR_PTR too:

/**
 * devm_ioremap_resource() - check, request region, and ioremap resource
 * @dev: generic device to handle the resource for
 * @res: resource to be handled
 *
 * Checks that a resource is a valid memory region, requests the memory region
 * and ioremaps it either as cacheable or as non-cacheable memory depending on
 * the resource's flags. All operations are managed and will be undone on
 * driver detach.
 *
 * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code
 * on failure. Usage example:
 *
 *      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 *      base = devm_ioremap_resource(&pdev->dev, res);
 *      if (IS_ERR(base))
 *              return PTR_ERR(base);

So this is clearly wrong:
 
> 		port->base = mvebu_pcie_map_registers(pdev, child, port);
>-		if (IS_ERR(port->base)) {
>+		if (!port->base) {
> 			dev_err(&pdev->dev,

NAK I guess?

This looks like a sparse problem, doesn't it complain for
devm_ioremap_resource too?

void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res)
{
[..]
                return ERR_PTR(-EBUSY);

Regards,
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux