[PATCH] PCI: iproc: Use __free(device_node) in iproc_pcie_msi_enable()

Fuad Tabba posted 1 patch 1 day, 16 hours ago
There is a newer version of this series
drivers/pci/controller/pcie-iproc.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
[PATCH] PCI: iproc: Use __free(device_node) in iproc_pcie_msi_enable()
Posted by Fuad Tabba 1 day, 16 hours ago
Declare msi_node with __free(device_node) and drop the out_put_node
label and its goto: the scoped cleanup puts the MSI controller node on
every return, as the label did.

No functional change intended.

Suggested-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Link: https://lore.kernel.org/linux-pci/61488ddc-b346-4ba3-b32a-e972a3bd75a4@mailbox.org/
Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
---
 drivers/pci/controller/pcie-iproc.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
index afb3aa38ac6bb..b4f4e6e1d4b41 100644
--- a/drivers/pci/controller/pcie-iproc.c
+++ b/drivers/pci/controller/pcie-iproc.c
@@ -1338,7 +1338,7 @@ static int iproc_pcie_msi_steer(struct iproc_pcie *pcie,
 
 static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
 {
-	struct device_node *msi_node = NULL;
+	struct device_node *msi_node __free(device_node) = NULL;
 	int ret;
 
 	/*
@@ -1357,18 +1357,14 @@ static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
 	if (pcie->need_msi_steer) {
 		ret = iproc_pcie_msi_steer(pcie, msi_node);
 		if (ret)
-			goto out_put_node;
+			return ret;
 	}
 
 	/*
 	 * If another MSI controller is being used, the call below should fail
 	 * but that is okay
 	 */
-	ret = iproc_msi_init(pcie, msi_node);
-
-out_put_node:
-	of_node_put(msi_node);
-	return ret;
+	return iproc_msi_init(pcie, msi_node);
 }
 
 static void iproc_pcie_msi_disable(struct iproc_pcie *pcie)

base-commit: fd73f4a6659897191fa0d40695fe370925dd3780
-- 
2.39.5
Re: [PATCH] PCI: iproc: Use __free(device_node) in iproc_pcie_msi_enable()
Posted by Jonathan Cameron 21 hours ago
On Tue, 22 Sep 2026 22:08:39 +0100
Fuad Tabba <fuad.tabba@linux.dev> wrote:

> Declare msi_node with __free(device_node) and drop the out_put_node
> label and its goto: the scoped cleanup puts the MSI controller node on
> every return, as the label did.
> 
> No functional change intended.
> 
> Suggested-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
> Link: https://lore.kernel.org/linux-pci/61488ddc-b346-4ba3-b32a-e972a3bd75a4@mailbox.org/
> Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>

Hi Fuad,

See the guidance notes in cleanup.h.   Linus has stated a couple
of times that he really never wants to see = NULL pattern miles
from where it is allocated.  Best you can do here is shift
it down to immediately before of_msi_xlate(). It is fine to declare
variables with destructors like this inline (i.e. not at top of function).

Admittedly if the scope shown here had gone a few lines further this
would look less bad!


> ---
>  drivers/pci/controller/pcie-iproc.c | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
> index afb3aa38ac6bb..b4f4e6e1d4b41 100644
> --- a/drivers/pci/controller/pcie-iproc.c
> +++ b/drivers/pci/controller/pcie-iproc.c
> @@ -1338,7 +1338,7 @@ static int iproc_pcie_msi_steer(struct iproc_pcie *pcie,
>  
>  static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
>  {
> -	struct device_node *msi_node = NULL;
> +	struct device_node *msi_node __free(device_node) = NULL;
>  	int ret;
>  
>  	/*
> @@ -1357,18 +1357,14 @@ static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
>  	if (pcie->need_msi_steer) {
>  		ret = iproc_pcie_msi_steer(pcie, msi_node);
>  		if (ret)
> -			goto out_put_node;
> +			return ret;
>  	}
>  
>  	/*
>  	 * If another MSI controller is being used, the call below should fail
>  	 * but that is okay
>  	 */
> -	ret = iproc_msi_init(pcie, msi_node);
> -
> -out_put_node:
> -	of_node_put(msi_node);
> -	return ret;
> +	return iproc_msi_init(pcie, msi_node);
>  }
>  
>  static void iproc_pcie_msi_disable(struct iproc_pcie *pcie)
> 
> base-commit: fd73f4a6659897191fa0d40695fe370925dd3780
Re: [PATCH] PCI: iproc: Use __free(device_node) in iproc_pcie_msi_enable()
Posted by Fuad Tabba 19 hours ago
Hi Jonathan,

On Wed, 23 Sept 2026 at 17:34, Jonathan Cameron
<jonathan.cameron@oss.qualcomm.com> wrote:
[...]
> Hi Fuad,
>
> See the guidance notes in cleanup.h.   Linus has stated a couple
> of times that he really never wants to see = NULL pattern miles
> from where it is allocated.  Best you can do here is shift
> it down to immediately before of_msi_xlate(). It is fine to declare
> variables with destructors like this inline (i.e. not at top of function).
>
> Admittedly if the scope shown here had gone a few lines further this
> would look less bad!

Done: https://lore.kernel.org/all/20260923180703.3901185-1-fuad.tabba@linux.dev/

Cheers,
/fuad

>
>
> > ---
> >  drivers/pci/controller/pcie-iproc.c | 10 +++-------
> >  1 file changed, 3 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c
> > index afb3aa38ac6bb..b4f4e6e1d4b41 100644
> > --- a/drivers/pci/controller/pcie-iproc.c
> > +++ b/drivers/pci/controller/pcie-iproc.c
> > @@ -1338,7 +1338,7 @@ static int iproc_pcie_msi_steer(struct iproc_pcie *pcie,
> >
> >  static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
> >  {
> > -     struct device_node *msi_node = NULL;
> > +     struct device_node *msi_node __free(device_node) = NULL;
> >       int ret;
> >
> >       /*
> > @@ -1357,18 +1357,14 @@ static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
> >       if (pcie->need_msi_steer) {
> >               ret = iproc_pcie_msi_steer(pcie, msi_node);
> >               if (ret)
> > -                     goto out_put_node;
> > +                     return ret;
> >       }
> >
> >       /*
> >        * If another MSI controller is being used, the call below should fail
> >        * but that is okay
> >        */
> > -     ret = iproc_msi_init(pcie, msi_node);
> > -
> > -out_put_node:
> > -     of_node_put(msi_node);
> > -     return ret;
> > +     return iproc_msi_init(pcie, msi_node);
> >  }
> >
> >  static void iproc_pcie_msi_disable(struct iproc_pcie *pcie)
> >
> > base-commit: fd73f4a6659897191fa0d40695fe370925dd3780
>
Re: [PATCH] PCI: iproc: Use __free(device_node) in iproc_pcie_msi_enable()
Posted by Marek Vasut 1 day, 15 hours ago
On 9/22/26 11:08 PM, Fuad Tabba wrote:
> Declare msi_node with __free(device_node) and drop the out_put_node
> label and its goto: the scoped cleanup puts the MSI controller node on
> every return, as the label did.
> 
> No functional change intended.
> 
> Suggested-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
> Link: https://lore.kernel.org/linux-pci/61488ddc-b346-4ba3-b32a-e972a3bd75a4@mailbox.org/
> Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev>
> ---
>   drivers/pci/controller/pcie-iproc.c | 10 +++-------
>   1 file changed, 3 insertions(+), 7 deletions(-)
This is nice.

Reviewed-by: Marek Vasut <marek.vasut+renesas@mailbox.org>

Thank you.