Matthew Brost
549a9c78c3
drm/sched: Increment job count before swapping tail spsc queue
...
commit 8af39ec5cf2be522c8eb43a3d8005ed59e4daaee upstream.
A small race exists between spsc_queue_push and the run-job worker, in
which spsc_queue_push may return not-first while the run-job worker has
already idled due to the job count being zero. If this race occurs, job
scheduling stops, leading to hangs while waiting on the job’s DMA
fences.
Seal this race by incrementing the job count before appending to the
SPSC queue.
This race was observed on a drm-tip 6.16-rc1 build with the Xe driver in
an SVM test case.
Fixes: 1b1f42d8fd ("drm: move amd_gpu_scheduler into common location")
Fixes: 27105db6c6 ("drm/amdgpu: Add SPSC queue to scheduler.")
Cc: stable@vger.kernel.org
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Link: https://lore.kernel.org/r/20250613212013.719312-1-matthew.brost@intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-07-17 18:25:03 +02:00
..
bridge
drm/bridge: analogix_dp: Split bind() into probe() and real bind()
2020-05-10 10:31:22 +02:00
i2c
ttm
drm-misc-next for 5.4:
2019-08-21 16:44:41 +10:00
amd_asic_type.h
drm/amdgpu: add renoir asic_type enum
2019-08-12 12:47:49 -05:00
ati_pcigart.h
drm_agpsupport.h
drm/agp: Remove unused function drm_agp_bind_pages
2019-07-15 18:11:30 +02:00
drm_atomic.h
drm/atomic: clarify the rules around drm_atomic_state->allow_modeset
2025-06-04 14:32:34 +02:00
drm_atomic_helper.h
drm/atomic: Move __drm_atomic_helper_disable_plane/set_config()
2019-06-08 16:46:37 +02:00
drm_atomic_state_helper.h
drm/atomic: Add a function to reset connector TV properties
2019-06-19 12:17:52 +02:00
drm_atomic_uapi.h
drm_audio_component.h
drm_auth.h
drm_blend.h
drm_bridge.h
drm/bridge: Fix typo in post_disable() description
2024-01-25 14:34:27 -08:00
drm_cache.h
drm_client.h
drm/client: Support unmapping of DRM client buffers
2019-08-01 15:01:22 +02:00
drm_color_mgmt.h
drm_connector.h
drm: Fix kerneldoc warns in connector-related docs
2019-08-12 10:16:39 -04:00
drm_crtc.h
drm: Initialize struct drm_crtc_state.no_vblank from device settings
2023-03-11 16:43:46 +01:00
drm_crtc_helper.h
drm_damage_helper.h
drm_debugfs.h
drm: drm_debugfs.h self-contained
2019-06-10 22:30:24 +02:00
drm_debugfs_crc.h
drm_device.h
drm_displayid.h
drm/edid: parse CEA blocks embedded in DisplayID
2019-06-25 14:32:26 +10:00
drm_dp_dual_mode_helper.h
drm_dp_helper.h
drm/display/dp: Fix the DP DSC Receiver cap size
2023-08-30 16:27:26 +02:00
drm_dp_mst_helper.h
drm: mst: Fix query_payload ack reply struct
2019-12-31 16:42:19 +01:00
drm_drv.h
drm/prime: Ditch gem_prime_res_obj hook
2019-07-31 10:19:23 +02:00
drm_dsc.h
drm_edid.h
drm: fix EDID struct for old ARM OABI format
2022-06-14 18:11:31 +02:00
drm_encoder.h
drm_encoder_slave.h
drm_fb_cma_helper.h
drm_fb_helper.h
drm/fb-helper: Prepare to move out modeset config code
2019-06-11 14:47:17 +02:00
drm_file.h
drm_fixed.h
drm: Don't treat 0 as -1 in drm_fixp2int_ceil
2024-03-26 18:22:19 -04:00
drm_flip_work.h
drm_format_helper.h
drm_fourcc.h
drm_framebuffer.h
drm/fb: document dirty helper better
2019-06-11 18:02:48 +02:00
drm_gem.h
dma-buf: rename reservation_object to dma_resv
2019-08-13 09:09:30 +02:00
drm_gem_cma_helper.h
drm_gem_framebuffer_helper.h
drm/fb: remove unused function: drm_gem_fbdev_fb_create()
2019-07-21 19:32:38 +02:00
drm_gem_shmem_helper.h
drm/shmem: Add docbook comments for drm_gem_shmem_object madvise fields
2019-11-06 17:57:42 -06:00
drm_gem_vram_helper.h
drm/vram: use embedded gem object
2019-08-06 08:21:53 +02:00
drm_hashtab.h
drm_hdcp.h
drm/hdcp: update content protection property with uevent
2019-08-06 13:17:23 +05:30
drm_ioctl.h
drm: Return -ENOTTY for non-drm ioctls
2021-07-28 13:31:01 +02:00
drm_irq.h
drm_lease.h
drm_legacy.h
drm_mipi_dbi.h
drm/tinydrm: Move mipi-dbi
2019-07-25 10:45:07 +02:00
drm_mipi_dsi.h
drm/mipi-dsi: Fix detach call without attach
2024-02-23 08:25:00 +01:00
drm_mm.h
drm_mode_config.h
drm/drm_fb_helper: fix fbdev with sparc64
2020-08-11 15:33:37 +02:00
drm_mode_object.h
drm_modes.h
drm/selftests: reduce stack usage
2019-07-01 09:50:58 +02:00
drm_modeset_helper.h
drm_modeset_helper_vtables.h
Linux 5.2-rc5
2019-06-19 12:07:29 +02:00
drm_modeset_lock.h
drm_of.h
drm_os_linux.h
drm_panel.h
drm/panel: Add and fill drm_panel type field
2023-07-27 08:37:29 +02:00
drm_pci.h
drm_pciids.h
drm_plane.h
drm/docs: More links for implicit/explicit fencing.
2019-06-03 17:11:33 +02:00
drm_plane_helper.h
drm_prime.h
drm/prime: Align gem_prime_export with obj_funcs.export
2019-06-21 17:30:49 +02:00
drm_print.h
drm/printer: Allow NULL data in devcoredump printer
2024-11-08 16:20:39 +01:00
drm_probe_helper.h
drm_property.h
drm_rect.h
drm_scdc_helper.h
drm_self_refresh_helper.h
drm/atomic: fix self-refresh helpers crtc state dereference
2019-11-06 13:00:21 -05:00
drm_simple_kms_helper.h
drm: Initialize struct drm_crtc_state.no_vblank from device settings
2023-03-11 16:43:46 +01:00
drm_syncobj.h
drm_sysfs.h
drm: uevent for connector status change
2019-08-06 13:16:54 +05:30
drm_util.h
drm_utils.h
drm_vblank.h
drm: Initialize struct drm_crtc_state.no_vblank from device settings
2023-03-11 16:43:46 +01:00
drm_vma_manager.h
drm_vram_mm_helper.h
drm: add missing include to drm_vram_mm_helper.h
2019-07-15 18:11:31 +02:00
drm_writeback.h
drmP.h
dma-buf: rename reservation_object to dma_resv
2019-08-13 09:09:30 +02:00
gma_drm.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 335
2019-06-05 17:37:06 +02:00
gpu_scheduler.h
i915_component.h
drm/i915/tgl: Add additional ports for Tiger Lake
2019-07-11 16:31:14 -07:00
i915_drm.h
drm/i915: Drop extern qualifiers from header function prototypes
2019-07-12 13:04:54 +01:00
i915_mei_hdcp_interface.h
i915_pciids.h
drm/i915/cml: Add Missing PCI IDs
2019-08-15 12:55:54 -07:00
intel-gtt.h
iommu/vt-d: Move intel_iommu_gfx_mapped to Intel IOMMU header
2020-11-24 13:29:17 +01:00
intel_lpe_audio.h
spsc_queue.h
drm/sched: Increment job count before swapping tail spsc queue
2025-07-17 18:25:03 +02:00