]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915: Spin for struct_mutex inside shrinker
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 9 Jun 2017 11:03:49 +0000 (12:03 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 14 Jun 2017 09:55:11 +0000 (10:55 +0100)
commitdb40f24eab2be45f1abebab8ceead1179b872b2c
treef96d17399bd8f949a07034ac82ada002f995624a
parent9e3e13be9f730fb7fd647bfbb6a4cf93daea60e6
drm/i915: Spin for struct_mutex inside shrinker

Having resolved whether or not we would deadlock upon a call to
mutex_lock(&dev->struct_mutex), we can then spin for the contended
struct_mutex if we are not the owner. We cannot afford to simply block
and wait for the mutex, as the owner may itself be waiting for the
allocator -- i.e. a cyclic deadlock. This should significantly improve
the chance of running the shrinker for other processes whilst the GPU is
busy.

A more balanced approach would be to optimistically spin whilst the
mutex owner was on the cpu and there was an opportunity to acquire the
mutex for ourselves quickly. However, that requires support from
kernel/locking/ and a new mutex_spin_trylock() primitive.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170609110350.1767-4-chris@chris-wilson.co.uk
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
drivers/gpu/drm/i915/i915_gem_shrinker.c