aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorSui Jingfeng <sui.jingfeng@linux.dev>2024-11-15 20:32:46 +0800
committerLucas Stach <l.stach@pengutronix.de>2024-12-03 18:30:32 +0100
commita807cb22adc490ef33304e52c70ab65b3f19fe20 (patch)
treeb72ed2cd647f6bea54f8172a6def07bf4783fd7f
parentdrm/etnaviv: Fix the debug log of the etnaviv_iommu_map() (diff)
downloadwireguard-linux-a807cb22adc490ef33304e52c70ab65b3f19fe20.tar.xz
wireguard-linux-a807cb22adc490ef33304e52c70ab65b3f19fe20.zip
drm/etnaviv: Improve VA, PA, SIZE alignment checking
Alignment checking is only needed to be done in the upper caller function. If those address and sizes are able to pass the check, it will certainly pass the same test in the etnaviv_context_unmap() function. We don't need examine it more than once. Remove redundant alignment tests, move the those useless to upper caller function. Signed-off-by: Sui Jingfeng <sui.jingfeng@linux.dev> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_mmu.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
index ff90bf85c156..df5192083b20 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c
@@ -19,12 +19,6 @@ static void etnaviv_context_unmap(struct etnaviv_iommu_context *context,
size_t unmapped_page, unmapped = 0;
size_t pgsize = SZ_4K;
- if (!IS_ALIGNED(iova | size, pgsize)) {
- pr_err("unaligned: iova 0x%lx size 0x%zx min_pagesz 0x%zx\n",
- iova, size, pgsize);
- return;
- }
-
while (unmapped < size) {
unmapped_page = context->global->ops->unmap(context, iova,
pgsize);
@@ -45,12 +39,6 @@ static int etnaviv_context_map(struct etnaviv_iommu_context *context,
size_t orig_size = size;
int ret = 0;
- if (!IS_ALIGNED(iova | paddr | size, pgsize)) {
- pr_err("unaligned: iova 0x%lx pa %pa size 0x%zx min_pagesz 0x%zx\n",
- iova, &paddr, size, pgsize);
- return -EINVAL;
- }
-
while (size) {
ret = context->global->ops->map(context, iova, paddr, pgsize,
prot);
@@ -88,6 +76,14 @@ static int etnaviv_iommu_map(struct etnaviv_iommu_context *context,
VERB("map[%d]: %08x %pap(%x)", i, da, &pa, bytes);
+ if (!IS_ALIGNED(iova | pa | bytes, SZ_4K)) {
+ dev_err(context->global->dev,
+ "unaligned: iova 0x%x pa %pa size 0x%x\n",
+ iova, &pa, bytes);
+ ret = -EINVAL;
+ goto fail;
+ }
+
ret = etnaviv_context_map(context, da, pa, bytes, prot);
if (ret)
goto fail;