|
@@ -252,6 +252,20 @@ struct irq_domain *msi_create_irq_domain(struct fwnode_handle *fwnode,
|
|
|
&msi_domain_ops, info);
|
|
|
}
|
|
|
|
|
|
+int msi_domain_prepare_irqs(struct irq_domain *domain, struct device *dev,
|
|
|
+ int nvec, msi_alloc_info_t *arg)
|
|
|
+{
|
|
|
+ struct msi_domain_info *info = domain->host_data;
|
|
|
+ struct msi_domain_ops *ops = info->ops;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = ops->msi_check(domain, info, dev);
|
|
|
+ if (ret == 0)
|
|
|
+ ret = ops->msi_prepare(domain, dev, nvec, arg);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* msi_domain_alloc_irqs - Allocate interrupts from a MSI interrupt domain
|
|
|
* @domain: The domain to allocate from
|
|
@@ -270,9 +284,7 @@ int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
|
|
|
struct msi_desc *desc;
|
|
|
int i, ret, virq = -1;
|
|
|
|
|
|
- ret = ops->msi_check(domain, info, dev);
|
|
|
- if (ret == 0)
|
|
|
- ret = ops->msi_prepare(domain, dev, nvec, &arg);
|
|
|
+ ret = msi_domain_prepare_irqs(domain, dev, nvec, &arg);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|