On Fri, 5 Jan 2024 21:46:16 +0300 Dmitry Osipenko <dmitry.osipenko@xxxxxxxxxxxxx> wrote: > +static bool drm_gem_shmem_is_evictable(struct drm_gem_shmem_object *shmem) > +{ > + return (shmem->madv >= 0) && shmem->base.funcs->evict && > + refcount_read(&shmem->pages_use_count) && > + !refcount_read(&shmem->pages_pin_count) && > + !shmem->base.dma_buf && !shmem->base.import_attach && > + !shmem->evicted; Are we missing && dma_resv_test_signaled(shmem->base.resv, DMA_RESV_USAGE_BOOKKEEP) to make sure the GPU is done using the BO? The same applies to drm_gem_shmem_is_purgeable() BTW. If you don't want to do this test here, we need a way to let drivers provide a custom is_{evictable,purgeable}() test. I guess we should also expose drm_gem_shmem_shrinker_update_lru_locked() to let drivers move the GEMs that were used most recently (those referenced by a GPU job) at the end of the evictable LRU. > +} > +