Skip to content

Commit 3d7c626

Browse files
larunbestevenprice-arm
authored andcommitted
drm/panfrost: Check sgt to know whether pages are already mapped
In the MMU's page fault ISR for a heap object, determine whether the faulting address belongs to a 2MiB block that was already mapped by checking its corresponding sgt in the Panfrost BO. This is done in preparation for a future commit in which the MMU mapping helper might fail, but the page array is left populated, so this cannot be used as a check for an early bail-out. Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com> Link: https://lore.kernel.org/r/20251019145225.3621989-6-adrian.larumbe@collabora.com Signed-off-by: Steven Price <steven.price@arm.com>
1 parent f45f73c commit 3d7c626

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

drivers/gpu/drm/panfrost/panfrost_mmu.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -602,10 +602,12 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,
602602
refcount_set(&bo->base.pages_use_count, 1);
603603
} else {
604604
pages = bo->base.pages;
605-
if (pages[page_offset]) {
606-
/* Pages are already mapped, bail out. */
607-
goto out;
608-
}
605+
}
606+
607+
sgt = &bo->sgts[page_offset / (SZ_2M / PAGE_SIZE)];
608+
if (sgt->sgl) {
609+
/* Pages are already mapped, bail out. */
610+
goto out;
609611
}
610612

611613
mapping = bo->base.base.filp->f_mapping;
@@ -627,7 +629,6 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,
627629
}
628630
}
629631

630-
sgt = &bo->sgts[page_offset / (SZ_2M / PAGE_SIZE)];
631632
ret = sg_alloc_table_from_pages(sgt, pages + page_offset,
632633
NUM_FAULT_PAGES, 0, SZ_2M, GFP_KERNEL);
633634
if (ret)

0 commit comments

Comments
 (0)