Re: [PATCH v17 13/18] drm/shmem-helper: Add memory shrinker

From: Dmitry Osipenko
Date: Sun Oct 08 2023 - 17:32:25 EST


On 10/3/23 12:00, Boris Brezillon wrote:
>> I'd prefer to keep refcounting as is, don't see how to implement your
>> suggestion.
> Can you be more specific? I don't really see what the problem is with
> decrementing pages_use_count when you free the sgt (eviction), and
> re-incrementing it when the sgt is restored (swapin).

For the reference, we further discussed this question about refcounting
with Boris offline and found how to implement the refcnt drop done by
shrinker's evict/purge.

For evict/purge we can do:

if (!refcount_dec_not_one(&shmem->pages_use_count))
refcount_set(&shmem->pages_use_count, 0);

and then for swapin:

if (!refcount_inc_not_zero(&shmem->pages_use_count))
refcount_set(&shmem->pages_use_count, 1);

This resolves the issue with dropping refcnt to zero I was talking
about, allowing to delegate sgt's refcnt ownership to shrinker.

--
Best regards,
Dmitry