1
0
Fork 0
alistair23-linux/drivers/gpu/drm/amd/amdgpu
Mario Kleiner 8e94a46c17 drm/amdgpu: Attach exclusive fence to prime exported bo's. (v5)
External clients which import our bo's wait only
for exclusive dmabuf-fences, not on shared ones,
ditto for bo's which we import from external
providers and write to.

Therefore attach exclusive fences on prime shared buffers
if our exported buffer gets imported by an external
client, or if we import a buffer from an external
exporter.

See discussion in thread:
https://lists.freedesktop.org/archives/dri-devel/2016-October/122370.html

Prime export tested on Intel iGPU + AMD Tonga dGPU as
DRI3/Present Prime render offload, and with the Tonga
standalone as primary gpu.

v2: Add a wait for all shared fences before prime export,
    as suggested by Christian Koenig.

v3: - Mark buffer prime_exported in amdgpu_gem_prime_pin,
    so we only use the exclusive fence when exporting a
    bo to external clients like a separate iGPU, but not
    when exporting/importing from/to ourselves as part of
    regular DRI3 fd passing.

    - Propagate failure of reservation_object_wait_rcu back
    to caller.

v4: - Switch to a prime_shared_count counter instead of a
      flag, which gets in/decremented on prime_pin/unpin, so
      we can switch back to shared fences if all clients
      detach from our exported bo.

    - Also switch to exclusive fence for prime imported bo's.

v5: - Drop lret, instead use int ret -> long ret, as proposed
      by Christian.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95472
