On 06/05/2026 11:45, Nicolas Frattaroli wrote: > panthor_mmu_reclaim_priv_bos returns the number of freed pages. However, > how many bytes of freed memory this translates to can't generally be > deduced from the number of pages, as the page size is a per-VM property. > > It may be useful to know the exact number of bytes that have been freed
The "useful" aspect seems to just be a drm_dbg() message from what I can see with this series? Am I missing something or is it not actually that useful? Thanks, Steve > for observability and debugging purposes. To that end, add a new > parameter "freed_sz", which is a pointer to a size_t where this > information will be stored. It may be NULL, in which case the > information isn't stored at all. > > Signed-off-by: Nicolas Frattaroli <[email protected]> > --- > drivers/gpu/drm/panthor/panthor_gem.c | 3 ++- > drivers/gpu/drm/panthor/panthor_mmu.c | 12 ++++++++++-- > drivers/gpu/drm/panthor/panthor_mmu.h | 1 + > 3 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/panthor/panthor_gem.c > b/drivers/gpu/drm/panthor/panthor_gem.c > index 13295d7a593d..80e82238f3c5 100644 > --- a/drivers/gpu/drm/panthor/panthor_gem.c > +++ b/drivers/gpu/drm/panthor/panthor_gem.c > @@ -1511,7 +1511,8 @@ panthor_gem_shrinker_scan(struct shrinker *shrinker, > struct shrink_control *sc) > goto out; > > freed += panthor_mmu_reclaim_priv_bos(ptdev, sc->nr_to_scan - freed, > - &remaining, > panthor_gem_try_evict); > + &remaining, NULL, > + panthor_gem_try_evict); > if (freed >= sc->nr_to_scan) > goto out; > > diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c > b/drivers/gpu/drm/panthor/panthor_mmu.c > index a7ee14986849..b81388b35a58 100644 > --- a/drivers/gpu/drm/panthor/panthor_mmu.c > +++ b/drivers/gpu/drm/panthor/panthor_mmu.c > @@ -3127,13 +3127,18 @@ int panthor_vm_prepare_mapped_bos_resvs(struct > drm_exec *exec, struct panthor_vm > unsigned long > panthor_mmu_reclaim_priv_bos(struct panthor_device *ptdev, > unsigned int nr_to_scan, unsigned long *remaining, > + size_t *freed_sz, > bool (*shrink)(struct drm_gem_object *, > struct ww_acquire_ctx *)) > { > + unsigned long newly_freed; > unsigned long freed = 0; > LIST_HEAD(remaining_vms); > LIST_HEAD(vms); > > + if (freed_sz) > + *freed_sz = 0; > + > mutex_lock(&ptdev->reclaim.lock); > list_splice_init(&ptdev->reclaim.vms, &vms); > > @@ -3152,8 +3157,11 @@ panthor_mmu_reclaim_priv_bos(struct panthor_device > *ptdev, > > mutex_unlock(&ptdev->reclaim.lock); > > - freed += drm_gem_lru_scan(&vm->reclaim.lru, nr_to_scan - freed, > - remaining, shrink, NULL); > + newly_freed = drm_gem_lru_scan(&vm->reclaim.lru, nr_to_scan - > freed, > + remaining, shrink, NULL); > + if (freed_sz) > + *freed_sz += panthor_vm_page_size(vm) * newly_freed; > + freed += newly_freed; > > mutex_lock(&ptdev->reclaim.lock); > > diff --git a/drivers/gpu/drm/panthor/panthor_mmu.h > b/drivers/gpu/drm/panthor/panthor_mmu.h > index 3522fbbce369..12b18b5f90e1 100644 > --- a/drivers/gpu/drm/panthor/panthor_mmu.h > +++ b/drivers/gpu/drm/panthor/panthor_mmu.h > @@ -52,6 +52,7 @@ int panthor_vm_evict_bo_mappings_locked(struct > panthor_gem_object *bo); > unsigned long > panthor_mmu_reclaim_priv_bos(struct panthor_device *ptdev, > unsigned int nr_to_scan, unsigned long *remaining, > + size_t *freed_sz, > bool (*shrink)(struct drm_gem_object *, > struct ww_acquire_ctx *)); > int panthor_vm_prepare_mapped_bos_resvs(struct drm_exec *exec, >
