linux/include/drm
Thomas Zimmermann b4b0193e83 drm/fbdev-generic: Fix locking with drm_client_buffer_vmap_local()
Temporarily lock the fbdev buffer object during updates to prevent
memory managers from evicting/moving the buffer. Moving a buffer
object while update its content results in undefined behaviour.

Fbdev-generic updates its buffer object from a shadow buffer. Gem-shmem
and gem-dma helpers do not move buffer objects, so they are safe to be
used with fbdev-generic. Gem-vram and qxl are based on TTM, but pin
buffer objects are part of the vmap operation. So both are also safe
to be used with fbdev-generic.

Amdgpu and nouveau do not pin or lock the buffer object during an
update. Their TTM-based memory management could move the buffer object
while the update is ongoing.

The new vmap_local and vunmap_local helpers hold the buffer object's
reservation lock during the buffer update. This prevents moving the
buffer object on all memory managers.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> # virtio-gpu
Acked-by: Zack Rusin <zack.rusin@broadcom.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240227113853.8464-11-tzimmermann@suse.de
2024-03-11 13:33:50 +01:00
..
bridge drm: bridge: samsung-dsim: make samsung-dsim.h self-contained 2024-03-07 17:17:25 +02:00
display Merge drm/drm-next into drm-misc-next 2024-03-08 10:53:46 +01:00
i2c drm/i2c: silence ch7006.h and sil164.h kernel-doc warnings 2024-03-11 14:29:19 +02:00
ttm drm/ttm: make ttm_pool.h self-contained 2024-03-11 11:47:06 +02:00
amd_asic_type.h drm/amdgpu: make amd_asic_type.h self-contained 2024-03-07 17:17:25 +02:00
drm_accel.h
drm_aperture.h
drm_atomic.h drm/atomic: Make the drm_atomic_state documentation less ambiguous 2023-12-18 11:45:34 +01:00
drm_atomic_helper.h drm-misc-next for $kernel-version: 2023-12-19 17:07:32 +10:00
drm_atomic_state_helper.h
drm_atomic_uapi.h
drm_audio_component.h
drm_auth.h
drm_blend.h
drm_bridge.h drm: Spelling s/hardward/hardware/g 2024-02-15 17:01:31 +01:00
drm_bridge_connector.h
drm_buddy.h
drm_cache.h
drm_client.h drm/fbdev-generic: Fix locking with drm_client_buffer_vmap_local() 2024-03-11 13:33:50 +01:00
drm_color_mgmt.h drm: using mul_u32_u32() requires linux/math64.h 2023-12-19 15:29:17 +02:00
drm_connector.h
drm_crtc.h
drm_crtc_helper.h
drm_damage_helper.h
drm_debugfs.h
drm_debugfs_crc.h drm/crc: make drm_debugfs_crc.h self-contained and fix kernel-doc 2024-03-07 17:17:25 +02:00
drm_device.h
drm_displayid.h
drm_drv.h
drm_edid.h drm: Move drm_set_preferred_mode() helper from drm_edid to drm_modes 2024-01-05 21:14:46 +01:00
drm_eld.h
drm_encoder.h
drm_encoder_slave.h drm/encoder: improve drm_encoder_slave.h kernel-doc 2024-03-11 11:47:06 +02:00
drm_exec.h Merge drm/drm-next into drm-misc-next 2024-01-29 14:20:23 +01:00
drm_fb_dma_helper.h
drm_fb_helper.h
drm_fbdev_dma.h
drm_fbdev_generic.h
drm_file.h
drm_fixed.h drm: Don't treat 0 as -1 in drm_fixp2int_ceil 2024-01-02 11:57:44 -01:00
drm_flip_work.h
drm_format_helper.h drm: fix drm_format_helper.h kernel-doc warnings 2024-03-07 17:17:25 +02:00
drm_fourcc.h
drm_framebuffer.h
drm_gem.h drm/fbdev-generic: Fix locking with drm_client_buffer_vmap_local() 2024-03-11 13:33:50 +01:00
drm_gem_atomic_helper.h
drm_gem_dma_helper.h
drm_gem_framebuffer_helper.h
drm_gem_shmem_helper.h drm/gem: Acquire reservation lock in drm_gem_{pin/unpin}() 2024-03-11 13:33:50 +01:00
drm_gem_ttm_helper.h
drm_gem_vram_helper.h drm: fix drm_gem_vram_helper.h kernel-doc 2024-03-07 17:17:25 +02:00
drm_gpuvm.h Merge drm/drm-next into drm-misc-next 2024-01-29 14:20:23 +01:00
drm_ioctl.h
drm_kunit_helpers.h drm/kunit: fix drm_kunit_helpers.h kernel-doc 2024-03-07 17:17:25 +02:00
drm_lease.h drm/lease: make drm_lease.h self-contained 2024-03-07 17:17:25 +02:00
drm_managed.h drm/managed: Add drmm_release_action 2024-01-17 10:38:39 +01:00
drm_mipi_dbi.h
drm_mipi_dsi.h drm/mipi-dsi: Fix detach call without attach 2023-12-07 09:22:47 +02:00
drm_mm.h
drm_mode_config.h
drm_mode_object.h drm/drm_mode_object: increase max objects to accommodate new color props 2023-12-13 15:09:53 -05:00
drm_modes.h drm: Move drm_set_preferred_mode() helper from drm_edid to drm_modes 2024-01-05 21:14:46 +01:00
drm_modeset_helper.h
drm_modeset_helper_vtables.h drm/drm_modeset_helper_vtables.h: fix typos/spellos 2023-12-13 16:19:01 +01:00
drm_modeset_lock.h
drm_module.h
drm_of.h drm/of: make drm_of.h self-contained 2024-03-07 17:17:25 +02:00
drm_panel.h
drm_pciids.h
drm_plane.h drm/drm_plane: track color mgmt changes per plane 2023-12-13 15:09:53 -05:00
drm_plane_helper.h
drm_prime.h
drm_print.h drm-misc-next for v6.9: 2024-02-16 13:16:40 +10:00
drm_privacy_screen_consumer.h
drm_privacy_screen_driver.h
drm_privacy_screen_machine.h
drm_probe_helper.h drm/probe-helper: remove unused drm_connector_helper_get_modes_from_ddc() 2024-01-08 12:37:52 +02:00
drm_property.h drm/drm_property: make replace_property_blob_from_id a DRM helper 2023-12-13 15:09:53 -05:00
drm_rect.h drm/rect: fix kernel-doc typos 2024-02-05 11:02:07 +01:00
drm_self_refresh_helper.h
drm_simple_kms_helper.h
drm_suballoc.h drm/suballoc: fix drm_suballoc.h kernel-doc 2024-03-07 17:17:25 +02:00
drm_syncobj.h
drm_sysfs.h
drm_util.h
drm_utils.h
drm_vblank.h
drm_vblank_work.h
drm_vma_manager.h
drm_writeback.h
gma_drm.h
gpu_scheduler.h
gud.h
i915_component.h
i915_drm.h
i915_gsc_proxy_mei_interface.h drm/i915: fix i915_gsc_proxy_mei_interface.h kernel-doc 2024-03-11 11:47:06 +02:00
i915_hdcp_interface.h drm/i915/hdcp: fix i915_hdcp_interface.h kernel-doc warnings 2024-03-11 11:47:06 +02:00
i915_pciids.h drm/i915: Update ADL-N PCI IDs 2024-02-14 13:01:27 -08:00
i915_pxp_tee_interface.h drm/i915/pxp: fix i915_pxp_tee_interface.h kernel-doc warnings 2024-03-11 11:47:06 +02:00
intel-gtt.h
intel_lpe_audio.h
spsc_queue.h
task_barrier.h
xe_pciids.h drm/xe: Sync MTL PCI IDs with i915 2023-12-21 11:45:01 -05:00