Tested-by: Mike Lothian <mike@fireburn.co.uk> (v1)
Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>.
Cc: Christian König <christian.koenig@amd.com>
Cc: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
2016-11-11 10:20:04 -05:00
..
Kconfig drm/amdgpu: remove DRM_AMD_POWERPLAY 2016-10-04 11:15:59 -04:00
Makefile drm/amdgpu: remove DRM_AMD_POWERPLAY 2016-10-04 11:15:59 -04:00
ObjectID.h drm/amdgpu: Add virtual connector and encoder macros. 2016-08-08 13:44:11 -04:00
amdgpu.h drm/amdgpu: Attach exclusive fence to prime exported bo's. (v5) 2016-11-11 10:20:04 -05:00
amdgpu_acp.c drm/amdgpu: fix crash in acp_hw_fini 2016-11-07 12:40:52 -05:00
amdgpu_acp.h drm/amd: make a type-safe cgs_device struct. (v2) 2016-05-04 20:20:28 -04:00
amdgpu_acpi.c drm/amdgpu/atif: Send a hotplug event when we get dgpu display request 2016-09-22 10:30:36 -04:00
amdgpu_afmt.c
amdgpu_amdkfd.c drm/amdgpu: remove unused functions 2016-09-22 10:24:16 -04:00
amdgpu_amdkfd.h
amdgpu_amdkfd_gfx_v7.c drm/amdkfd: Fix possible infinite loop 2016-09-19 20:58:35 +03:00
amdgpu_amdkfd_gfx_v8.c drm/amdkfd: Fix possible infinite loop 2016-09-19 20:58:35 +03:00
amdgpu_atombios.c Linux 4.8-rc8 2016-09-28 12:08:49 +10:00
amdgpu_atombios.h drm/amdgpu: add si dpm support in amdgpu_atombios 2016-08-31 15:21:07 -04:00
amdgpu_atpx_handler.c Linux 4.8-rc8 2016-09-28 12:08:49 +10:00
amdgpu_benchmark.c drm/amdgpu: add direct submision option for copy_buffer 2016-08-22 13:47:18 -04:00
amdgpu_bios.c drivers/amdgpu: Use canonical form in branch predicates 2016-07-29 14:36:48 -04:00
amdgpu_bo_list.c drm/amdgpu: Attach exclusive fence to prime exported bo's. (v5) 2016-11-11 10:20:04 -05:00
amdgpu_cgs.c drm/amdgpu: add support for new smc firmware on iceland 2016-10-28 15:26:51 -04:00
amdgpu_connectors.c drm/amdgpu: make sure ddc_bus is valid in connector unregister 2016-10-31 12:27:52 -04:00
amdgpu_connectors.h
amdgpu_cs.c drm/amdgpu: avoid drm error log during S3 on RHEL7.3 2016-10-21 11:18:57 -04:00
amdgpu_ctx.c drm/amdgpu: initialize the context reset_counter in amdgpu_ctx_init 2016-10-12 15:44:14 -04:00
amdgpu_device.c drm/amdgpu: move atom scratch register save/restore to common code 2016-10-21 11:18:11 -04:00
amdgpu_display.c drm/amdgpu: rename all rbo variable to abo v2 2016-09-28 16:16:20 -04:00
amdgpu_dpm.c drm/amdgpu: change vblank_time's calculation method to reduce computational error. 2016-10-13 18:25:48 -04:00
amdgpu_dpm.h
amdgpu_drv.c drm/amdgpu: add some error handling to amdgpu_init v2 2016-10-31 12:44:58 -04:00
amdgpu_drv.h
amdgpu_encoders.c
amdgpu_fb.c Merge branch 'drm-next-4.9' of git://people.freedesktop.org/~agd5f/linux into drm-next 2016-09-30 13:21:02 +10:00
amdgpu_fence.c drm/amdgpu: fix fence slab teardown 2016-10-24 17:01:22 -04:00
amdgpu_gart.c Merge branch 'drm-next-4.9' of git://people.freedesktop.org/~agd5f/linux into drm-next 2016-09-30 13:21:02 +10:00
amdgpu_gds.h amdgpu: move ttm stuff to amdgpu_ttm.h 2016-08-19 12:30:58 -04:00
amdgpu_gem.c drm/amdgpu: rename all rbo variable to abo v2 2016-09-28 16:16:20 -04:00
amdgpu_gfx.c drm/amdgpu: add disable_cu parameter 2016-07-07 14:54:44 -04:00
amdgpu_gfx.h drm/amdgpu: add disable_cu parameter 2016-07-07 14:54:44 -04:00
amdgpu_gtt_mgr.c drm/amdgpu: fix gtt_mgr bo's offset 2016-09-28 16:16:23 -04:00
amdgpu_i2c.c drm/amdgpu: warn if dp aux is still attached on free 2016-10-06 12:39:03 -04:00
amdgpu_i2c.h drm/amdgpu/i2c: add const where appropriate 2016-09-27 13:00:52 -04:00
amdgpu_ib.c Linux 4.8-rc8 2016-09-28 12:08:49 +10:00
amdgpu_ih.c drm/amdgpu: free the BO in kernel by helper amdgpu_bo_free_kernel() 2016-09-14 15:10:27 -04:00
amdgpu_ih.h
amdgpu_ioc32.c
amdgpu_irq.c drm/amdgpu: cancel reset work on fini 2016-10-24 16:59:55 -04:00
amdgpu_irq.h drm/amdgpu: implement vi ih check/pre/post_soft_reset 2016-08-08 11:32:10 -04:00
amdgpu_job.c drm/amdgpu: mark symbols static where possible 2016-09-14 15:10:37 -04:00
amdgpu_kms.c drm/amdgpu: disable runtime pm in certain cases 2016-10-31 11:49:58 -04:00
amdgpu_mn.c drm/amdgpu: make amdgpu_mn_get wait for mmap_sem killable 2016-05-23 17:04:14 -07:00
amdgpu_mode.h drm/amdgpu: Provide page_flip_target hook 2016-08-10 14:28:06 -04:00
amdgpu_object.c drm/drivers: add support for using the arch wc mapping API. 2016-10-26 16:48:01 +10:00
amdgpu_object.h drm/amdgpu: add AMDGPU_BO_INVALID_OFFSET 2016-09-14 15:10:44 -04:00
amdgpu_pll.c drm/amdgpu: add missing header dependencies 2016-09-14 15:10:37 -04:00
amdgpu_pll.h
amdgpu_pm.c drm/amd/powerplay: Replace per-asic print_performance with generic 2016-09-22 10:24:16 -04:00
amdgpu_pm.h
amdgpu_powerplay.c drm/amdgpu: remove DRM_AMD_POWERPLAY 2016-10-04 11:15:59 -04:00
amdgpu_powerplay.h
amdgpu_prime.c drm/amdgpu: Attach exclusive fence to prime exported bo's. (v5) 2016-11-11 10:20:04 -05:00
amdgpu_ring.c drm/amdgpu: potential NULL dereference in debugfs code 2016-10-13 18:25:50 -04:00
amdgpu_sa.c Linux 4.7-rc5 2016-07-02 15:56:01 +10:00
amdgpu_sync.c drm/amdgpu: use a fence array for VMID management 2016-07-07 14:51:23 -04:00
amdgpu_test.c drm/amdgpu: add direct submision option for copy_buffer 2016-08-22 13:47:18 -04:00
amdgpu_trace.h drm/amdgpu: improve VM PTE trace points 2016-09-28 16:16:26 -04:00
amdgpu_trace_points.c
amdgpu_ttm.c mm: replace get_user_pages() write/force parameters with gup_flags 2016-10-19 08:11:43 -07:00
amdgpu_ttm.h drm/amdgpu: add a custom GTT memory manager v2 2016-09-28 16:16:19 -04:00
amdgpu_ucode.c drm/amdgpu: clean up to set fw_offset as 0 twice 2016-10-04 11:16:00 -04:00
amdgpu_ucode.h
amdgpu_uvd.c Merge branch 'drm-next-4.9' of git://people.freedesktop.org/~agd5f/linux into drm-next 2016-09-30 13:21:02 +10:00
amdgpu_uvd.h drm/amdgpu: add a fence timeout for the IB tests v2 2016-07-29 14:37:04 -04:00
amdgpu_vce.c drm/amdgpu/vce: add support for hw config packet (v2) 2016-10-04 11:16:00 -04:00
amdgpu_vce.h drm/amdgpu/vce: add common ring callbacks for ib and dma frame size 2016-09-16 15:53:01 -04:00
amdgpu_virt.h drm/amdgpu:cleanup virt related define 2016-09-22 10:24:20 -04:00
amdgpu_vm.c drm/amdgpu: fix a vm_flush fence leak 2016-10-24 17:00:51 -04:00
atom.c
atom.h drm/amd: cleanup remaining spaces and tabs v2 2016-05-11 12:31:20 -04:00
atombios_crtc.c drm/amdgpu: atombios change for dce6 to work v3 2016-08-31 12:10:20 -04:00
atombios_crtc.h drm/amdgpu/atom: add SetDCEClock helper 2016-05-04 20:23:53 -04:00
atombios_dp.c drm/amdgpu: Don't retry 7 times in amdgpu_atombios_dp_get_dpcd() 2016-08-08 13:28:39 -04:00
atombios_dp.h
atombios_encoders.c drm/amdgpu: support backlight control for UNIPHY3 2016-07-14 16:46:06 -04:00
atombios_encoders.h
atombios_i2c.c drm/amdgpu: add missing header dependencies 2016-09-14 15:10:37 -04:00
atombios_i2c.h drm/amdgpu: fix power distribution issue for Polaris10 XT 2016-07-14 16:39:35 -04:00
ci_dpm.c drm/amdgpu: fix s3 resume back, uvd dpm randomly can't disable. 2016-10-26 15:39:32 -04:00
ci_dpm.h drm/amdgpu: add the CI code to enable sclk OD(OverDrive) 2016-07-07 14:50:49 -04:00
ci_smc.c
cik.c drm/amdgpu:changes of virtualization cases probe (v3) 2016-09-19 14:45:52 -04:00
cik.h
cik_dpm.h
cik_ih.c drm/amd/amdgpu : Remove unused variable 2016-05-18 09:21:52 -04:00
cik_ih.h
cik_sdma.c Linux 4.8-rc8 2016-09-28 12:08:49 +10:00
cik_sdma.h
cikd.h drm/amdgpu: implement raster configuration for gfx v7 2016-09-19 14:38:25 -04:00
clearstate_ci.h
clearstate_defs.h
clearstate_vi.h
cz_dpm.c drm/amdgpu/dpm: implement thermal sensor for CZ/ST 2016-10-14 11:52:29 -04:00
cz_dpm.h
cz_ih.c drm/amd/amdgpu : Remove unused variable 2016-05-18 09:22:12 -04:00
cz_ih.h
cz_smc.c drm/amdgpu: remove unused functions 2016-09-22 10:24:16 -04:00
cz_smumgr.h drm/amd: cleanup remaining spaces and tabs v2 2016-05-11 12:31:20 -04:00
dce_v6_0.c drm/amdgpu: move atom scratch register save/restore to common code 2016-10-21 11:18:11 -04:00
dce_v6_0.h drm/amdgpu: add display controller implementation for si v10 2016-08-31 12:10:19 -04:00
dce_v8_0.c drm/amdgpu: move atom scratch register save/restore to common code 2016-10-21 11:18:11 -04:00
dce_v8_0.h drm/amdgpu: Disable VGA render and crtc when init GMC. 2016-08-08 14:04:37 -04:00
dce_v10_0.c drm/amdgpu: move atom scratch register save/restore to common code 2016-10-21 11:18:11 -04:00
dce_v10_0.h drm/amdgpu: Disable VGA render and crtc when init GMC. 2016-08-08 14:04:37 -04:00
dce_v11_0.c drm/amdgpu: move atom scratch register save/restore to common code 2016-10-21 11:18:11 -04:00
dce_v11_0.h drm/amdgpu: Disable VGA render and crtc when init GMC. 2016-08-08 14:04:37 -04:00
dce_virtual.c drm/amdgpu/virtual_dce: adjust config ifdef 2016-10-04 11:16:01 -04:00
dce_virtual.h drm/amdgpu: Use software timer to generate vsync interrupt. 2016-08-08 14:07:18 -04:00
gfx_v6_0.c drm/amdgpu: implement raster configuration for gfx v6 2016-09-19 14:38:24 -04:00
gfx_v6_0.h drm/amdgpu: add graphic pipeline implementation for si v8 2016-08-31 12:10:50 -04:00
gfx_v7_0.c Linux 4.8-rc8 2016-09-28 12:08:49 +10:00
gfx_v7_0.h drm/amdgpu/gfx7: make gfx_v7_0_rlc_stop static 2016-07-07 15:01:58 -04:00
gfx_v8_0.c drm/amdgpu/st: move ATC CG golden init from gfx to mc 2016-10-21 11:18:37 -04:00
gfx_v8_0.h drm/amdgpu/gfx8: remove stale function declaration 2016-08-08 11:32:58 -04:00
gmc_v6_0.c drm/amd/amdgpu: Convert messages in gmc v6 to dev_*() 2016-09-14 09:43:40 -04:00
gmc_v6_0.h drm/amdgpu: add graphic memory controller implementation for si v7 2016-08-31 12:10:18 -04:00
gmc_v7_0.c drm/amdgpu/gmc7: remove dead code (v2) 2016-08-23 13:48:04 -04:00
gmc_v7_0.h drm/amdgpu: drop wait_for_mc_idle asic callback 2016-07-07 14:54:50 -04:00
gmc_v8_0.c drm/amdgpu/st: move ATC CG golden init from gfx to mc 2016-10-21 11:18:37 -04:00
gmc_v8_0.h drm/amdgpu: drop wait_for_mc_idle asic callback 2016-07-07 14:54:50 -04:00
iceland_ih.c drm/amd/amdgpu : Remove unused variable 2016-05-18 09:22:17 -04:00
iceland_ih.h
iceland_sdma_pkt_open.h
kv_dpm.c drm/amdgpu/dpm: flush any thermal work on fini 2016-10-24 17:00:10 -04:00
kv_dpm.h
kv_smc.c
ppsmc.h drm/amdgpu: add new definitions into ppsmc.h for iceland 2016-07-15 12:33:31 -04:00
r600_dpm.h drm/amdgpu: add SI DPM support (v4) 2016-08-31 15:21:09 -04:00
sdma_v2_4.c Linux 4.8-rc8 2016-09-28 12:08:49 +10:00
sdma_v2_4.h
sdma_v3_0.c drm/amdgpu: fix amdgpu_need_full_reset (v2) 2016-10-14 11:51:04 -04:00
sdma_v3_0.h
si.c drm/amdgpu:changes of virtualization cases probe (v3) 2016-09-19 14:45:52 -04:00
si.h drm/amdgpu: add si implementation v10 2016-08-31 12:11:19 -04:00
si_dma.c drm/amdgpu/si_dma: add ring callbacks for ib and dma frame size 2016-09-16 15:52:57 -04:00
si_dma.h drm/amdgpu: add DMA implementation for si v8 2016-08-31 12:10:51 -04:00
si_dpm.c drm/amdgpu/si_dpm: workaround for SI kickers 2016-10-27 13:59:24 -04:00
si_dpm.h drm/amdgpu: add SI DPM support (v4) 2016-08-31 15:21:09 -04:00
si_ih.c drm/amd/amdgpu: Tidy up SI IH code 2016-09-12 18:12:22 -04:00
si_ih.h drm/amdgpu: add interupt handler implementation for si v3 2016-08-31 12:10:19 -04:00
si_smc.c drm/amdgpu/si/dpm: fix symbol conflicts with radeon 2016-09-14 15:10:40 -04:00
sislands_smc.h drm/amdgpu/si/dpm: fix phase shedding setup 2016-09-28 16:13:17 -04:00
smu_ucode_xfer_vi.h drm/amd/powerplay: Add smc_sk firmware to baffin & ellesmere. 2016-05-04 20:26:26 -04:00
tonga_ih.c drm/amdgpu: fix amdgpu_need_full_reset (v2) 2016-10-14 11:51:04 -04:00
tonga_ih.h
tonga_sdma_pkt_open.h
uvd_v4_2.c drm/amdgpu/uvd4.2: add ring callbacks for ib and dma frame size 2016-09-16 15:53:00 -04:00
uvd_v4_2.h
uvd_v5_0.c drm/amdgpu/uvd5: add ring callbacks for ib and dma frame size 2016-09-16 15:53:00 -04:00
uvd_v5_0.h
uvd_v6_0.c drm/amdgpu: fix amdgpu_need_full_reset (v2) 2016-10-14 11:51:04 -04:00
uvd_v6_0.h
vce_v2_0.c drm/amdgpu/vce2: add ring callbacks for ib and dma frame size 2016-09-16 15:53:02 -04:00
vce_v2_0.h
vce_v3_0.c drm/amdgpu/vce3: only enable 3 rings on new enough firmware (v2) 2016-10-25 13:57:11 -04:00
vce_v3_0.h
vi.c drm/amdgpu: add support for new smc firmware on iceland 2016-10-28 15:26:51 -04:00
vi.h
vi_dpm.h
vid.h drm/amdgpu: implement raster configuration for gfx v8 2016-09-19 14:38:25 -04:00