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;
 }