Skip to contentSkip to conversation

genirq: fix error path in __setup_irq

PATCH New Heiner Kallweit 2 participants 2 messages Jun 10, 2017 – Jun 12, 2017 IRQ

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 genirq: fix error path in __setup_irq

If __irq_set_trigger() fails irq_request_resources() was successfully called before. Therefore we should release all potentially claimed resources in the error path.

---
 kernel/irq/manage.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
kernel/irq/manage.c +3 -1
index 49c37f1e..4c34696c 100644
@@ -1318,8 +1318,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
 			ret = __irq_set_trigger(desc,
 						new->flags & IRQF_TRIGGER_MASK);
 
-			if (ret)
+			if (ret) {
+				irq_release_resources(desc);
 				goto out_mask;
+			}
 		}
 
 		desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \
Signature · 1 line
2.13.1
#1 lore raw

[tip:irq/urgent] genirq: Release resources in __setup_irq() error path

genirq: Release resources in __setup_irq() error path
Commit-ID:  fa07ab72cbb0d843429e61bf179308aed6cbe0dd
Gitweb:     http://git.kernel.org/tip/fa07ab72cbb0d843429e61bf179308aed6cbe0dd
Author:     Heiner Kallweit <[email protected]>
AuthorDate: Sun, 11 Jun 2017 00:38:36 +0200
Committer:  Thomas Gleixner <[email protected]>
CommitDate: Tue, 13 Jun 2017 00:40:39 +0200

genirq: Release resources in __setup_irq() error path

In case __irq_set_trigger() fails the resources requested via irq_request_resources() are not released.

Add the missing release call into the error handling path.

Fixes c1bacbae8192 ("genirq: Provide irq_request/release_resources chip callbacks")
---
 kernel/irq/manage.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
kernel/irq/manage.c +3 -1
index 070be98..425170d 100644
@@ -1312,8 +1312,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
 			ret = __irq_set_trigger(desc,
 						new->flags & IRQF_TRIGGER_MASK);
 
-			if (ret)
+			if (ret) {
+				irq_release_resources(desc);
 				goto out_mask;
+			}
 		}
 
 		desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \