On Thu, 12 Feb 2026 17:19:20 -0800 Chia-I Wu <[email protected]> wrote:
> On Wed, Feb 11, 2026 at 12:22 AM Boris Brezillon > <[email protected]> wrote: > [...] > > +static unsigned long > > +panthor_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control > > *sc) > > +{ > > + struct panthor_device *ptdev = shrinker->private_data; > > + unsigned long remaining = 0; > > + unsigned long freed = 0; > > + > > + if (!can_swap()) > > + goto out; > > + > > + freed += drm_gem_lru_scan(&ptdev->reclaim.unused, > > + sc->nr_to_scan - freed, &remaining, > > + panthor_gem_try_evict, NULL); > > + if (freed >= sc->nr_to_scan) > > + goto out; > > + > > + freed += drm_gem_lru_scan(&ptdev->reclaim.mmapped, > > + sc->nr_to_scan - freed, &remaining, > > + panthor_gem_try_evict, NULL); > > + if (freed >= sc->nr_to_scan) > > + goto out; > > + > Do we need to check for can_block here? panthor_gem_try_evict will > block for bos on lrus below. Yep, we do. Will fix that in v4. > > > > + freed += panthor_mmu_reclaim_priv_bos(ptdev, sc->nr_to_scan - freed, > > + &remaining, > > panthor_gem_try_evict); > > + if (freed >= sc->nr_to_scan) > > + goto out; > > + > > + freed += drm_gem_lru_scan(&ptdev->reclaim.gpu_mapped_shared, > > + sc->nr_to_scan - freed, &remaining, > > + panthor_gem_try_evict, NULL); > > + > > +out: > > +#ifdef CONFIG_DEBUG_FS > > + /* This is racy, but that's okay, because this is just debugfs > > + * reporting and doesn't need to be accurate. > > + */ > > + ptdev->reclaim.nr_pages_reclaimed_on_last_scan = freed; > > +#endif > > + > > + /* If there are things to reclaim, try a couple times before giving > > up. */ > > + if (!freed && remaining > 0 && > > + atomic_inc_return(&ptdev->reclaim.retry_count) < 2) > > + return 0; > > + > > + atomic_set(&ptdev->reclaim.retry_count, 0); > > + > > + if (freed) > > + return freed; > > + > > + /* There's nothing left to reclaim, or the resources are contended. > > Give up now. */ > > + return SHRINK_STOP; > > +}
