Commit 46c6b2bc authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu: Revive device_group iommu-ops call-back



That call-back is currently unused, change it into a
call-back function for finding the right IOMMU group for a
device.
This is a first step to remove the hard-coded PCI dependency
in the iommu-group code.

Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 876945db
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -814,6 +814,7 @@ static struct iommu_group *iommu_group_get_for_pci_dev(struct pci_dev *pdev)
 */
struct iommu_group *iommu_group_get_for_dev(struct device *dev)
{
	const struct iommu_ops *ops = dev->bus->iommu_ops;
	struct iommu_group *group;
	int ret;

@@ -821,9 +822,11 @@ struct iommu_group *iommu_group_get_for_dev(struct device *dev)
	if (group)
		return group;

	if (!dev_is_pci(dev))
		return ERR_PTR(-EINVAL);
	group = ERR_PTR(-EINVAL);

	if (ops && ops->device_group)
		group = ops->device_group(dev);
	else if (dev_is_pci(dev))
		group = iommu_group_get_for_pci_dev(to_pci_dev(dev));

	if (IS_ERR(group))
+1 −1
Original line number Diff line number Diff line
@@ -168,7 +168,7 @@ struct iommu_ops {
	phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, dma_addr_t iova);
	int (*add_device)(struct device *dev);
	void (*remove_device)(struct device *dev);
	int (*device_group)(struct device *dev, unsigned int *groupid);
	struct iommu_group *(*device_group)(struct device *dev);
	int (*domain_get_attr)(struct iommu_domain *domain,
			       enum iommu_attr attr, void *data);
	int (*domain_set_attr)(struct iommu_domain *domain,