Skip to content

Commit b526adf

Browse files
daviddaneyKAGA-KOKO
authored andcommitted
irqdomain: Factor out code to add and remove items to and from the revmap
The code to add and remove items to and from the revmap occurs several times. In preparation for the follow on patches that add more uses of this code, factor this out in to separate static functions. Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Marc Zyngier <marc.zyngier@arm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Alexandre Courbot <gnurou@gmail.com> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: linux-gpio@vger.kernel.org Link: http://lkml.kernel.org/r/1503017616-3252-4-git-send-email-david.daney@cavium.com
1 parent 7703b08 commit b526adf

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

kernel/irq/irqdomain.c

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,31 @@ void irq_set_default_host(struct irq_domain *domain)
455455
}
456456
EXPORT_SYMBOL_GPL(irq_set_default_host);
457457

458+
static void irq_domain_clear_mapping(struct irq_domain *domain,
459+
irq_hw_number_t hwirq)
460+
{
461+
if (hwirq < domain->revmap_size) {
462+
domain->linear_revmap[hwirq] = 0;
463+
} else {
464+
mutex_lock(&revmap_trees_mutex);
465+
radix_tree_delete(&domain->revmap_tree, hwirq);
466+
mutex_unlock(&revmap_trees_mutex);
467+
}
468+
}
469+
470+
static void irq_domain_set_mapping(struct irq_domain *domain,
471+
irq_hw_number_t hwirq,
472+
struct irq_data *irq_data)
473+
{
474+
if (hwirq < domain->revmap_size) {
475+
domain->linear_revmap[hwirq] = irq_data->irq;
476+
} else {
477+
mutex_lock(&revmap_trees_mutex);
478+
radix_tree_insert(&domain->revmap_tree, hwirq, irq_data);
479+
mutex_unlock(&revmap_trees_mutex);
480+
}
481+
}
482+
458483
void irq_domain_disassociate(struct irq_domain *domain, unsigned int irq)
459484
{
460485
struct irq_data *irq_data = irq_get_irq_data(irq);
@@ -483,13 +508,7 @@ void irq_domain_disassociate(struct irq_domain *domain, unsigned int irq)
483508
domain->mapcount--;
484509

485510
/* Clear reverse map for this hwirq */
486-
if (hwirq < domain->revmap_size) {
487-
domain->linear_revmap[hwirq] = 0;
488-
} else {
489-
mutex_lock(&revmap_trees_mutex);
490-
radix_tree_delete(&domain->revmap_tree, hwirq);
491-
mutex_unlock(&revmap_trees_mutex);
492-
}
511+
irq_domain_clear_mapping(domain, hwirq);
493512
}
494513

495514
int irq_domain_associate(struct irq_domain *domain, unsigned int virq,
@@ -533,13 +552,7 @@ int irq_domain_associate(struct irq_domain *domain, unsigned int virq,
533552
}
534553

535554
domain->mapcount++;
536-
if (hwirq < domain->revmap_size) {
537-
domain->linear_revmap[hwirq] = virq;
538-
} else {
539-
mutex_lock(&revmap_trees_mutex);
540-
radix_tree_insert(&domain->revmap_tree, hwirq, irq_data);
541-
mutex_unlock(&revmap_trees_mutex);
542-
}
555+
irq_domain_set_mapping(domain, hwirq, irq_data);
543556
mutex_unlock(&irq_domain_mutex);
544557

545558
irq_clear_status_flags(virq, IRQ_NOREQUEST);
@@ -1138,16 +1151,9 @@ static void irq_domain_insert_irq(int virq)
11381151

11391152
for (data = irq_get_irq_data(virq); data; data = data->parent_data) {
11401153
struct irq_domain *domain = data->domain;
1141-
irq_hw_number_t hwirq = data->hwirq;
11421154

11431155
domain->mapcount++;
1144-
if (hwirq < domain->revmap_size) {
1145-
domain->linear_revmap[hwirq] = virq;
1146-
} else {
1147-
mutex_lock(&revmap_trees_mutex);
1148-
radix_tree_insert(&domain->revmap_tree, hwirq, data);
1149-
mutex_unlock(&revmap_trees_mutex);
1150-
}
1156+
irq_domain_set_mapping(domain, data->hwirq, data);
11511157

11521158
/* If not already assigned, give the domain the chip's name */
11531159
if (!domain->name && data->chip)
@@ -1171,13 +1177,7 @@ static void irq_domain_remove_irq(int virq)
11711177
irq_hw_number_t hwirq = data->hwirq;
11721178

11731179
domain->mapcount--;
1174-
if (hwirq < domain->revmap_size) {
1175-
domain->linear_revmap[hwirq] = 0;
1176-
} else {
1177-
mutex_lock(&revmap_trees_mutex);
1178-
radix_tree_delete(&domain->revmap_tree, hwirq);
1179-
mutex_unlock(&revmap_trees_mutex);
1180-
}
1180+
irq_domain_clear_mapping(domain, hwirq);
11811181
}
11821182
}
11831183

0 commit comments

Comments
 (0)