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.


> +       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;
> +}

Reply via email to