Commit 89f4f377 authored by Yi Liu's avatar Yi Liu Committed by Jason Zeng
Browse files

iommu/vt-d: Enhance capability check for nested parent domain allocation

mainline inclusion
from mainline-v6.7-rc1
commit a2cdecdf9d234455fdfc8f539bbf5818711bc29d
category: feature
bugzilla: https://gitee.com/openeuler/intel-kernel/issues/I8Y6AM
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?a2cdecdf9d234455fdfc8f539bbf5818711bc29d

--------------------------------

This adds the scalable mode check before allocating the nested parent domain
as checking nested capability is not enough. User may turn off scalable mode
which also means no nested support even if the hardware supports it.

Intel-SIG: a2cdecdf9d23 iommu/vt-d: Enhance capability check for nested parent domain allocation
Backport IOMMUFD Dirty Tracking

Fixes: c97d1b20d383 ("iommu/vt-d: Add domain_alloc_user op")
Link: https://lore.kernel.org/r/20231024150011.44642-1-yi.l.liu@intel.com


Signed-off-by: default avatarYi Liu <yi.l.liu@intel.com>
Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
[ jz: amend commit log ]
Signed-off-by: default avatarJason Zeng <jason.zeng@intel.com>
parent dc751d41
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4075,7 +4075,7 @@ intel_iommu_domain_alloc_user(struct device *dev, u32 flags)
	if (!iommu)
		return ERR_PTR(-ENODEV);

	if ((flags & IOMMU_HWPT_ALLOC_NEST_PARENT) && !ecap_nest(iommu->ecap))
	if ((flags & IOMMU_HWPT_ALLOC_NEST_PARENT) && !nested_supported(iommu))
		return ERR_PTR(-EOPNOTSUPP);

	dirty_tracking = (flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING);
+2 −0
Original line number Diff line number Diff line
@@ -544,6 +544,8 @@ enum {
				 ecap_pasid((iommu)->ecap))
#define ssads_supported(iommu) (sm_supported(iommu) &&                 \
				ecap_slads((iommu)->ecap))
#define nested_supported(iommu)	(sm_supported(iommu) &&			\
				 ecap_nest((iommu)->ecap))

struct pasid_entry;
struct pasid_state_entry;