On 3/9/22 04:12, Rob Clark wrote:
+static unsigned long +virtio_gpu_gem_shrinker_count_objects(struct shrinker *shrinker,
struct shrink_control *sc)
+{
struct drm_gem_shmem_object *shmem;
struct virtio_gpu_device *vgdev;
unsigned long count = 0;
bool empty = true;
vgdev = container_of(shrinker, struct virtio_gpu_device,
vgshrinker.shrinker);
if (!mutex_trylock(&vgdev->mm_lock))
return 0;
One bit of advice from previously dealing with shrinker and heavy memory pressure situations (turns out 4GB chromebooks can be pretty much under *constant* memory pressure):
You *really* want to make shrinker->count_objects lockless.. and minimize the lock contention on shrinker->scan_objects (ie. The problem is you can end up with shrinking going on on all CPU cores in parallel, you want to not funnel that thru one lock as much as possible.
See in particular:
25ed38b3ed26 ("drm/msm: Drop mm_lock in scan loop") cc8a4d5a1bd8 ("drm/msm: Avoid mutex in shrinker_count()")
Thank you, I'll take that into account for v2.