linux/include/drm
Rob Clark b2ea6f54b4 drm/sched: Fix dynamic job-flow control race
commit 440d52b370 upstream.

Fixes a race condition reported here: https://github.com/AsahiLinux/linux/issues/309#issuecomment-2238968609

The whole premise of lockless access to a single-producer-single-
consumer queue is that there is just a single producer and single
consumer.  That means we can't call drm_sched_can_queue() (which is
about queueing more work to the hw, not to the spsc queue) from
anywhere other than the consumer (wq).

This call in the producer is just an optimization to avoid scheduling
the consuming worker if it cannot yet queue more work to the hw.  It
is safe to drop this optimization to avoid the race condition.

Suggested-by: Asahi Lina <lina@asahilina.net>
Fixes: a78422e9df ("drm/sched: implement dynamic job-flow control")
Closes: https://github.com/AsahiLinux/linux/issues/309
Cc: stable@vger.kernel.org
Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Danilo Krummrich <dakr@kernel.org>
Tested-by: Janne Grunau <j@jannau.net>
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240913202301.16772-1-robdclark@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-10-10 12:04:11 +02:00
..
bridge drm/bridge: analogix_dp: remove unused analogix_dp_remove 2024-06-27 11:52:04 +02:00
display drm-misc-next for $kernel-version: 2024-07-05 12:37:22 +02:00
i2c drm/i2c: silence ch7006.h and sil164.h kernel-doc warnings 2024-03-11 14:29:19 +02:00
intel drm/i915: ARL requires a newer GSC firmware 2024-08-27 13:23:58 +03:00
ttm Revert "drm/ttm: increase ttm pre-fault value to PMD size" 2024-08-23 09:43:23 -04: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 accel: Use XArray instead of IDR for minors 2024-09-30 16:31:08 +02:00
drm_aperture.h drm/aperture: Remove primary argument 2023-04-16 14:17:41 +02: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-helper: Add an analog TV atomic_check implementation 2022-11-24 12:42:40 +01:00
drm_atomic_uapi.h drm: handle kernel fences in drm_gem_plane_helper_prepare_fb v2 2022-05-02 09:01:51 +02:00
drm_atomic.h drm/atomic: Make the drm_atomic_state documentation less ambiguous 2023-12-18 11:45:34 +01:00
drm_audio_component.h drm/audio: make drm_audio_component.h self-contained 2022-11-29 14:14:51 +02:00
drm_auth.h drm: Remove source code for non-KMS drivers 2023-12-06 10:08:37 +01:00
drm_blend.h Revert "drm: Introduce pixel_source DRM plane property" 2023-12-04 21:33:10 +02:00
drm_bridge_connector.h drm/bridge_connector: drop drm_bridge_connector_en/disable_hpd() 2023-01-05 15:08:10 +01:00
drm_bridge.h drm/bridge-connector: implement glue code for HDMI connector 2024-06-12 10:56:57 +03:00
drm_buddy.h drm/buddy: Add start address support to trim function 2024-08-07 18:19:00 -04:00
drm_cache.h LoongArch: Add writecombine support for drm 2022-06-03 20:09:27 +08:00
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: Add DRM_MODE_TV_MODE_MONOCHROME 2024-06-18 11:13:30 +02:00
drm_crtc_helper.h drm/crtc-helper: Remove most include statements from drm_crtc_helper.h 2023-01-18 09:25:32 +01:00
drm_crtc.h drm: Remove references to removed transitional helpers 2023-07-29 21:25:16 +02:00
drm_damage_helper.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_debugfs.h drm/gpuvm: rename struct drm_gpuva_manager to struct drm_gpuvm 2023-09-26 01:51:28 +02:00
drm_device.h drm: Remove source code for non-KMS drivers 2023-12-06 10:08:37 +01:00
drm_drv.h drm: deprecate driver date 2024-05-08 15:31:58 +03:00
drm_edid.h drm/edid: remove drm_do_get_edid() 2024-05-14 10:30:15 +03:00
drm_eld.h drm/eld: add helpers to modify the SADs of an ELD 2023-11-09 16:48:27 +02:00
drm_encoder_slave.h drm/encoder: improve drm_encoder_slave.h kernel-doc 2024-03-11 11:47:06 +02:00
drm_encoder.h drm/encoder: register per-encoder debugfs dir 2023-12-04 16:07:29 +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_dma: s/drm_panic_gem_get_scanout_buffer/drm_fb_dma_get_scanout_buffer 2024-04-15 13:50:40 -03:00
drm_fb_helper.h drm/fb-helper: Remove unused inline function drm_fb_helper_defio_init() 2023-07-25 20:38:37 +02:00
drm_fbdev_dma.h drm/fbdev-dma: Implement fbdev emulation for GEM DMA helpers 2023-03-14 17:07:47 +01:00
drm_fbdev_shmem.h drm/fbdev: Add fbdev-shmem 2024-05-02 11:33:15 +02:00
drm_fbdev_ttm.h drm/fbdev-generic: Convert to fbdev-ttm 2024-05-02 11:33:32 +02:00
drm_file.h accel: Use XArray instead of IDR for minors 2024-09-30 16:31:08 +02:00
drm_fixed.h drm: Add helpers for q4 fixed point values 2024-07-03 18:05:12 +03:00
drm_flip_work.h drm: Fix flip-task docs 2023-11-14 10:23:12 +01:00
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: Remove plane hsub/vsub alignment requirement for core helpers 2023-10-12 09:51:19 +02:00
drm_framebuffer.h drm: Remove legacy cursor hotspot code 2023-11-24 11:58:02 +01:00
drm_gem_atomic_helper.h drm/atomic-helper: Add format-conversion state to shadow-plane state 2023-11-14 10:01:14 +01:00
drm_gem_dma_helper.h drm: Clear fd/handle callbacks in struct drm_driver 2023-06-26 11:08:41 +02:00
drm_gem_framebuffer_helper.h drm/gem: Ignore color planes that are unused by framebuffer format 2022-05-19 19:25:02 +02:00
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/ttm: merge ttm_bo_api.h and ttm_bo_driver.h v2 2022-12-06 12:54:14 +01:00
drm_gem_vram_helper.h Merge drm/drm-next into drm-misc-next 2024-04-02 09:51:30 +02:00
drm_gem.h drm/fbdev-generic: Fix locking with drm_client_buffer_vmap_local() 2024-03-11 13:33:50 +01:00
drm_gpuvm.h Merge drm/drm-next into drm-misc-next 2024-01-29 14:20:23 +01:00
drm_ioctl.h drm: Remove locking for legacy ioctls and DRM_UNLOCKED 2023-12-06 10:08:32 +01:00
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-dbi: Add support for DRM_FORMAT_RGB888 2024-06-07 16:09:05 +02:00
drm_mipi_dsi.h drm/mipi-dsi: add mipi_dsi_usleep_range helper 2024-06-26 18:38:29 +02:00
drm_mm.h drm/mm: Remove unused drm_mm_replace_node 2024-06-06 10:24:13 -04:00
drm_mode_config.h drm/fbdev: Clean up fbdev documentation 2024-05-02 11:33:34 +02:00
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_vtables.h drm/panic: Add a drm panic handler 2024-04-15 16:12:49 +02:00
drm_modeset_helper.h
drm_modeset_lock.h drm/locking: fix drm_modeset_acquire_ctx kernel-doc 2022-01-20 14:41:25 +02:00
drm_module.h drm: Provide platform module-init macro 2022-01-19 18:40:18 +01:00
drm_of.h drm/of: make drm_of.h self-contained 2024-03-07 17:17:25 +02:00
drm_panel.h drm/panel: Fix kernel-doc typo for follower_lock 2023-08-03 10:21:27 +02:00
drm_panic.h drm/panic: Add a set_pixel() callback to drm_scanout_buffer 2024-06-10 13:49:16 +02:00
drm_pciids.h drm: Remove some obsolete drm pciids(tdfx, mga, i810, savage, r128, sis, via) 2023-01-13 09:44:56 +01:00
drm_plane_helper.h drm/plane-helper: Move drm_plane_helper_atomic_check() into udl 2023-12-06 10:35:49 +01:00
drm_plane.h drm: Export drm_plane_has_format() 2024-06-24 17:08:53 +03:00
drm_prime.h Revert "drm/prime: Unexport helpers for fd/handle conversion" 2023-11-30 14:46:04 -05:00
drm_print.h drm/printer: Allow NULL data in devcoredump printer 2024-10-10 12:03:33 +02:00
drm_privacy_screen_consumer.h drm/privacy-screen: Add notifier support (v2) 2021-10-14 13:12:25 +02:00
drm_privacy_screen_driver.h drm/privacy_screen: Add drvdata in drm_privacy_screen 2022-01-10 12:17:37 +01:00
drm_privacy_screen_machine.h drm/privacy-screen: Add X86 specific arch init code 2021-10-14 13:12:24 +02:00
drm_probe_helper.h drm/ast: Automatically clean up poll helper 2024-04-02 10:40: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/simple-kms: Remove drm_gem_simple_display_pipe_prepare_fb() 2022-12-05 13:35:37 +01:00
drm_suballoc.h drm/suballoc: fix drm_suballoc.h kernel-doc 2024-03-07 17:17:25 +02:00
drm_syncobj.h drm/syncobj: add IOCTL to register an eventfd 2023-07-20 12:01:03 +02:00
drm_sysfs.h drm/sysfs: rename drm_sysfs_connector_status_event() 2023-06-23 15:54:00 +02:00
drm_util.h
drm_utils.h
drm_vblank_work.h drm: Add drm_vblank_work_flush_all(). 2024-06-24 18:03:18 +02:00
drm_vblank.h drm/vblank: Introduce drm_crtc_vblank_crtc() 2024-04-18 13:27:56 +03:00
drm_vma_manager.h drm/drm_vma_manager: Add drm_vma_node_allow_once() 2023-01-19 14:16:55 +01:00
drm_writeback.h drm: introduce drm_writeback_connector_init_with_encoder() API 2022-05-02 02:12:59 +03:00
gpu_scheduler.h drm/sched: Fix dynamic job-flow control race 2024-10-10 12:04:11 +02:00
gud.h drm/gud: Add GUD_PIXEL_FORMAT_RGB888 2021-10-04 12:06:14 +02:00
spsc_queue.h
task_barrier.h drm: Spelling s/randevouz/rendez-vous/ 2023-07-29 21:11:54 +02:00