All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate
@ 2016-10-28 10:32 Charles Keepax
  2016-10-28 10:32 ` [PATCH 2/2] mfd: arizona: Correctly clean up after IRQs Charles Keepax
  2016-11-10 13:30 ` [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate Lee Jones
  0 siblings, 2 replies; 4+ messages in thread
From: Charles Keepax @ 2016-10-28 10:32 UTC (permalink / raw)
  To: lee.jones; +Cc: linux-kernel, patches

No need to use irq_create_mapping (although there is no issue with
doing so) when we are only looking up an existing mapping. Just to
streamline things a little and make the code a little more clear
change some calls from irq_create_mapping to irq_find_mapping.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
---
 drivers/mfd/arizona-irq.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
index 5e18d3c..2e01975 100644
--- a/drivers/mfd/arizona-irq.c
+++ b/drivers/mfd/arizona-irq.c
@@ -398,10 +398,10 @@ int arizona_irq_init(struct arizona *arizona)
 err_boot_done:
 	free_irq(arizona->irq, arizona);
 err_main_irq:
-	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 1),
+	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 1),
 			    arizona->irq_chip);
 err_aod:
-	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 0),
+	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 0),
 			    arizona->aod_irq_chip);
 err:
 	return ret;
@@ -413,9 +413,9 @@ int arizona_irq_exit(struct arizona *arizona)
 		free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_CTRLIF_ERR),
 			 arizona);
 	free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_BOOT_DONE), arizona);
-	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 1),
+	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 1),
 			    arizona->irq_chip);
