mirror-linux/include/drm
Boris Brezillon 379e8f1ca5 drm/gem: Make the GEM LRU lock part of drm_device
Recently, a few races have been discovered in the GEM LRU logic, all
of them caused by the fact the LRU lock is accessed through
gem->lru->lock, and that very same lock also protects changes to
gem->lru, leading to situations where gem->lru needs to first be
accessed without the lock held, to then get the lru to access the lock
through and finally take the lock and do the expected operation.

Currently, the only driver making use of this API (MSM) declares a
device-wide lock, and the user we're about to add (panthor) will
do the same. There's no evidence that we will ever have a driver
that wants different pools of LRUs protected by different locks under
the same drm_device. So we're better off moving this lock to drm_device
and always locking it through obj->dev->gem_lru_mutex, or directly
through dev->gem_lru_mutex.

If anyone ever needs more fine-grained locking, this can be revisited
to pass some drm_gem_lru_pool object representing the pool of LRUs
under a specific lock, but for now, the per-device lock seems to be
enough.

Fixes: e7c2af13f8 ("drm/gem: Add LRU/shrinker helper")
Reported-by: Chia-I Wu <olvaffe@gmail.com>
Closes: https://gitlab.freedesktop.org/panfrost/linux/-/work_items/86
Reviewed-by: Rob Clark <rob.clark@oss.qualcomm.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Link: https://patch.msgid.link/20260518-panthor-shrinker-fixes-v4-1-1920234470d5@collabora.com
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
2026-05-18 15:16:47 +02:00
..
amd drm/amd/amdgpu: Add helper functions for isp buffers 2025-07-16 16:17:35 -04:00
bridge drm/display: hdmi: Use drm_output_color_format instead of hdmi_colorspace 2026-03-24 13:54:35 +01:00
clients
display drm/display: hdmi: Use drm_output_color_format instead of hdmi_colorspace 2026-03-24 13:54:35 +01:00
intel Char/Misc/IIO/and others driver updates for 7.1-rc1 2026-04-24 13:23:50 -07:00
ttm drm/ttm: Fix ttm_bo_swapout() infinite LRU walk on swapout failure 2026-05-08 17:19:44 +02:00
Makefile kbuild: Let kernel-doc.py use PYTHON3 override 2025-11-08 19:42:22 -07:00
amd_asic_type.h
drm_accel.h drm: move drm based debugfs funcs to drm_debugfs.c 2025-07-04 15:58:22 +02:00
drm_atomic.h drm fixes for 7.1-rc1 2026-04-24 11:44:52 -07:00
drm_atomic_helper.h drm/atomic-helper: Export and namespace some functions 2026-01-03 20:08:17 +01:00
drm_atomic_state_helper.h drm/atomic-helper: Add private_obj atomic_create_state helper 2026-02-10 10:05:39 +01:00
drm_atomic_uapi.h drm/plane: Add COLOR PIPELINE property 2025-11-26 23:03:32 +01:00
drm_audio_component.h
drm_auth.h
drm_blend.h drm: Add CRTC background color property 2026-03-18 09:59:57 +00:00
drm_bridge.h drm/display: hdmi: Use drm_output_color_format instead of hdmi_colorspace 2026-03-24 13:54:35 +01:00
drm_bridge_connector.h
drm_bridge_helper.h drm/bridge: Add helper to reset bridge pipeline 2025-03-20 14:45:48 +01:00
drm_buddy.h gpu: Move DRM buddy allocator one level up (part two) 2026-02-06 11:38:35 +10:00
drm_cache.h
drm_client.h drm/client: Export drm_client_buffer_create() 2026-03-03 09:28:31 +01:00
drm_client_event.h drm/client: Pass force parameter to client restore 2025-11-25 08:43:46 +01:00
drm_color_mgmt.h drm: Add helper to extract lut from struct drm_color_lut32 2025-11-26 23:03:35 +01:00
drm_colorop.h drm: Allow driver-managed destruction of colorop objects 2026-02-10 11:03:02 +05:30
drm_connector.h drm/edid: Parse AMD Vendor-Specific Data Block 2026-04-03 13:45:49 -04:00
drm_crtc.h drm: Add CRTC background color property 2026-03-18 09:59:57 +00:00
drm_crtc_helper.h
drm_damage_helper.h drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() 2025-03-03 14:45:40 +02:00
drm_debugfs.h drm: add debugfs support on per client-id basis 2025-07-04 15:59:06 +02:00
drm_debugfs_crc.h
drm_device.h drm/gem: Make the GEM LRU lock part of drm_device 2026-05-18 15:16:47 +02:00
drm_drv.h drm: move drm based debugfs funcs to drm_debugfs.c 2025-07-04 15:58:22 +02:00
drm_dumb_buffers.h drm/dumb-buffers: Provide helper to set pitch and size 2025-09-29 13:57:43 +02:00
drm_edid.h drm/edid: add DRM_EDID_IDENT_INIT() to initialize struct drm_edid_ident 2025-11-04 14:49:21 +02:00
drm_eld.h
drm_encoder.h
drm_exec.h
drm_fb_dma_helper.h
drm_fb_helper.h amd-drm-next-7.1-2026-03-12: 2026-03-16 16:50:53 +10:00
drm_fbdev_dma.h
drm_fbdev_shmem.h
drm_fbdev_ttm.h
drm_file.h drm/syncobj: Convert syncobj idr to xarray 2025-12-18 09:05:30 +00:00
drm_fixed.h drm: Add helper for conversion from signed-magnitude 2025-11-26 22:16:13 +01:00
drm_flip_work.h
drm_format_helper.h drm/format-helper: Remove drm_fb_blit() 2025-09-23 15:06:06 +02:00
drm_fourcc.h drm: Pass pixel_format+modifier directly to drm_get_format_info() 2025-07-16 20:01:13 +03:00
drm_framebuffer.h drm/framebuffer: Acquire internal references on GEM handles 2025-07-09 14:03:28 +02:00
drm_gem.h drm/gem: Make the GEM LRU lock part of drm_device 2026-05-18 15:16:47 +02:00
drm_gem_atomic_helper.h
drm_gem_dma_helper.h
drm_gem_framebuffer_helper.h drm/gem/afbc: Eliminate redundant drm_get_format_info() 2025-07-16 20:06:22 +03:00
drm_gem_shmem_helper.h drm/tests: shmem: Hold reservation lock around purge 2025-12-21 18:21:36 +01:00
drm_gem_ttm_helper.h
drm_gem_vram_helper.h drm/gem-vram: Un-export pin helpers 2025-05-30 09:47:28 +02:00
drm_gpusvm.h drm/gpusvm: Introduce a function to scan the current migration state 2025-12-23 10:00:48 +01:00
drm_gpuvm.h drm/gpuvm: use const for drm_gpuva_op_* ptrs 2026-01-08 18:06:56 +01:00
drm_ioctl.h
drm_kunit_helpers.h Merge tag 'drm-misc-next-2025-04-09' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-next 2025-04-14 15:29:49 +10:00
drm_lease.h
drm_managed.h drm: Simplify drmm_alloc_ordered_workqueue return 2025-07-03 10:14:56 -07:00
drm_mipi_dbi.h drm/mipi-dbi: Remove simple-display helpers from mipi-dbi 2026-03-25 15:05:17 +01:00
drm_mipi_dsi.h drm/mipi-dsi: add RGB101010 pixel format 2026-03-25 14:05:33 +02:00
drm_mm.h drm/mm: replace drm_print.h include with a forward declaration 2025-10-31 10:34:56 +02:00
drm_mode_config.h drm: Add CRTC background color property 2026-03-18 09:59:57 +00:00
drm_mode_object.h drm/mode_object: add drm_object_immutable_property_get_value() 2026-01-14 02:18:31 +02:00
drm_modes.h
drm_modeset_helper.h drm: Allow the caller to pass in the format info to drm_helper_mode_fill_fb_struct() 2025-07-16 20:04:45 +03:00
drm_modeset_helper_vtables.h drm/fbdev-helper: Remove drm_fb_helper_debug_enter/_leave() 2025-12-02 09:20:40 +01:00
drm_modeset_lock.h
drm_module.h
drm_of.h drm: of: drm_of_panel_bridge_remove(): convert to of_drm_find_and_get_bridge() 2026-01-20 14:53:45 +01:00
drm_pagemap.h drm/pagemap: Add helper to access zone_device_data 2026-03-13 18:12:07 -07:00
drm_pagemap_util.h drm/pagemap_util: Add a utility to assign an owner to a set of interconnected gpus 2025-12-23 10:00:47 +01:00
drm_panel.h drm/panel: Allow powering on panel follower after panel is enabled 2025-08-25 09:17:49 -07:00
drm_panic.h drm/panic: Add a private field to struct drm_scanout_buffer 2025-06-27 11:48:22 +02:00
drm_pciids.h
drm_plane.h drm/plane: Add COLOR PIPELINE property 2025-11-26 23:03:32 +01:00
drm_plane_helper.h
drm_prime.h drm/shmem-helper: Import dmabuf without mapping its sg_table 2025-06-03 09:21:01 +02:00
drm_print.h drm/print: Add drm_coredump_printer_is_full 2025-04-24 15:51:41 -07:00
drm_privacy_screen_consumer.h
drm_privacy_screen_driver.h
drm_privacy_screen_machine.h
drm_probe_helper.h drm/probe-helper: Do not fail from drmm_kms_helper_poll_init() 2025-03-24 09:31:03 +01:00
drm_property.h drm/atomic: add max_size check to drm_property_replace_blob_from_id() 2026-01-14 02:18:31 +02:00
drm_ras.h drm/ras: Introduce the DRM RAS infrastructure over generic netlink 2026-03-05 19:38:55 -05:00
drm_ras_genl_family.h drm/ras: Introduce the DRM RAS infrastructure over generic netlink 2026-03-05 19:38:55 -05:00
drm_rect.h
drm_self_refresh_helper.h
drm_simple_kms_helper.h drm/simple-kms: Deprecate simple-kms helpers 2026-03-25 15:05:22 +01:00
drm_suballoc.h drm/sa: Split drm_suballoc_new() into SA alloc and init helpers 2026-02-20 10:54:02 -08:00
drm_syncobj.h
drm_sysfs.h
drm_util.h drm: Move for_each_if() to util_macros.h for wider use 2025-02-17 14:27:35 +01:00
drm_utils.h drm: panel-backlight-quirks: Add brightness mask quirk 2025-09-03 10:23:01 -05:00
drm_vblank.h drm/vblank: add return value to drm_crtc_wait_one_vblank() 2025-12-11 16:55:36 +02:00
drm_vblank_helper.h drm/vblank: Add CRTC helpers for simple use cases 2025-10-01 08:32:00 +02:00
drm_vblank_work.h
drm_vma_manager.h
drm_writeback.h drm: writeback: Create drmm variants for drm_writeback_connector initialization 2025-01-21 10:32:33 +01:00
gpu_scheduler.h drm/sched: Add pending job list iterator 2025-12-13 00:34:21 -08:00
gud.h
spsc_queue.h drm/sched: Increment job count before swapping tail spsc queue 2025-07-01 16:14:47 -07:00
task_barrier.h