summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2016-11-07 10:23:59 -0800
committerDmitry Shmidt <dimitrysh@google.com>2016-11-07 10:23:59 -0800
commit5577070b6bed1b38916ae65ad51d450774493545 (patch)
treeff16493346602fa7f8c5e881d4b41fbe50e6072f /kernel
parentc302df26cb5bf9f60633785cf5b5ed162a138dfe (diff)
parent887b692a469f9a9a666654e607103f5204ac5eb7 (diff)
Merge tag 'v4.4.30' into android-4.4.y
This is the 4.4.30 stable release
Diffstat (limited to 'kernel')
-rw-r--r--kernel/irq/generic-chip.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c
index abd286afbd27..a4775f3451b9 100644
--- a/kernel/irq/generic-chip.c
+++ b/kernel/irq/generic-chip.c
@@ -411,8 +411,29 @@ int irq_map_generic_chip(struct irq_domain *d, unsigned int virq,
}
EXPORT_SYMBOL_GPL(irq_map_generic_chip);
+static void irq_unmap_generic_chip(struct irq_domain *d, unsigned int virq)
+{
+ struct irq_data *data = irq_domain_get_irq_data(d, virq);
+ struct irq_domain_chip_generic *dgc = d->gc;
+ unsigned int hw_irq = data->hwirq;
+ struct irq_chip_generic *gc;
+ int irq_idx;
+
+ gc = irq_get_domain_generic_chip(d, hw_irq);
+ if (!gc)
+ return;
+
+ irq_idx = hw_irq % dgc->irqs_per_chip;
+
+ clear_bit(irq_idx, &gc->installed);
+ irq_domain_set_info(d, virq, hw_irq, &no_irq_chip, NULL, NULL, NULL,
+ NULL);
+
+}
+
struct irq_domain_ops irq_generic_chip_ops = {
.map = irq_map_generic_chip,
+ .unmap = irq_unmap_generic_chip,
.xlate = irq_domain_xlate_onetwocell,
};
EXPORT_SYMBOL_GPL(irq_generic_chip_ops);