mirror_ubuntu-kernels/drivers/gpu/drm
Thomas Hellström 068396bb21 drm/i915/ttm: Rework object initialization slightly
We may end up in i915_ttm_bo_destroy() in an error path before the
object is fully initialized. In that case it's not correct to call
__i915_gem_free_object(), because that function
a) Assumes the gem object refcount is 0, which it isn't.
b) frees the placements which are owned by the caller until the
init_object() region ops returns successfully. Fix this by providing
a lightweight cleanup function __i915_gem_object_fini() which is also
called by __i915_gem_free_object().

While doing this, also make sure we call dma_resv_fini() as part of
ordinary object destruction and not from the RCU callback that frees
the object. This will help track down bugs where the object is incorrectly
locked from an RCU lookup.

Finally, make sure the object isn't put on the region list until it's
either locked or fully initialized in order to block list processing of
partially initialized objects.

v2:
- The TTM object backend memory was freed before the gem pages were
  put. Separate this functionality into __i915_gem_object_pages_fini()
  and call it from the TTM delete_mem_notify() callback.
v3:
- Include i915_gem_object_free_mmaps() in __i915_gem_object_pages_fini()
  to make sure we don't inadvertedly introduce a race.

Fixes: 48b0961269 ("drm/i915: Move __i915_gem_free_object to ttm_bo_destroy")
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com> #v1
Link: https://patchwork.freedesktop.org/patch/msgid/20210930113236.583531-1-thomas.hellstrom@linux.intel.com
2021-10-01 13:11:58 +02:00
..
amd drm fixes for 5.15-rc1 2021-09-10 11:22:23 -07:00
arm drm/arm/hdlcd: Convert to Linux IRQ interfaces 2021-08-10 20:00:51 +02:00
armada drm/aperture: Pass DRM driver structure instead of driver name 2021-07-01 11:11:55 +02:00
aspeed drm/tiny: drm_gem_simple_display_pipe_prepare_fb is the default 2021-06-24 15:40:11 +02:00
ast drm/ast: Use offset-adjusted shadow-plane mappings 2021-08-08 20:27:06 +02:00
atmel-hlcdc drm/atmel-hlcdc: Convert to Linux IRQ interfaces 2021-08-10 20:00:58 +02:00
bridge drm/bridge: ti-sn65dsi86: Avoid creating multiple connectors 2021-08-12 09:56:09 -07:00
etnaviv Merge commit '81fd23e2b3ccf71c807e671444e8accaba98ca53' of https://git.pengutronix.de/git/lst/linux into drm-next 2021-08-26 12:47:05 +10:00
exynos drm/exynos: Always initialize mapping in exynos_drm_register_dma() 2021-08-22 01:56:39 +09:00
fsl-dcu drm/fsl-dcu: Convert to Linux IRQ interfaces 2021-08-10 20:13:25 +02:00
gma500 drm/gma500: Convert to Linux IRQ interfaces 2021-08-10 20:13:32 +02:00
gud drm/gud: Get offset-adjusted mapping from drm_gem_fb_vmap() 2021-08-08 20:27:24 +02:00
hisilicon drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
hyperv drm/hyperv: Use offset-adjusted shadow-plane mappings 2021-08-08 20:27:27 +02:00
i2c
i810 drm: IRQ midlayer is now legacy 2021-08-10 20:14:01 +02:00
i915 drm/i915/ttm: Rework object initialization slightly 2021-10-01 13:11:58 +02:00
imx drm for v5.15-rc1 2021-09-01 11:26:46 -07:00
ingenic drm/ingenic: Use standard drm_atomic_helper_commit_tail 2021-08-11 15:49:15 +02:00
kmb drm for v5.15-rc1 2021-09-01 11:26:46 -07:00
lib
lima drm-misc-next for v5.15: 2021-07-21 11:58:28 +10:00
mcde drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
mediatek drm for v5.15-rc1 2021-09-01 11:26:46 -07:00
meson drm for v5.15-rc1 2021-09-01 11:26:46 -07:00
mga drm: IRQ midlayer is now legacy 2021-08-10 20:14:01 +02:00
mgag200 drm/mgag200: Fix uninitialized variable delta 2021-08-18 20:47:59 +02:00
msm Kbuild updates for v5.15 2021-09-03 15:33:47 -07:00
mxsfb drm/mxsfb: Convert to Linux IRQ interfaces 2021-08-10 20:13:45 +02:00
nouveau Merge branch 'stable/for-linus-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/swiotlb 2021-09-03 10:34:44 -07:00
omapdrm drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
panel drm for v5.15-rc1 2021-09-01 11:26:46 -07:00
panfrost drm/panfrost: Clamp lock region to Bifrost minimum 2021-08-25 15:40:19 +01:00
pl111 drm/pl111: Remove unused including <linux/version.h> 2021-07-31 20:52:01 +02:00
qxl drm-misc-next for v5.15: 2021-07-21 11:58:28 +10:00
r128 drm: IRQ midlayer is now legacy 2021-08-10 20:14:01 +02:00
radeon Merge tag 'amd-drm-next-5.15-2021-08-27' of https://gitlab.freedesktop.org/agd5f/linux into drm-next 2021-08-30 09:06:03 +10:00
rcar-du drm: rcar-du: lvds: Use dev_err_probe() 2021-07-28 16:33:32 +03:00
rockchip drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
savage drm/savage: Remove references to struct drm_device.pdev 2021-05-03 19:48:30 +02:00
scheduler drm/sched: Allow using a dedicated workqueue for the timeout/fault tdr 2021-07-01 08:53:25 +02:00
selftests drm: Fix oops in damage self-tests by mocking damage property 2021-08-02 11:15:11 +02:00
shmobile drm/shmobile: Convert to Linux IRQ interfaces 2021-07-25 11:01:12 +02:00
sis drm/sis: Remove references to struct drm_device.pdev 2021-05-03 19:48:33 +02:00
sti drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
stm drm/stm: dsi: compute the transition time from LP to HS and back 2021-07-19 15:35:55 +02:00
sun4i drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
tdfx
tegra drm/tegra: Changes for v5.15-rc1 2021-08-26 13:05:19 +10:00
tidss drm/tidss: Convert to Linux IRQ interfaces 2021-08-10 20:13:49 +02:00
tilcdc drm/tilcdc: Convert to Linux IRQ interfaces 2021-08-10 20:13:53 +02:00
tiny drm/simpledrm: Use offset-adjusted shadow-plane mapping 2021-08-08 20:27:40 +02:00
ttm Merge drm/drm-next into drm-intel-gt-next 2021-09-15 13:23:27 +03:00
tve200 drm/tiny: drm_gem_simple_display_pipe_prepare_fb is the default 2021-06-24 15:40:11 +02:00
udl drm/udl: Use offset-adjusted shadow-plane mapping 2021-08-08 20:27:44 +02:00
v3d drm/v3d: Expose performance counters to userspace 2021-07-21 00:19:59 +01:00
vboxvideo drm/vbox: Use offset-adjusted shadow-plane mappings 2021-08-08 20:27:49 +02:00
vc4 drm/vc4: hdmi: make vc4_hdmi_codec_pdata static 2021-08-18 09:37:17 +02:00
vgem Revert "drm/vgem: Implement mmap as GEM object function" 2021-07-13 13:15:52 +02:00
via drm: IRQ midlayer is now legacy 2021-08-10 20:14:01 +02:00
virtio drm/virtio: set non-cross device blob uuid_state 2021-08-12 14:58:31 +02:00
vkms drm/vkms: Use offset-adjusted shadow-plane mappings and output 2021-08-08 20:27:52 +02:00
vmwgfx RDMA v5.15 merge window Pull Request 2021-09-02 14:47:21 -07:00
xen drm/tiny: drm_gem_simple_display_pipe_prepare_fb is the default 2021-06-24 15:40:11 +02:00
xlnx drm/xlnx/zynqmp_disp: Fix incorrectly named enum 'zynqmp_disp_layer_id' 2021-08-09 02:28:05 +03:00
zte drm/zte: Don't set struct drm_device.irq_enabled 2021-06-29 15:40:53 +02:00
drm_agpsupport.c drm: Include <asm/agp.h> iff CONFIG_AGP is set 2021-05-11 14:13:33 +02:00
drm_aperture.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_atomic_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_atomic_state_helper.c
drm_atomic_uapi.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_atomic.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_auth.c drm: add lockdep assert to drm_is_current_master_locked 2021-08-05 12:08:15 +02:00
drm_blend.c
drm_bridge_connector.c
drm_bridge.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_bufs.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_cache.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_client_modeset.c
drm_client.c
drm_color_mgmt.c
drm_connector.c drm: avoid circular locks in drm_mode_getconnector 2021-07-20 20:13:56 +02:00
drm_context.c drm: correct function name drm_legacy_ctxbitmap_flush() 2021-05-16 22:01:14 +02:00
drm_crtc_helper_internal.h
drm_crtc_helper.c
drm_crtc_internal.h Backmerge remote-tracking branch 'drm/drm-next' into drm-misc-next 2021-07-27 12:48:17 +02:00
drm_crtc.c
drm_damage_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_debugfs_crc.c drm/doc: document how userspace should find out CRTC index 2021-06-10 19:14:47 +02:00
drm_debugfs.c drm: avoid blocking in drm_clients_info's rcu section 2021-07-20 20:14:42 +02:00
drm_displayid.c
drm_dma.c
drm_dp_aux_bus.c Bus: Make remove callback return void tag 2021-08-11 08:47:08 +10:00
drm_dp_aux_dev.c drm/dp: Add backpointer to drm_device in drm_dp_aux 2021-04-27 18:43:42 -04:00
drm_dp_cec.c
drm_dp_dual_mode_helper.c drm/dp_dual_mode: Convert drm_dp_dual_mode_helper.c to using drm_err/drm_dbg_kms() 2021-04-27 18:43:45 -04:00
drm_dp_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_dp_mst_topology_internal.h
drm_dp_mst_topology.c drm/dp_mst: Fix return code on sideband message failure 2021-07-27 18:58:28 -04:00
drm_drv.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_dsc.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_encoder_slave.c
drm_encoder.c
drm_fb_cma_helper.c drm: Add and export function drm_fb_cma_sync_non_coherent 2021-05-25 11:42:09 +01:00
drm_fb_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_file.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_flip_work.c
drm_format_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_fourcc.c Merge tag 'amd-drm-next-5.14-2021-06-02' of https://gitlab.freedesktop.org/agd5f/linux into drm-next 2021-06-04 06:13:57 +10:00
drm_framebuffer.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_gem_atomic_helper.c drm/gem: Provide offset-adjusted framebuffer BO mappings 2021-08-08 20:26:16 +02:00
drm_gem_cma_helper.c drm: Fix misleading documentation of drm_gem_cma_create() 2021-06-01 17:27:20 +01:00
drm_gem_framebuffer_helper.c drm/gem: Provide offset-adjusted framebuffer BO mappings 2021-08-08 20:26:16 +02:00
drm_gem_shmem_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_gem_ttm_helper.c drm/ttm: rename bo->mem and make it a pointer 2021-06-02 11:07:25 +02:00
drm_gem_vram_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_gem.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_hashtab.c
drm_hdcp.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_internal.h drm: Mark IRQ_BUSID ioctl as legacy 2021-05-17 21:19:48 +02:00
drm_ioc32.c drm: Copy drm_wait_vblank to user before returning 2021-08-17 13:56:03 -04:00
drm_ioctl.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_irq.c drm: IRQ midlayer is now legacy 2021-08-10 20:14:01 +02:00
drm_kms_helper_common.c
drm_lease.c drm: clean up unused kerneldoc in drm_lease.c 2021-07-30 11:55:41 +02:00
drm_legacy_misc.c drm: IRQ midlayer is now legacy 2021-08-10 20:14:01 +02:00
drm_legacy.h drm: Mark IRQ_BUSID ioctl as legacy 2021-05-17 21:19:48 +02:00
drm_lock.c
drm_managed.c
drm_memory.c drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
drm_mipi_dbi.c drm/mipi-dbi: Use framebuffer dma-buf helpers 2021-07-23 20:17:59 +02:00
drm_mipi_dsi.c
drm_mm.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_mode_config.c
drm_mode_object.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_modes.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_modeset_helper.c
drm_modeset_lock.c kernel/locking: Add context to ww_mutex_trylock() 2021-09-17 15:08:41 +02:00
drm_of.c drm/of: free the iterator object on failure 2021-07-15 10:54:04 +01:00
drm_panel_orientation_quirks.c
drm_panel.c drm/dp: Move panel DP AUX backlight support to drm_dp_helper 2021-07-13 06:38:37 -07:00
drm_pci.c drm: Mark IRQ_BUSID ioctl as legacy 2021-05-17 21:19:48 +02:00
drm_plane_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_plane.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_prime.c RDMA v5.15 merge window Pull Request 2021-09-02 14:47:21 -07:00
drm_print.c isystem: ship and use stdarg.h 2021-08-19 09:02:55 +09:00
drm_probe_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_property.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_rect.c
drm_scatter.c
drm_scdc_helper.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_self_refresh_helper.c
drm_simple_kms_helper.c drm/simple-kms: Support custom CRTC state 2021-08-08 20:14:08 +02:00
drm_syncobj.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vblank_work.c
drm_vblank.c drm: IRQ midlayer is now legacy 2021-08-10 20:14:01 +02:00
drm_vm.c drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
drm_vma_manager.c drm: Fix typo in comments 2021-08-02 10:19:43 +02:00
drm_writeback.c
Kconfig drm: amdgpu: remove obsolete reference to config CHASH 2021-08-18 18:26:10 -04:00
Makefile drm/bochs: Move to tiny/ 2021-07-05 08:54:44 +02:00