Skip to content

Commit c6b7782

Browse files
Marc ZyngierKAGA-KOKO
authored andcommitted
irqchip/gic: Convert to msi_create_parent_irq_domain() helper
Switch the GIC family of interrupt chip drivers over to the common helper function to create the interrupt domains. [ tglx: Moved the struct out of the function call argument ] Signed-off-by: Marc Zyngier <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Link: https://lore.kernel.org/all/[email protected]
1 parent e4d001b commit c6b7782

File tree

3 files changed

+23
-31
lines changed

3 files changed

+23
-31
lines changed

drivers/irqchip/irq-gic-v2m.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -261,23 +261,23 @@ static struct msi_parent_ops gicv2m_msi_parent_ops = {
261261

262262
static __init int gicv2m_allocate_domains(struct irq_domain *parent)
263263
{
264-
struct irq_domain *inner_domain;
264+
struct irq_domain_info info = {
265+
.ops = &gicv2m_domain_ops,
266+
.parent = parent,
267+
};
265268
struct v2m_data *v2m;
266269

267270
v2m = list_first_entry_or_null(&v2m_nodes, struct v2m_data, entry);
268271
if (!v2m)
269272
return 0;
270273

271-
inner_domain = irq_domain_create_hierarchy(parent, 0, 0, v2m->fwnode,
272-
&gicv2m_domain_ops, v2m);
273-
if (!inner_domain) {
274+
info.host_data = v2m;
275+
info.fwnode = v2m->fwnode;
276+
277+
if (!msi_create_parent_irq_domain(&info, &gicv2m_msi_parent_ops)) {
274278
pr_err("Failed to create GICv2m domain\n");
275279
return -ENOMEM;
276280
}
277-
278-
irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
279-
inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
280-
inner_domain->msi_parent_ops = &gicv2m_msi_parent_ops;
281281
return 0;
282282
}
283283

drivers/irqchip/irq-gic-v3-its.c

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5122,7 +5122,12 @@ static void __init __iomem *its_map_one(struct resource *res, int *err)
51225122

51235123
static int its_init_domain(struct its_node *its)
51245124
{
5125-
struct irq_domain *inner_domain;
5125+
struct irq_domain_info dom_info = {
5126+
.fwnode = its->fwnode_handle,
5127+
.ops = &its_domain_ops,
5128+
.domain_flags = its->msi_domain_flags,
5129+
.parent = its_parent,
5130+
};
51265131
struct msi_domain_info *info;
51275132

51285133
info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -5131,21 +5136,12 @@ static int its_init_domain(struct its_node *its)
51315136

51325137
info->ops = &its_msi_domain_ops;
51335138
info->data = its;
5139+
dom_info.host_data = info;
51345140

5135-
inner_domain = irq_domain_create_hierarchy(its_parent,
5136-
its->msi_domain_flags, 0,
5137-
its->fwnode_handle, &its_domain_ops,
5138-
info);
5139-
if (!inner_domain) {
5141+
if (!msi_create_parent_irq_domain(&dom_info, &gic_v3_its_msi_parent_ops)) {
51405142
kfree(info);
51415143
return -ENOMEM;
51425144
}
5143-
5144-
irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
5145-
5146-
inner_domain->msi_parent_ops = &gic_v3_its_msi_parent_ops;
5147-
inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT | IRQ_DOMAIN_FLAG_MSI_IMMUTABLE;
5148-
51495145
return 0;
51505146
}
51515147

@@ -5522,7 +5518,7 @@ static struct its_node __init *its_node_init(struct resource *res,
55225518
its->base = its_base;
55235519
its->phys_base = res->start;
55245520
its->get_msi_base = its_irq_get_msi_base;
5525-
its->msi_domain_flags = IRQ_DOMAIN_FLAG_ISOLATED_MSI;
5521+
its->msi_domain_flags = IRQ_DOMAIN_FLAG_ISOLATED_MSI | IRQ_DOMAIN_FLAG_MSI_IMMUTABLE;
55265522

55275523
its->numa_node = numa_node;
55285524
its->fwnode_handle = handle;

drivers/irqchip/irq-gic-v3-mbi.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -206,17 +206,13 @@ static const struct msi_parent_ops gic_v3_mbi_msi_parent_ops = {
206206

207207
static int mbi_allocate_domain(struct irq_domain *parent)
208208
{
209-
struct irq_domain *nexus_domain;
209+
struct irq_domain_info info = {
210+
.fwnode = parent->fwnode,
211+
.ops = &mbi_domain_ops,
212+
.parent = parent,
213+
};
210214

211-
nexus_domain = irq_domain_create_hierarchy(parent, 0, 0, parent->fwnode,
212-
&mbi_domain_ops, NULL);
213-
if (!nexus_domain)
214-
return -ENOMEM;
215-
216-
irq_domain_update_bus_token(nexus_domain, DOMAIN_BUS_NEXUS);
217-
nexus_domain->flags |= IRQ_DOMAIN_FLAG_MSI_PARENT;
218-
nexus_domain->msi_parent_ops = &gic_v3_mbi_msi_parent_ops;
219-
return 0;
215+
return msi_create_parent_irq_domain(&info, &gic_v3_mbi_msi_parent_ops) ? 0 : -ENOMEM;
220216
}
221217

222218
int __init mbi_init(struct fwnode_handle *fwnode, struct irq_domain *parent)

0 commit comments

Comments
 (0)