-	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 0),
+	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 0),
 			    arizona->aod_irq_chip);
 	free_irq(arizona->irq, arizona);
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] mfd: arizona: Correctly clean up after IRQs
  2016-10-28 10:32 [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate Charles Keepax
@ 2016-10-28 10:32 ` Charles Keepax
  2016-11-11 13:50   ` Charles Keepax
  2016-11-10 13:30 ` [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate Lee Jones
  1 sibling, 1 reply; 4+ messages in thread
From: Charles Keepax @ 2016-10-28 10:32 UTC (permalink / raw)
  To: lee.jones; +Cc: linux-kernel, patches

Currently we leak a lot of things when tearing down the IRQs this patch
fixes this cleaning up both the IRQ mappings and the IRQ domain itself.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
---
 drivers/mfd/arizona-irq.c | 54 +++++++++++++++++++++++++++++++++++------------
 1 file changed, 40 insertions(+), 14 deletions(-)

diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
index 2e01975..fecf367 100644
--- a/drivers/mfd/arizona-irq.c
+++ b/drivers/mfd/arizona-irq.c
@@ -207,6 +207,7 @@ int arizona_irq_init(struct arizona *arizona)
 	int ret, i;
 	const struct regmap_irq_chip *aod, *irq;
 	struct irq_data *irq_data;
+	unsigned int virq;
 
 	arizona->ctrlif_error = true;
 
@@ -318,24 +319,34 @@ int arizona_irq_init(struct arizona *arizona)
 	}
 
 	if (aod) {
-		ret = regmap_add_irq_chip(arizona->regmap,
-					  irq_create_mapping(arizona->virq, 0),
-					  IRQF_ONESHOT, 0, aod,
-					  &arizona->aod_irq_chip);
+		virq = irq_create_mapping(arizona->virq, 0);
+		if (!virq) {
+			dev_err(arizona->dev,
+				"Failed to map AOD IRQs: %d\n", ret);
+			goto err_domain;
+		}
+
+		ret = regmap_add_irq_chip(arizona->regmap, virq, IRQF_ONESHOT,
+					  0, aod, &arizona->aod_irq_chip);
 		if (ret != 0) {
 			dev_err(arizona->dev,
 				"Failed to add AOD IRQs: %d\n", ret);
-			goto err;
+			goto err_map_aod;
 		}
 	}
 
-	ret = regmap_add_irq_chip(arizona->regmap,
-				  irq_create_mapping(arizona->virq, 1),
-				  IRQF_ONESHOT, 0, irq,
-				  &arizona->irq_chip);
+	virq = irq_create_mapping(arizona->virq, 1);
+	if (!virq) {
+		dev_err(arizona->dev,
+			"Failed to map main IRQs: %d\n", ret);
+		goto err_aod;
+	}
+
+	ret = regmap_add_irq_chip(arizona->regmap, virq, IRQF_ONESHOT,
+				  0, irq, &arizona->irq_chip);
 	if (ret != 0) {
 		dev_err(arizona->dev, "Failed to add main IRQs: %d\n", ret);
-		goto err_aod;
+		goto err_map_main_irq;
 	}
 
 	/* Used to emulate edge trigger and to work around broken pinmux */
@@ -400,23 +411,38 @@ int arizona_irq_init(struct arizona *arizona)
 err_main_irq:
 	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 1),
 			    arizona->irq_chip);
+err_map_main_irq:
+	irq_dispose_mapping(irq_find_mapping(arizona->virq, 1));
 err_aod:
 	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 0),
 			    arizona->aod_irq_chip);
+err_map_aod:
+	irq_dispose_mapping(irq_find_mapping(arizona->virq, 0));
+err_domain:
+	irq_domain_remove(arizona->virq);
 err:
 	return ret;
 }
 
 int arizona_irq_exit(struct arizona *arizona)
 {
+	unsigned int virq;
+
 	if (arizona->ctrlif_error)
 		free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_CTRLIF_ERR),
 			 arizona);
 	free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_BOOT_DONE), arizona);
-	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 1),
-			    arizona->irq_chip);
-	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 0),
-			    arizona->aod_irq_chip);
+
+	virq = irq_find_mapping(arizona->virq, 1);
+	regmap_del_irq_chip(virq, arizona->irq_chip);
+	irq_dispose_mapping(virq);
+
+	virq = irq_find_mapping(arizona->virq, 0);
+	regmap_del_irq_chip(virq, arizona->aod_irq_chip);
+	irq_dispose_mapping(virq);
+
+	irq_domain_remove(arizona->virq);
+
 	free_irq(arizona->irq, arizona);
 
 	return 0;
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate
  2016-10-28 10:32 [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate Charles Keepax
  2016-10-28 10:32 ` [PATCH 2/2] mfd: arizona: Correctly clean up after IRQs Charles Keepax
@ 2016-11-10 13:30 ` Lee Jones
  1 sibling, 0 replies; 4+ messages in thread
From: Lee Jones @ 2016-11-10 13:30 UTC (permalink / raw)
  To: Charles Keepax; +Cc: linux-kernel, patches

On Fri, 28 Oct 2016, Charles Keepax wrote:

> No need to use irq_create_mapping (although there is no issue with
> doing so) when we are only looking up an existing mapping. Just to
> streamline things a little and make the code a little more clear
> change some calls from irq_create_mapping to irq_find_mapping.
> 
> Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
> ---
>  drivers/mfd/arizona-irq.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)

Applied, thanks.

> diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
> index 5e18d3c..2e01975 100644
> --- a/drivers/mfd/arizona-irq.c
> +++ b/drivers/mfd/arizona-irq.c
> @@ -398,10 +398,10 @@ int arizona_irq_init(struct arizona *arizona)
>  err_boot_done:
>  	free_irq(arizona->irq, arizona);
>  err_main_irq:
> -	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 1),
> +	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 1),
>  			    arizona->irq_chip);
>  err_aod:
> -	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 0),
> +	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 0),
>  			    arizona->aod_irq_chip);
>  err:
>  	return ret;
> @@ -413,9 +413,9 @@ int arizona_irq_exit(struct arizona *arizona)
>  		free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_CTRLIF_ERR),
>  			 arizona);
>  	free_irq(arizona_map_irq(arizona, ARIZONA_IRQ_BOOT_DONE), arizona);
> -	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 1),
> +	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 1),
>  			    arizona->irq_chip);
> -	regmap_del_irq_chip(irq_create_mapping(arizona->virq, 0),
> +	regmap_del_irq_chip(irq_find_mapping(arizona->virq, 0),
>  			    arizona->aod_irq_chip);
>  	free_irq(arizona->irq, arizona);
>  

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] mfd: arizona: Correctly clean up after IRQs
  2016-10-28 10:32 ` [PATCH 2/2] mfd: arizona: Correctly clean up after IRQs Charles Keepax
@ 2016-11-11 13:50   ` Charles Keepax
  0 siblings, 0 replies; 4+ messages in thread
From: Charles Keepax @ 2016-11-11 13:50 UTC (permalink / raw)
  To: lee.jones; +Cc: linux-kernel, patches

On Fri, Oct 28, 2016 at 11:32:54AM +0100, Charles Keepax wrote:
> Currently we leak a lot of things when tearing down the IRQs this patch
> fixes this cleaning up both the IRQ mappings and the IRQ domain itself.
> 
> Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
> ---
>  drivers/mfd/arizona-irq.c | 54 +++++++++++++++++++++++++++++++++++------------
>  1 file changed, 40 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
> index 2e01975..fecf367 100644
> --- a/drivers/mfd/arizona-irq.c
> +++ b/drivers/mfd/arizona-irq.c
> @@ -207,6 +207,7 @@ int arizona_irq_init(struct arizona *arizona)
>  	int ret, i;
>  	const struct regmap_irq_chip *aod, *irq;
>  	struct irq_data *irq_data;
> +	unsigned int virq;
>  
>  	arizona->ctrlif_error = true;
>  
> @@ -318,24 +319,34 @@ int arizona_irq_init(struct arizona *arizona)
>  	}
>  
>  	if (aod) {
> -		ret = regmap_add_irq_chip(arizona->regmap,
> -					  irq_create_mapping(arizona->virq, 0),
> -					  IRQF_ONESHOT, 0, aod,
> -					  &arizona->aod_irq_chip);
> +		virq = irq_create_mapping(arizona->virq, 0);
> +		if (!virq) {
> +			dev_err(arizona->dev,
> +				"Failed to map AOD IRQs: %d\n", ret);
> +			goto err_domain;

One minor issue here we should be setting ret, as this one hasn't
been applied yet I will send a new spin shortly.

> +		}
> +
> +		ret = regmap_add_irq_chip(arizona->regmap, virq, IRQF_ONESHOT,
> +					  0, aod, &arizona->aod_irq_chip);
>  		if (ret != 0) {
>  			dev_err(arizona->dev,
>  				"Failed to add AOD IRQs: %d\n", ret);
> -			goto err;
> +			goto err_map_aod;
>  		}
>  	}
>  
> -	ret = regmap_add_irq_chip(arizona->regmap,
> -				  irq_create_mapping(arizona->virq, 1),
> -				  IRQF_ONESHOT, 0, irq,
> -				  &arizona->irq_chip);
> +	virq = irq_create_mapping(arizona->virq, 1);
> +	if (!virq) {
> +		dev_err(arizona->dev,
> +			"Failed to map main IRQs: %d\n", ret);
> +		goto err_aod;

ditto.

Thanks,
Charles

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-11-11 13:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-28 10:32 [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate Charles Keepax
2016-10-28 10:32 ` [PATCH 2/2] mfd: arizona: Correctly clean up after IRQs Charles Keepax
2016-11-11 13:50   ` Charles Keepax
2016-11-10 13:30 ` [PATCH 1/2] mfd: arizona: Use irq_find_mapping when appropriate Lee Jones

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.