Message ID | 04220b3420c2c513490450f37de109182364f235.1626888445.git.robin.murphy@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iommu: Refactor DMA domain strictness | expand |
On Wed, Jul 21, 2021 at 07:20:27PM +0100, Robin Murphy wrote: > - if (type == IOMMU_DOMAIN_DMA && using_legacy_binding) > + if ((type & __IOMMU_DOMAIN_DMA_API) && using_legacy_binding) Hmm, I wonder whether it is time to introduce helpers for these checks? Something like iommu_domain_is_dma() is more readable.
On 2021-07-26 13:46, Joerg Roedel wrote: > On Wed, Jul 21, 2021 at 07:20:27PM +0100, Robin Murphy wrote: >> - if (type == IOMMU_DOMAIN_DMA && using_legacy_binding) >> + if ((type & __IOMMU_DOMAIN_DMA_API) && using_legacy_binding) > > Hmm, I wonder whether it is time to introduce helpers for these checks? > > Something like iommu_domain_is_dma() is more readable. Ha, I had exactly that at one point, except I think in the order of iommu_is_dma_domain() :) The end result didn't seem to give enough extra clarity to justify the header churn for me, but I'm happy to be wrong about that if you prefer. Cheers, Robin.
On Mon, Jul 26, 2021 at 02:09:00PM +0100, Robin Murphy wrote: > Ha, I had exactly that at one point, except I think in the order of > iommu_is_dma_domain() :) That name is fine too :) > The end result didn't seem to give enough extra clarity to justify the > header churn for me, but I'm happy to be wrong about that if you prefer. Developers look more into the code than into headers, so I think the header churn is worth it to improve code readability. But we can do that on-top of these changes in an extra patch-set which also introduces helpers for other domain types (if it is worth it). Regards, Jörg
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c index 039f371d2f8b..fa41026d272e 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -1972,6 +1972,7 @@ static struct iommu_domain *arm_smmu_domain_alloc(unsigned type) if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA && + type != IOMMU_DOMAIN_DMA_FQ && type != IOMMU_DOMAIN_IDENTITY) return NULL; diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c index 354be8f4c0ef..dbc14c265b15 100644 --- a/drivers/iommu/arm/arm-smmu/arm-smmu.c +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c @@ -870,10 +870,11 @@ static struct iommu_domain *arm_smmu_domain_alloc(unsigned type) if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA && + type != IOMMU_DOMAIN_DMA_FQ && type != IOMMU_DOMAIN_IDENTITY) return NULL; - if (type == IOMMU_DOMAIN_DMA && using_legacy_binding) + if ((type & __IOMMU_DOMAIN_DMA_API) && using_legacy_binding) return NULL; /* * Allocate the domain and initialise some of its data structures.
In preparation for the strict vs. non-strict decision for DMA domains to be expressed in the domain type, make sure we expose our flush queue awareness by accepting the new domain type, and test the specific feature flag where we want to identify DMA domains in general. Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 1 + drivers/iommu/arm/arm-smmu/arm-smmu.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-)