summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorNeeti Desai <neetid@codeaurora.org>2015-05-12 16:39:58 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:12:38 -0700
commitab281bcc1dfdc163e6f728d3ccb6d1c22815ac5d (patch)
tree65fe2717b969cd686b80fb1930b15b7a3f34a02e /include/linux
parent8646144a8375ab14696b63e229f686e30cf23ea4 (diff)
iommu/arm-smmu: Add support for map/unmap to be atomic
Certain clients need map and unmap operations to be in the atomic context. This currently doesn't work since we need to prepare clocks and enable regulators (for tlb invalidation), and take a mutex (to protect the smmu_domain->smmu instance), which are all sleeping operations. Fix this by introducing a domain attribute to indicate that map and unmap should be atomic. When this domain attribute is set we assume: (1) clocks are already prepared (2) regulators are already on (3) the domain is attached to an SMMU (1) and (2) allow us to skip preparing clocks and enabling regulators during map and unmap and are taken care of internally in the driver. (3) is a contract with clients that allows us to skip taking the mutex that protects smmu_domain->smmu since we assume that the SMMU instance is valid and will not be going away. If clients break this contract then there are race conditions all over the place that will eventually result in a NULL dereference (specifically, of smmu_domain->smmu). Change-Id: I3e21df02f7b0cd116fb558715eea16f2119f1d03 Signed-off-by: Neeti Desai <neetid@codeaurora.org> Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/iommu.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 055d70b47b40..1890dd08b52e 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -89,6 +89,7 @@ enum iommu_attr {
DOMAIN_ATTR_COHERENT_HTW_DISABLE,
DOMAIN_ATTR_PT_BASE_ADDR,
DOMAIN_ATTR_SECURE_VMID,
+ DOMAIN_ATTR_ATOMIC,
DOMAIN_ATTR_MAX,
};