X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=drivers%2Fiommu%2Fio-pgtable-arm.c;h=f9bc6ebb8140b06c845355560fd6e5d113912073;hb=36a4dfc37856cae40e4d864950f768d8b7d4f9f5;hp=feacc54bec683b535fcba37e47ecb46af014ef5a;hpb=8841b5f0cdc71a0b8e42ef93d6eee9a081c67309;p=karo-tx-linux.git 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, if (cfg->quirks & IO_PGTABLE_QUIRK_ARM_NS) pte |= ARM_LPAE_PTE_NSTABLE; __arm_lpae_set_pte(ptep, pte, cfg); - } else { + } else if (!iopte_leaf(pte, lvl)) { cptep = iopte_deref(pte, data); + } else { + /* We require an unmap first */ + WARN_ON(!selftest_running); + return -EEXIST; } /* Rinse, repeat */