All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] irqdomain: Fix disposal of mappings for interrupt hierarchies
@ 2016-06-21  9:23 Jon Hunter
  2016-06-23  8:25 ` [tip:irq/core] " tip-bot for Jon Hunter
  0 siblings, 1 reply; 2+ messages in thread
From: Jon Hunter @ 2016-06-21  9:23 UTC (permalink / raw)
  To: Jiang Liu, Marc Zyngier, Thomas Gleixner; +Cc: linux-kernel, Jon Hunter

The function irq_create_of_mapping() is used to create an interrupt
mapping. However, depending on whether the irqdomain, to which the
interrupt belongs, is part of a hierarchy, determines whether the
mapping is created via calling irq_domain_alloc_irqs() or
irq_create_mapping().

To dispose of the interrupt mapping, drivers call irq_dispose_mapping().
However, this function does not check to see if the irqdomain is part
of a hierarchy or not and simply assumes that it was mapped via calling
irq_create_mapping() so calls irq_domain_disassociate() to unmap the
interrupt.

Fix this by checking to see if the irqdomain is part of a hierarchy and
if so call irq_domain_free_irqs() to free/unmap the interrupt.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
---

Please note that I have not observed issues with this, but something
that did not make sense to me from looking at the code.

 kernel/irq/irqdomain.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index caa6a63d26f0..5d89d724a02a 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -680,8 +680,12 @@ void irq_dispose_mapping(unsigned int virq)
 	if (WARN_ON(domain == NULL))
 		return;
 
-	irq_domain_disassociate(domain, virq);
-	irq_free_desc(virq);
+	if (irq_domain_is_hierarchy(domain)) {
+		irq_domain_free_irqs(virq, 1);
+	} else {
+		irq_domain_disassociate(domain, virq);
+		irq_free_desc(virq);
+	}
 }
 EXPORT_SYMBOL_GPL(irq_dispose_mapping);
 
-- 
2.1.4

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

* [tip:irq/core] irqdomain: Fix disposal of mappings for interrupt hierarchies
  2016-06-21  9:23 [RFC PATCH] irqdomain: Fix disposal of mappings for interrupt hierarchies Jon Hunter
@ 2016-06-23  8:25 ` tip-bot for Jon Hunter
  0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for Jon Hunter @ 2016-06-23  8:25 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, jiang.liu, tglx, mingo, marc.zyngier, jonathanh, linux-kernel

Commit-ID:  d16dcd3d18759eb955e0325572d07457f93494f5
Gitweb:     http://git.kernel.org/tip/d16dcd3d18759eb955e0325572d07457f93494f5
Author:     Jon Hunter <jonathanh@nvidia.com>
AuthorDate: Tue, 21 Jun 2016 10:23:22 +0100
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 23 Jun 2016 10:21:06 +0200

irqdomain: Fix disposal of mappings for interrupt hierarchies

The function irq_create_of_mapping() is used to create an interrupt
mapping. However, depending on whether the irqdomain, to which the
interrupt belongs, is part of a hierarchy, determines whether the
mapping is created via calling irq_domain_alloc_irqs() or
irq_create_mapping().

To dispose of the interrupt mapping, drivers call irq_dispose_mapping().
However, this function does not check to see if the irqdomain is part
of a hierarchy or not and simply assumes that it was mapped via calling
irq_create_mapping() so calls irq_domain_disassociate() to unmap the
interrupt.

Fix this by checking to see if the irqdomain is part of a hierarchy and
if so call irq_domain_free_irqs() to free/unmap the interrupt.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>
Link: http://lkml.kernel.org/r/1466501002-16368-1-git-send-email-jonathanh@nvidia.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 kernel/irq/irqdomain.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index caa6a63..5d89d72 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -680,8 +680,12 @@ void irq_dispose_mapping(unsigned int virq)
 	if (WARN_ON(domain == NULL))
 		return;
 
-	irq_domain_disassociate(domain, virq);
-	irq_free_desc(virq);
+	if (irq_domain_is_hierarchy(domain)) {
+		irq_domain_free_irqs(virq, 1);
+	} else {
+		irq_domain_disassociate(domain, virq);
+		irq_free_desc(virq);
+	}
 }
 EXPORT_SYMBOL_GPL(irq_dispose_mapping);
 

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

end of thread, other threads:[~2016-06-23  8:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-21  9:23 [RFC PATCH] irqdomain: Fix disposal of mappings for interrupt hierarchies Jon Hunter
2016-06-23  8:25 ` [tip:irq/core] " tip-bot for Jon Hunter

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.