Skip to content

Commit 930a1bb

Browse files
jhovoldMarc Zyngier
authored andcommitted
irqdomain: Clean up irq_domain_push/pop_irq()
The irq_domain_push_irq() interface is used to add a new (outmost) level to a hierarchical domain after IRQs have been allocated. Possibly due to differing mental images of hierarchical domains, the names used for the irq_data variables make these functions much harder to understand than what they need to be. Rename the struct irq_data pointer to the data embedded in the descriptor as simply 'irq_data' and refer to the data allocated by this interface as 'parent_irq_data' so that the names reflect how hierarchical domains are implemented. Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Tested-by: Hsin-Yi Wang <[email protected]> Tested-by: Mark-PK Tsai <[email protected]> Signed-off-by: Johan Hovold <[email protected]> Signed-off-by: Marc Zyngier <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 4e0d86d commit 930a1bb

File tree

1 file changed

+32
-33
lines changed

1 file changed

+32
-33
lines changed

kernel/irq/irqdomain.c

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,8 +1598,8 @@ static void irq_domain_fix_revmap(struct irq_data *d)
15981598
*/
15991599
int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg)
16001600
{
1601-
struct irq_data *child_irq_data;
1602-
struct irq_data *root_irq_data = irq_get_irq_data(virq);
1601+
struct irq_data *irq_data = irq_get_irq_data(virq);
1602+
struct irq_data *parent_irq_data;
16031603
struct irq_desc *desc;
16041604
int rv = 0;
16051605

@@ -1624,45 +1624,44 @@ int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg)
16241624
if (WARN_ON(!irq_domain_is_hierarchy(domain)))
16251625
return -EINVAL;
16261626

1627-
if (!root_irq_data)
1627+
if (!irq_data)
16281628
return -EINVAL;
16291629

1630-
if (domain->parent != root_irq_data->domain)
1630+
if (domain->parent != irq_data->domain)
16311631
return -EINVAL;
16321632

1633-
child_irq_data = kzalloc_node(sizeof(*child_irq_data), GFP_KERNEL,
1634-
irq_data_get_node(root_irq_data));
1635-
if (!child_irq_data)
1633+
parent_irq_data = kzalloc_node(sizeof(*parent_irq_data), GFP_KERNEL,
1634+
irq_data_get_node(irq_data));
1635+
if (!parent_irq_data)
16361636
return -ENOMEM;
16371637

16381638
mutex_lock(&irq_domain_mutex);
16391639

16401640
/* Copy the original irq_data. */
1641-
*child_irq_data = *root_irq_data;
1641+
*parent_irq_data = *irq_data;
16421642

16431643
/*
1644-
* Overwrite the root_irq_data, which is embedded in struct
1645-
* irq_desc, with values for this domain.
1644+
* Overwrite the irq_data, which is embedded in struct irq_desc, with
1645+
* values for this domain.
16461646
*/
1647-
root_irq_data->parent_data = child_irq_data;
1648-
root_irq_data->domain = domain;
1649-
root_irq_data->mask = 0;
1650-
root_irq_data->hwirq = 0;
1651-
root_irq_data->chip = NULL;
1652-
root_irq_data->chip_data = NULL;
1647+
irq_data->parent_data = parent_irq_data;
1648+
irq_data->domain = domain;
1649+
irq_data->mask = 0;
1650+
irq_data->hwirq = 0;
1651+
irq_data->chip = NULL;
1652+
irq_data->chip_data = NULL;
16531653

16541654
/* May (probably does) set hwirq, chip, etc. */
16551655
rv = irq_domain_alloc_irqs_hierarchy(domain, virq, 1, arg);
16561656
if (rv) {
16571657
/* Restore the original irq_data. */
1658-
*root_irq_data = *child_irq_data;
1659-
kfree(child_irq_data);
1658+
*irq_data = *parent_irq_data;
1659+
kfree(parent_irq_data);
16601660
goto error;
16611661
}
16621662

1663-
irq_domain_fix_revmap(child_irq_data);
1664-
irq_domain_set_mapping(domain, root_irq_data->hwirq, root_irq_data);
1665-
1663+
irq_domain_fix_revmap(parent_irq_data);
1664+
irq_domain_set_mapping(domain, irq_data->hwirq, irq_data);
16661665
error:
16671666
mutex_unlock(&irq_domain_mutex);
16681667

@@ -1680,8 +1679,8 @@ EXPORT_SYMBOL_GPL(irq_domain_push_irq);
16801679
*/
16811680
int irq_domain_pop_irq(struct irq_domain *domain, int virq)
16821681
{
1683-
struct irq_data *root_irq_data = irq_get_irq_data(virq);
1684-
struct irq_data *child_irq_data;
1682+
struct irq_data *irq_data = irq_get_irq_data(virq);
1683+
struct irq_data *parent_irq_data;
16851684
struct irq_data *tmp_irq_data;
16861685
struct irq_desc *desc;
16871686

@@ -1703,37 +1702,37 @@ int irq_domain_pop_irq(struct irq_domain *domain, int virq)
17031702
if (domain == NULL)
17041703
return -EINVAL;
17051704

1706-
if (!root_irq_data)
1705+
if (!irq_data)
17071706
return -EINVAL;
17081707

17091708
tmp_irq_data = irq_domain_get_irq_data(domain, virq);
17101709

17111710
/* We can only "pop" if this domain is at the top of the list */
1712-
if (WARN_ON(root_irq_data != tmp_irq_data))
1711+
if (WARN_ON(irq_data != tmp_irq_data))
17131712
return -EINVAL;
17141713

1715-
if (WARN_ON(root_irq_data->domain != domain))
1714+
if (WARN_ON(irq_data->domain != domain))
17161715
return -EINVAL;
17171716

1718-
child_irq_data = root_irq_data->parent_data;
1719-
if (WARN_ON(!child_irq_data))
1717+
parent_irq_data = irq_data->parent_data;
1718+
if (WARN_ON(!parent_irq_data))
17201719
return -EINVAL;
17211720

17221721
mutex_lock(&irq_domain_mutex);
17231722

1724-
root_irq_data->parent_data = NULL;
1723+
irq_data->parent_data = NULL;
17251724

1726-
irq_domain_clear_mapping(domain, root_irq_data->hwirq);
1725+
irq_domain_clear_mapping(domain, irq_data->hwirq);
17271726
irq_domain_free_irqs_hierarchy(domain, virq, 1);
17281727

17291728
/* Restore the original irq_data. */
1730-
*root_irq_data = *child_irq_data;
1729+
*irq_data = *parent_irq_data;
17311730

1732-
irq_domain_fix_revmap(root_irq_data);
1731+
irq_domain_fix_revmap(irq_data);
17331732

17341733
mutex_unlock(&irq_domain_mutex);
17351734

1736-
kfree(child_irq_data);
1735+
kfree(parent_irq_data);
17371736

17381737
return 0;
17391738
}

0 commit comments

Comments
 (0)