irqchip/gic-v3-its: Use irq_domain_create_hierarchy()
authorJohan Hovold <johan+linaro@kernel.org>
Mon, 13 Feb 2023 10:42:58 +0000 (11:42 +0100)
committerMarc Zyngier <maz@kernel.org>
Mon, 13 Feb 2023 19:31:25 +0000 (19:31 +0000)
Use the irq_domain_create_hierarchy() helper to create the hierarchical
domain, which both serves as documentation and avoids poking at
irqdomain internals.

Note that the domain host_data was first set to the struct its_node
during allocation only to immediately be overwritten with the struct
msi_domain_info.

Tested-by: Hsin-Yi Wang <hsinyi@chromium.org>
Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20230213104302.17307-17-johan+linaro@kernel.org
drivers/irqchip/irq-gic-v3-its.c

index 973ede0197e36f066f1904280bc710cc89c84879..5634d29b644d8a9ec6ea4eae43ded18607a52c05 100644 (file)
@@ -4909,18 +4909,19 @@ static int its_init_domain(struct fwnode_handle *handle, struct its_node *its)
        if (!info)
                return -ENOMEM;
 
-       inner_domain = irq_domain_create_tree(handle, &its_domain_ops, its);
+       info->ops = &its_msi_domain_ops;
+       info->data = its;
+
+       inner_domain = irq_domain_create_hierarchy(its_parent,
+                                                  its->msi_domain_flags, 0,
+                                                  handle, &its_domain_ops,
+                                                  info);
        if (!inner_domain) {
                kfree(info);
                return -ENOMEM;
        }
 
-       inner_domain->parent = its_parent;
        irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
-       inner_domain->flags |= its->msi_domain_flags;
-       info->ops = &its_msi_domain_ops;
-       info->data = its;
-       inner_domain->host_data = info;
 
        return 0;
 }