linux_dsm_epyc7002/drivers/gpu/drm
Chris Wilson 5a198b8c53 drm/i915: Do not overwrite the request with zero on reallocation
When using RCU lookup for the request, commit 0eafec6d32 ("drm/i915:
Enable lockless lookup of request tracking via RCU"), we acknowledge that
we may race with another thread that could have reallocated the request.
In order for the first thread not to blow up, the second thread must not
clear the request completed before overwriting it. In the RCU lookup, we
allow for the engine/seqno to be replaced but we do not allow for it to
be zeroed.

The choice we make is to either add extra checking to the RCU lookup, or
embrace the inherent races (as intended). It is more complicated as we
need to manually clear everything we depend upon being zero initialised,
but we benefit from not emiting the memset() to clear the entire
frequently allocated structure (that memset turns up in throughput
profiles). And at the same time, the lookup remains flexible for future
adjustments.

v2: Old style LRC requires another variable to be initialize. (The
danger inherent in not zeroing everything.)
v3: request->batch also needs to be cleared
v4: signaling.tsk is no long used unset, but pid still exists

Fixes: 0eafec6d32 ("drm/i915: Enable lockless lookup of request...")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: "Goel, Akash" <akash.goel@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1470731014-6894-2-git-send-email-chris@chris-wilson.co.uk
2016-08-09 10:17:27 +01:00
..
amd drm/amd/powerplay: remove enable_clock_power_gatings_tasks from initialize and resume events 2016-07-29 14:37:13 -04:00
arc drm/arc: Remove redundant dev_err call in arcpgu_load() 2016-07-19 15:33:50 -04:00
arm drm/arm: mali-dp: Fix error return code in malidp_bind() 2016-07-28 12:59:56 +02:00
armada drm/armada: make fbdev support really optional 2016-07-18 09:11:33 +02:00
ast Merge remote-tracking branch 'airlied/drm-next' into topic/drm-misc 2016-07-19 09:27:29 +02:00
atmel-hlcdc Merge remote-tracking branch 'airlied/drm-next' into topic/drm-misc 2016-07-19 09:27:29 +02:00
bochs Merge remote-tracking branch 'airlied/drm-next' into topic/drm-misc 2016-07-19 09:27:29 +02:00
bridge Merge tag 'topic/drm-misc-2016-07-28' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-30 05:26:07 +10:00
cirrus Merge remote-tracking branch 'airlied/drm-next' into topic/drm-misc 2016-07-19 09:27:29 +02:00
etnaviv drm/etnaviv: Optimize error handling in etnaviv_gem_new_userptr() 2016-07-22 13:51:49 -04:00
exynos GPU-DRM-Exynos: Delete an unnecessary check before the function call "vunmap" 2016-07-21 14:06:33 -04:00
fsl-dcu Merge tag 'topic/drm-misc-2016-07-22' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-27 10:33:08 +10:00
gma500 drm/gma500: remove unnecessary stub for fb_ioctl() 2016-07-28 10:04:03 +02:00
hisilicon drm/hisilicon: Fix ADE vblank on/off handling 2016-07-12 14:17:03 +02:00
i2c drm/i2c: adv7511: Move to bridge folder 2016-07-13 14:24:35 +05:30
i810
i915 drm/i915: Do not overwrite the request with zero on reallocation 2016-08-09 10:17:27 +01:00
imx imx-drm ldb mode set fix 2016-07-30 05:45:30 +10:00
mediatek Merge tag 'topic/drm-misc-2016-07-14' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-15 11:01:37 +10:00
mga
mgag200 drm/mgag200: Delete an unnecessary check before drm_gem_object_unreference_unlocked() 2016-07-22 11:23:39 -04:00
msm drm/msm: Delete an unnecessary check before drm_gem_object_unreference() 2016-07-16 10:29:35 -04:00
nouveau Merge tag 'topic/drm-misc-2016-07-22' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-27 10:33:08 +10:00
omapdrm GPU-DRM-OMAP: Delete unnecessary checks before two function calls 2016-07-22 10:27:59 +02:00
panel drm/panel: simple: Add support for Starry KR122EA0SRA panel 2016-07-11 14:30:43 +02:00
qxl drm/qxl: Delete an unnecessary check before drm_gem_object_unreference_unlocked() 2016-07-22 11:23:39 -04:00
r128
radeon drm/radeon: Remove deprecated create_singlethread_workqueue 2016-07-29 14:36:55 -04:00
rcar-du Merge tag 'topic/drm-misc-2016-07-22' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-27 10:33:08 +10:00
rockchip Merge tag 'topic/drm-misc-2016-07-22' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-27 10:33:08 +10:00
savage
shmobile drm/shmobile: make fbdev support really optional 2016-07-18 09:11:37 +02:00
sis
sti drm/sti: use new Reset API 2016-07-26 10:25:00 -04:00
sun4i Merge tag 'topic/drm-misc-2016-07-22' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-27 10:33:08 +10:00
tdfx
tegra Merge remote-tracking branch 'airlied/drm-next' into topic/drm-misc 2016-07-19 09:27:29 +02:00
tilcdc drm/tilcdc: make fbdev support really optional 2016-07-18 09:11:38 +02:00
ttm drm/ttm: partial revert "cleanup ttm_tt_(unbind|destroy)" v3 2016-07-29 14:37:04 -04:00
udl drm/udl: make fbdev support really optional 2016-07-18 09:11:40 +02:00
vc4 Merge remote-tracking branch 'airlied/drm-next' into topic/drm-misc 2016-07-19 09:27:29 +02:00
vgem drm/vgem: Fix non static symbol warning 2016-07-19 15:01:52 +02:00
via
virtio drm/virtio: Fix non static symbol warning 2016-07-19 15:44:10 -04:00
vmwgfx Merge tag 'topic/drm-misc-2016-07-28' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-07-30 05:26:07 +10:00
ati_pcigart.c
drm_agpsupport.c
drm_atomic_helper.c
drm_atomic.c drm/atomic: Delete an unnecessary check before drm_property_unreference_blob() 2016-07-20 13:23:39 -04:00
drm_auth.c drm: document drm_auth.c 2016-06-21 22:10:55 +02:00
drm_bridge.c
drm_bufs.c
drm_cache.c drm: Restore double clflush on the last partial cacheline 2016-07-12 15:57:13 +02:00
drm_context.c
drm_crtc_helper.c Linux 4.7-rc5 2016-07-02 15:56:01 +10:00
drm_crtc_internal.h Revert "drm: Resurrect atomic rmfb code" 2016-07-14 15:18:15 +02:00
drm_crtc.c drm: drm_connector->s/connector_id/index/ for consistency 2016-07-19 21:51:17 +02:00
drm_debugfs.c
drm_dma.c
drm_dp_aux_dev.c drm_aux-dev: fix error handling in drm_dp_aux_dev_init() 2016-07-12 14:10:57 +02:00
drm_dp_dual_mode_helper.c
drm_dp_helper.c drm: aux ->transfer() can return 0, deal with it 2016-07-29 14:13:03 +10:00
drm_dp_mst_topology.c drm/dp-mst: Missing kernel doc 2016-07-19 10:31:53 +02:00
drm_drv.c drm: Do a full device unregister when unplugging 2016-07-12 13:01:49 +02:00
drm_edid_load.c
drm_edid.c
drm_encoder_slave.c
drm_fb_cma_helper.c Merge branch 'for-next' of http://git.agner.ch/git/linux-drm-fsl-dcu into drm-next 2016-07-02 16:21:35 +10:00
drm_fb_helper.c drm/fb-helper: Reduce READ_ONCE(master) to lockless_dereference 2016-06-22 10:07:28 +02:00
drm_flip_work.c
drm_fops.c drm: Clean up drm_crtc.h 2016-06-21 21:43:28 +02:00
drm_fourcc.c
drm_gem_cma_helper.c
drm_gem.c
drm_global.c
drm_hashtab.c
drm_info.c drm: Extract drm_is_current_master 2016-06-21 21:58:12 +02:00
drm_internal.h drm: Nuke SET_UNIQUE ioctl 2016-06-21 21:43:46 +02:00
drm_ioc32.c
drm_ioctl.c drm: Don't overwrite user ioctl arg unless requested 2016-07-14 10:12:50 +02:00
drm_irq.c drm: Extract&Document drm_irq.h 2016-07-19 10:29:47 +02:00
drm_kms_helper_common.c
drm_legacy.h
drm_lock.c drm: Extract drm_is_current_master 2016-06-21 21:58:12 +02:00
drm_memory.c drm: Fix broken use of _PAGE_NO_CACHE on powerpc 2016-07-12 13:20:39 +02:00
drm_mipi_dsi.c drm/dsi: Make set_tear_scanline command consistent 2016-07-12 13:19:26 +02:00
drm_mm.c
drm_modes.c
drm_modeset_lock.c
drm_of.c
drm_panel.c
drm_pci.c drm: Nuke SET_UNIQUE ioctl 2016-06-21 21:43:46 +02:00
drm_plane_helper.c
drm_platform.c drm: Lobotomize set_busid nonsense for !pci drivers 2016-06-21 21:56:23 +02:00
drm_prime.c
drm_probe_helper.c
drm_rect.c
drm_scatter.c drm: Fix broken use of _PAGE_NO_CACHE on powerpc 2016-07-12 13:20:39 +02:00
drm_simple_kms_helper.c
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vm.c drm: Fix broken use of _PAGE_NO_CACHE on powerpc 2016-07-12 13:20:39 +02:00
drm_vma_manager.c
Kconfig
Makefile