]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915: Track number of pending freed objects
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 19 Feb 2018 22:06:31 +0000 (22:06 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 20 Feb 2018 09:10:41 +0000 (09:10 +0000)
commitd8a3e5c37e22e389129b3940656a00c9dc643ed7
tree43b3cf1f1a463134233c1b616a2f2802e007439b
parent35b9cc30b7ac8f61e41f9fd5883a8e72b57dd7dd
drm/i915: Track number of pending freed objects

During igt, we frequently call into the driver to reset both HW and
driver state (idling the device, waiting for it to become idle and
freeing off old objects) to ensure that we start each test/subtest/pass
from known state. This process incurs an RCU barrier or two to ensure
that any such pending frees are indeed flushed before we return.
However, unconditionally waiting on the RCU barrier adds needless delay
to many callers, which adds up to several seconds when repeated thousands
of times. We can skip the rcu_barrier() if by tracking how many outstanding
frees we have, we know there are none.

The same path is used along suspend, where we may be able to save the
unconditional RCU barrier.

To put it into perspective with a completely meaningless
microbenchmark, igt/gem_sync/idle is improved from 50ms to 30us on bdw.

v2: Remove the extra synchronize_rcu() inside i915_drop_caches_set()

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>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180219220631.25001-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_debugfs.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c