Commit 9003351c authored by Jean-Philippe Brucker's avatar Jean-Philippe Brucker Committed by Joerg Roedel
Browse files

iommu/vt-d: Support IOMMU_DEV_FEAT_IOPF



Allow drivers to query and enable IOMMU_DEV_FEAT_IOPF, which amounts to
checking whether PRI is enabled.

Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: default avatarJean-Philippe Brucker <jean-philippe@linaro.org>
Link: https://lore.kernel.org/r/20210401154718.307519-5-jean-philippe@linaro.org


Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 34b48c70
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -5311,6 +5311,8 @@ static int siov_find_pci_dvsec(struct pci_dev *pdev)
static bool
intel_iommu_dev_has_feat(struct device *dev, enum iommu_dev_features feat)
{
	struct device_domain_info *info = get_domain_info(dev);

	if (feat == IOMMU_DEV_FEAT_AUX) {
		int ret;

@@ -5325,13 +5327,13 @@ intel_iommu_dev_has_feat(struct device *dev, enum iommu_dev_features feat)
		return !!siov_find_pci_dvsec(to_pci_dev(dev));
	}

	if (feat == IOMMU_DEV_FEAT_SVA) {
		struct device_domain_info *info = get_domain_info(dev);
	if (feat == IOMMU_DEV_FEAT_IOPF)
		return info && info->pri_supported;

	if (feat == IOMMU_DEV_FEAT_SVA)
		return info && (info->iommu->flags & VTD_FLAG_SVM_CAPABLE) &&
			info->pasid_supported && info->pri_supported &&
			info->ats_supported;
	}

	return false;
}
@@ -5342,6 +5344,9 @@ intel_iommu_dev_enable_feat(struct device *dev, enum iommu_dev_features feat)
	if (feat == IOMMU_DEV_FEAT_AUX)
		return intel_iommu_enable_auxd(dev);

	if (feat == IOMMU_DEV_FEAT_IOPF)
		return intel_iommu_dev_has_feat(dev, feat) ? 0 : -ENODEV;

	if (feat == IOMMU_DEV_FEAT_SVA) {
		struct device_domain_info *info = get_domain_info(dev);