Skip to content

Commit

Permalink
iommu/arm-smmu: Treat IOMMU_DOMAIN_DMA as bypass for now
Browse files Browse the repository at this point in the history
Until all upstream devices have their DMA ops swizzled to point at the
SMMU, we need to treat the IOMMU_DOMAIN_DMA domain as bypass to avoid
putting devices into an empty address space when detaching from VFIO.

Signed-off-by: Will Deacon <will.deacon@arm.com>
  • Loading branch information
Will Deacon committed Feb 18, 2016
1 parent bc7f2ce commit cbf8277
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/iommu/arm-smmu-v3.c
Original file line number Diff line number Diff line change
Expand Up @@ -1687,7 +1687,12 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
goto out_unlock;

smmu_group->domain = smmu_domain;
smmu_group->ste.bypass = false;

/*
* FIXME: This should always be "false" once we have IOMMU-backed
* DMA ops for all devices behind the SMMU.
*/
smmu_group->ste.bypass = domain->type == IOMMU_DOMAIN_DMA;

ret = arm_smmu_install_ste_for_group(smmu_group);
if (IS_ERR_VALUE(ret))
Expand Down
7 changes: 7 additions & 0 deletions drivers/iommu/arm-smmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1094,6 +1094,13 @@ static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
if (ret)
return ret == -EEXIST ? 0 : ret;

/*
* FIXME: This won't be needed once we have IOMMU-backed DMA ops
* for all devices behind the SMMU.
*/
if (smmu_domain->domain.type == IOMMU_DOMAIN_DMA)
return 0;

for (i = 0; i < cfg->num_streamids; ++i) {
u32 idx, s2cr;

Expand Down

0 comments on commit cbf8277

Please sign in to comment.