Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Adrián Larumbe and committed by
Steven Price
3d7c6267 f45f73c6

+6 -5
+6 -5
drivers/gpu/drm/panfrost/panfrost_mmu.c
··· 602 602 refcount_set(&bo->base.pages_use_count, 1); 603 603 } else { 604 604 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; 609 611 } 610 612 611 613 mapping = bo->base.base.filp->f_mapping; ··· 629 627 } 630 628 } 631 629 632 - sgt = &bo->sgts[page_offset / (SZ_2M / PAGE_SIZE)]; 633 630 ret = sg_alloc_table_from_pages(sgt, pages + page_offset, 634 631 NUM_FAULT_PAGES, 0, SZ_2M, GFP_KERNEL); 635 632 if (ret)