All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/1] irqdomain: Fix irq_domain_alloc_irqs_recursive() error handling
@ 2016-07-03  0:24 Alexander Popov
  2016-07-11 11:53 ` Alexander Popov
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Alexander Popov @ 2016-07-03  0:24 UTC (permalink / raw)
  To: Jiang Liu, Marc Zyngier, Thomas Gleixner, linux-kernel,
	Alexander Popov

If an irq_domain is auto-recursive and irq_domain_alloc_irqs_recursive()
for its parent has returned an error, then do return and avoid calling
irq_domain_free_irqs_recursive() uselessly, because:
- if domain->ops->alloc() had failed for an auto-recursive irq_domain,
   then irq_domain_free_irqs_recursive() had already been called;
- if domain->ops->alloc() had failed for a not auto-recursive irq_domain,
   then there is nothing to free at all.

Signed-off-by: Alexander Popov <alex.popov@linux.com>
---
 kernel/irq/irqdomain.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 8798b6c..6458e34 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -1144,8 +1144,10 @@ int irq_domain_alloc_irqs_recursive(struct irq_domain *domain,
 	if (recursive)
 		ret = irq_domain_alloc_irqs_recursive(parent, irq_base,
 						      nr_irqs, arg);
-	if (ret >= 0)
-		ret = domain->ops->alloc(domain, irq_base, nr_irqs, arg);
+	if (ret < 0)
+		return ret;
+
+	ret = domain->ops->alloc(domain, irq_base, nr_irqs, arg);
 	if (ret < 0 && recursive)
 		irq_domain_free_irqs_recursive(parent, irq_base, nr_irqs);
 
-- 
1.9.1

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

end of thread, other threads:[~2016-07-11 15:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-03  0:24 [PATCH 1/1] irqdomain: Fix irq_domain_alloc_irqs_recursive() error handling Alexander Popov
2016-07-11 11:53 ` Alexander Popov
2016-07-11 15:18 ` Marc Zyngier
2016-07-11 15:27 ` [tip:irq/core] " tip-bot for Alexander Popov

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.