diff mbox

[v5,6/9] PCI: Drop references acquired by of_parse_phandle()

Message ID 20150804215435.9189.94410.stgit@bhelgaas-glaptop2.roam.corp.google.com (mailing list archive)
State New, archived
Headers show

Commit Message

Bjorn Helgaas Aug. 4, 2015, 9:54 p.m. UTC
of_parse_phandle() returns a device_node pointer with the refcount
incremented.  We should dispose of this reference when we're finished.

Drop the reference acquired by of_parse_phandle().

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/pci/host/pci-mvebu.c |    1 +
 drivers/pci/host/pci-xgene.c |    1 +
 2 files changed, 2 insertions(+)

Comments

Bjorn Helgaas Aug. 10, 2015, 9:39 p.m. UTC | #1
[+cc Ben, Rob]

On Tue, Aug 04, 2015 at 04:54:35PM -0500, Bjorn Helgaas wrote:
> of_parse_phandle() returns a device_node pointer with the refcount
> incremented.  We should dispose of this reference when we're finished.
> 
> Drop the reference acquired by of_parse_phandle().

I cc'd everybody who wrote or signed off on 0d5a6db3aa46 ("of: pci: add
registry of MSI chips"), which added of_pci_find_msi_chip_by_node().

The existing code (before this patch) looks wrong to me, but I'm not an OF
person.

> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> ---
>  drivers/pci/host/pci-mvebu.c |    1 +
>  drivers/pci/host/pci-xgene.c |    1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
> index 70aa095..67ec5e1 100644
> --- a/drivers/pci/host/pci-mvebu.c
> +++ b/drivers/pci/host/pci-mvebu.c
> @@ -879,6 +879,7 @@ static void mvebu_pcie_msi_enable(struct mvebu_pcie *pcie)
>  		return;
>  
>  	pcie->msi = of_pci_find_msi_chip_by_node(msi_node);
> +	of_node_put(msi_node);
>  
>  	if (pcie->msi)
>  		pcie->msi->dev = &pcie->pdev->dev;
> diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c
> index a9dfb70..4c2fb1f 100644
> --- a/drivers/pci/host/pci-xgene.c
> +++ b/drivers/pci/host/pci-xgene.c
> @@ -514,6 +514,7 @@ static int xgene_pcie_msi_enable(struct pci_bus *bus)
>  	if (!bus->msi)
>  		return -ENODEV;
>  
> +	of_node_put(msi_node);
>  	bus->msi->dev = &bus->dev;
>  	return 0;
>  }
>
Rob Herring (Arm) Aug. 10, 2015, 10:19 p.m. UTC | #2
On Mon, Aug 10, 2015 at 4:39 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> [+cc Ben, Rob]
>
> On Tue, Aug 04, 2015 at 04:54:35PM -0500, Bjorn Helgaas wrote:
>> of_parse_phandle() returns a device_node pointer with the refcount
>> incremented.  We should dispose of this reference when we're finished.
>>
>> Drop the reference acquired by of_parse_phandle().
>
> I cc'd everybody who wrote or signed off on 0d5a6db3aa46 ("of: pci: add
> registry of MSI chips"), which added of_pci_find_msi_chip_by_node().
>
> The existing code (before this patch) looks wrong to me, but I'm not an OF
> person.

In general, how DT reference counting works is broken and difficult to
get right. It doesn't really matter for most cases anyway (as nodes
don't get removed). I cannot tell you whether this patch is right or
wrong just looking at the patch. It seems correct based on your
description.

Rob

>
>> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
>> ---
>>  drivers/pci/host/pci-mvebu.c |    1 +
>>  drivers/pci/host/pci-xgene.c |    1 +
>>  2 files changed, 2 insertions(+)
>>
>> diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
>> index 70aa095..67ec5e1 100644
>> --- a/drivers/pci/host/pci-mvebu.c
>> +++ b/drivers/pci/host/pci-mvebu.c
>> @@ -879,6 +879,7 @@ static void mvebu_pcie_msi_enable(struct mvebu_pcie *pcie)
>>               return;
>>
>>       pcie->msi = of_pci_find_msi_chip_by_node(msi_node);
>> +     of_node_put(msi_node);
>>
>>       if (pcie->msi)
>>               pcie->msi->dev = &pcie->pdev->dev;
>> diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c
>> index a9dfb70..4c2fb1f 100644
>> --- a/drivers/pci/host/pci-xgene.c
>> +++ b/drivers/pci/host/pci-xgene.c
>> @@ -514,6 +514,7 @@ static int xgene_pcie_msi_enable(struct pci_bus *bus)
>>       if (!bus->msi)
>>               return -ENODEV;
>>
>> +     of_node_put(msi_node);
>>       bus->msi->dev = &bus->dev;
>>       return 0;
>>  }
>>
Lorenzo Pieralisi Aug. 12, 2015, 11:24 a.m. UTC | #3
On Tue, Aug 04, 2015 at 10:54:35PM +0100, Bjorn Helgaas wrote:
> of_parse_phandle() returns a device_node pointer with the refcount
> incremented.  We should dispose of this reference when we're finished.
> 
> Drop the reference acquired by of_parse_phandle().
> 
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> ---
>  drivers/pci/host/pci-mvebu.c |    1 +
>  drivers/pci/host/pci-xgene.c |    1 +
>  2 files changed, 2 insertions(+)

It looks fine to me:

Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

> diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
> index 70aa095..67ec5e1 100644
> --- a/drivers/pci/host/pci-mvebu.c
> +++ b/drivers/pci/host/pci-mvebu.c
> @@ -879,6 +879,7 @@ static void mvebu_pcie_msi_enable(struct mvebu_pcie *pcie)
>  		return;
>  
>  	pcie->msi = of_pci_find_msi_chip_by_node(msi_node);
> +	of_node_put(msi_node);
>  
>  	if (pcie->msi)
>  		pcie->msi->dev = &pcie->pdev->dev;
> diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c
> index a9dfb70..4c2fb1f 100644
> --- a/drivers/pci/host/pci-xgene.c
> +++ b/drivers/pci/host/pci-xgene.c
> @@ -514,6 +514,7 @@ static int xgene_pcie_msi_enable(struct pci_bus *bus)
>  	if (!bus->msi)
>  		return -ENODEV;
>  
> +	of_node_put(msi_node);
>  	bus->msi->dev = &bus->dev;
>  	return 0;
>  }
>
diff mbox

Patch

diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c
index 70aa095..67ec5e1 100644
--- a/drivers/pci/host/pci-mvebu.c
+++ b/drivers/pci/host/pci-mvebu.c
@@ -879,6 +879,7 @@  static void mvebu_pcie_msi_enable(struct mvebu_pcie *pcie)
 		return;
 
 	pcie->msi = of_pci_find_msi_chip_by_node(msi_node);
+	of_node_put(msi_node);
 
 	if (pcie->msi)
 		pcie->msi->dev = &pcie->pdev->dev;
diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c
index a9dfb70..4c2fb1f 100644
--- a/drivers/pci/host/pci-xgene.c
+++ b/drivers/pci/host/pci-xgene.c
@@ -514,6 +514,7 @@  static int xgene_pcie_msi_enable(struct pci_bus *bus)
 	if (!bus->msi)
 		return -ENODEV;
 
+	of_node_put(msi_node);
 	bus->msi->dev = &bus->dev;
 	return 0;
 }