linux_dsm_epyc7002/drivers/gpu/drm/i915/gem
Chris Wilson 0c159ffef6 drm/i915/gem: Defer obj->base.resv fini until RCU callback
Since reservation_object_fini() does an immediate free, rather than
kfree_rcu as normal, we have to delay the release until after the RCU
grace period has elapsed (i.e. from the rcu cleanup callback) so that we
can rely on the RCU protected access to the fences while the object is a
zombie.

i915_gem_busy_ioctl relies on having an RCU barrier to protect the
reservation in order to avoid having to take a reference and strong
memory barriers.

v2: Order is important; only release after putting the pages!

Fixes: c03467ba40 ("drm/i915/gem: Free pages before rcu-freeing the object")
Testcase: igt/gem_busy/close-race
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190703180601.10950-1-chris@chris-wilson.co.uk
2019-07-04 15:34:35 +01:00
..
selftests drm/i915/selftests: Lock the drm_mm while modifying 2019-07-03 11:07:57 +01:00
i915_gem_busy.c drm/i915: Use drm_gem_object.resv 2019-06-18 15:30:32 +01:00
i915_gem_clflush.c drm/i915: Use drm_gem_object.resv 2019-06-18 15:30:32 +01:00
i915_gem_clflush.h drm/i915: Move more GEM objects under gem/ 2019-05-28 12:45:29 +01:00
i915_gem_client_blt.c drm/i915/gem: Clear read/write domains for GPU clear 2019-06-24 18:20:20 +01:00
i915_gem_client_blt.h drm/i915: add in-kernel blitter client 2019-05-30 12:01:44 +01:00
i915_gem_context_types.h drm/i915: Rename i915_timeline to intel_timeline and move under gt 2019-06-21 13:48:53 +01:00
i915_gem_context.c drm/i915: Provide an i915_active.acquire callback 2019-06-21 19:47:55 +01:00
i915_gem_context.h drm/i915: Keep contexts pinned until after the next kernel context switch 2019-06-14 19:03:32 +01:00
i915_gem_dmabuf.c drm/i915: Use drm_gem_object.resv 2019-06-18 15:30:32 +01:00
i915_gem_domain.c drm/i915: move modesetting core code under display/ 2019-06-17 11:48:32 +03:00
i915_gem_execbuffer.c drm/i915/gt: Pass intel_gt to pm routines 2019-06-25 20:17:22 +01:00
i915_gem_fence.c drm/i915: Use drm_gem_object.resv 2019-06-18 15:30:32 +01:00
i915_gem_internal.c drm/i915: Pull scatterlist utils out of i915_gem.h 2019-05-28 12:45:29 +01:00
i915_gem_ioctls.h
i915_gem_mman.c drm/i915: update rpm_get/put to use the rpm structure 2019-06-14 15:58:33 +01:00
i915_gem_object_blt.c drm/i915: Pull kref into i915_address_space 2019-06-11 11:44:24 +01:00
i915_gem_object_blt.h drm/i915: add in-kernel blitter client 2019-05-30 12:01:44 +01:00
i915_gem_object_types.h drm/i915: Throw away the active object retirement complexity 2019-06-21 19:47:51 +01:00
i915_gem_object.c drm/i915/gem: Defer obj->base.resv fini until RCU callback 2019-07-04 15:34:35 +01:00
i915_gem_object.h drm/i915: Throw away the active object retirement complexity 2019-06-21 19:47:51 +01:00
i915_gem_pages.c drm/i915: Combine unbound/bound list tracking for objects 2019-06-12 13:36:43 +01:00
i915_gem_phys.c drm/i915/gem: Defer obj->base.resv fini until RCU callback 2019-07-04 15:34:35 +01:00
i915_gem_pm.c drm/i915: Lift intel_engines_resume() to callers 2019-06-26 18:01:01 +01:00
i915_gem_pm.h drm/i915: Move more GEM objects under gem/ 2019-05-28 12:45:29 +01:00
i915_gem_shmem.c drm/i915/gem: Defer obj->base.resv fini until RCU callback 2019-07-04 15:34:35 +01:00
i915_gem_shrinker.c drm/i915/gem: Free pages before rcu-freeing the object 2019-07-03 11:46:47 +01:00
i915_gem_stolen.c drm/i915/gem: Defer obj->base.resv fini until RCU callback 2019-07-04 15:34:35 +01:00
i915_gem_throttle.c drm/i915: Move GEM client throttling to its own file 2019-05-28 12:45:29 +01:00
i915_gem_tiling.c drm/i915: Move more GEM objects under gem/ 2019-05-28 12:45:29 +01:00
i915_gem_userptr.c drm/i915/gem: Free pages before rcu-freeing the object 2019-07-03 11:46:47 +01:00
i915_gem_wait.c drm/i915: Use drm_gem_object.resv 2019-06-18 15:30:32 +01:00
i915_gemfs.c drm/i915: Move more GEM objects under gem/ 2019-05-28 12:45:29 +01:00
i915_gemfs.h drm/i915: Move more GEM objects under gem/ 2019-05-28 12:45:29 +01:00
Makefile drm/i915: add header search path to subdir Makefiles 2019-06-27 10:25:48 +03:00
Makefile.header-test