iommu/arm-smmu-v3: Avoid constructing invalid range commands
authorRobin Murphy <robin.murphy@arm.com>
Mon, 11 Sep 2023 11:57:04 +0000 (12:57 +0100)
committerWill Deacon <will@kernel.org>
Mon, 18 Sep 2023 09:16:24 +0000 (10:16 +0100)
commiteb6c97647be227822c7ce23655482b05e348fba5
tree8f78aede74cf8418b55126a7eed4776a55d5933d
parent0bb80ecc33a8fb5a682236443c1e740d5c917d1d
iommu/arm-smmu-v3: Avoid constructing invalid range commands

Although io-pgtable's non-leaf invalidations are always for full tables,
I missed that SVA also uses non-leaf invalidations, while being at the
mercy of whatever range the MMU notifier throws at it. This means it
definitely wants the previous TTL fix as well, since it also doesn't
know exactly which leaf level(s) may need invalidating, but it can also
give us less-aligned ranges wherein certain corners may lead to building
an invalid command where TTL, Num and Scale are all 0. It should be fine
to handle this by over-invalidating an extra page, since falling back to
a non-range command opens up a whole can of errata-flavoured worms.

Fixes: 6833b8f2e199 ("iommu/arm-smmu-v3: Set TTL invalidation hint better")
Reported-by: Rui Zhu <zhurui3@huawei.com>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/b99cfe71af2bd93a8a2930f20967fb2a4f7748dd.1694432734.git.robin.murphy@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c