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

Signed-off-by: Heiner Kallweit <hkallwe...@gmail.com>
---
 kernel/irq/manage.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 49c37f1e..4c34696c 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -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 | \
-- 
2.13.1

Reply via email to