diff options
Diffstat (limited to 'drivers/iommu/io-pgtable-arm.c')
| -rw-r--r-- | drivers/iommu/io-pgtable-arm.c | 6 | 
1 files changed, 5 insertions, 1 deletions
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 */  | 
