aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJoerg Roedel <jroedel@suse.de>2017-03-22 18:59:56 -0400
committerJoerg Roedel <jroedel@suse.de>2017-03-22 18:59:56 -0400
commit11cd3386a1987a0515d7ce11ee87b242e5015dfe (patch)
treea8f3db18956402e64722af7ccd31851f4f0dac10 /drivers
parent9d3a4de4cb8db8e71730e36736272ef041836f68 (diff)
parenta03849e7210277fa212779b7cd9c30e1ab6194b2 (diff)
Merge branch 'for-joerg/arm-smmu/fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into iommu/fixes
Diffstat (limited to 'drivers')
-rw-r--r--drivers/iommu/io-pgtable-arm-v7s.c6
-rw-r--r--drivers/iommu/io-pgtable-arm.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c
index 1c049e2e12bf..8d6ca28c3e1f 100644
--- a/drivers/iommu/io-pgtable-arm-v7s.c
+++ b/drivers/iommu/io-pgtable-arm-v7s.c
@@ -422,8 +422,12 @@ static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova,
422 pte |= ARM_V7S_ATTR_NS_TABLE; 422 pte |= ARM_V7S_ATTR_NS_TABLE;
423 423
424 __arm_v7s_set_pte(ptep, pte, 1, cfg); 424 __arm_v7s_set_pte(ptep, pte, 1, cfg);
425 } else { 425 } else if (ARM_V7S_PTE_IS_TABLE(pte, lvl)) {
426 cptep = iopte_deref(pte, lvl); 426 cptep = iopte_deref(pte, lvl);
427 } else {
428 /* We require an unmap first */
429 WARN_ON(!selftest_running);
430 return -EEXIST;
427 } 431 }
428 432
429 /* Rinse, repeat */ 433 /* Rinse, repeat */
diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index feacc54bec68..f9bc6ebb8140 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -335,8 +335,12 @@ static int __arm_lpae_map(struct arm_lpae_io_pgtable *data, unsigned long iova,
335 if (cfg->quirks & IO_PGTABLE_QUIRK_ARM_NS) 335 if (cfg->quirks & IO_PGTABLE_QUIRK_ARM_NS)
336 pte |= ARM_LPAE_PTE_NSTABLE; 336 pte |= ARM_LPAE_PTE_NSTABLE;
337 __arm_lpae_set_pte(ptep, pte, cfg); 337 __arm_lpae_set_pte(ptep, pte, cfg);
338 } else { 338 } else if (!iopte_leaf(pte, lvl)) {
339 cptep = iopte_deref(pte, data); 339 cptep = iopte_deref(pte, data);
340 } else {
341 /* We require an unmap first */
342 WARN_ON(!selftest_running);
343 return -EEXIST;
340 } 344 }
341 345
342 /* Rinse, repeat */ 346 /* Rinse, repeat */