Linux 7.3 just got released, check Igalia contributions
Linux 7.3 has been tagged and released with over 18,000 commits. Linux 7.3 includes many exciting improvements: sub-scheduler support in sched-ext, which allows BPF schedulers to be hierarchically stacked along the cgroup hierarchy, better tracking of the working set in VM guest memory using userfaultfd(2), improved FUSE performance through better support for buffer pools and zero-copy I/O when used with io_uring, better memory access tracking in DAMON using data attributes, improved VRAM management on older AMD GPUs, and many more. For more details and a full list of changes, check the corresponding KernelNewbies page.
As usual, Igalia has been busy contributing fixes and improvements across the release, especially to GPU drivers and sched-ext. Below are some of our highlights from this cycle.
Igalia Changelog
V3D Submission Path and Performance Monitor Improvements
In this release, we continued improving the Raspberry Pi GPU drivers, especially for the V3D submission path. As the V3D driver grew over time, different types of submissions were added, and the submission code became more complex, but the driver kept the same abstractions. That’s why we refactored the code to introduce a new submission abstraction that represents the submission chain as an ordered array of jobs. This made the code more readable and allowed us to address several minor issues in the submission path, making it more robust.
We also refactored the performance monitor locking, which allowed us to properly enforce cross-queue serialization and improve the reliability of the performance counter values. This will be especially useful for GPU developers, who can use performance counter values for debugging and performance profiling.
This release will also be the last one in which the V3D driver supports V3D 3.3 and 4.1. These V3D generations have had no in-tree userspace since Mesa dropped support for them in 2024, and we will deprecate kernel support in the next release.
AMD GPU Driver Improvements
We have continued with various driver improvements such as refactoring the context and buffer object list handling away from legacy IDR to XArray, while simultaneously simplifying the respective code paths.
We also eliminated several hundred kilobytes from the compiled driver size by moving certain runtime decisions from macros to driver init-time checks.
On the performance front, we reduced CPU utilization in the job submission path by removing the unused buffer object list mutex, replacing multiple invariant IP checks with a single cached conditional, and significantly reduced idle worker re-arming to further reduce CPU usage.
On the security side, we have addressed potential Use-After-Free (UAF) bugs and null pointer dereference bugs in the context pstate handling path.
AMD Display Driver Bug Fixes
We addressed gradient banding in HDR content on AMD display drivers (DCN 3.0+ and DCN3.2+ families). To address this, we provided distinct LUT segmentation for encoded-to-linear EOTFs calculated by the AMD color module when the color block doesn’t support hardware curves, and we translated predefined EOTFs into a PWL LUT. Before these changes, the driver used the same helper and LUT segmentation for EOTFs and inverse EOTFS, but those have different input domains and curvature distributions. We also extended the use of LUTs, rather than hardware curves, for degamma to AMD driver-specific properties when using subsampled formats.
We resolved an issue where missing blend-mode properties triggered continuous warnings across all AMD display versions. Recent kernel updates (starting with version 7.2) require drivers to explicitly advertise supported blend modes rather than relying on DRM’s old default pre-multiplied behavior. This update ensures full compatibility with newer kernels and eliminates system log spam.
DMEM cgroup Improvements
We also got involved in improvements to the dmem cgroup controller, which allows the peak VRAM usage of amdgpu and Xe drivers to be inspected. While setting the max dmem usage to lower than the current actual consumption, the system will now reclaim VRAM memory, moving it to GTT. Low and min settings will now be considered during certain scenarios, triggering reclaim instead of backing off to GTT allocation. For more details, take a look at Cascardo’s blog post about it.
Sched-ext Improvements
We have continued improving sched-ext. In particular, we optimized the BPF-arena spinlock’s memory usage by removing duplicate copies. We also made ops.cgroup_set_bandwidth(), one of the sched-ext hooks for cgroup v2 support, sleepable; this lets a BPF scheduler call a sleepable operation, like memory allocation, giving it more flexibility.
Other General Fixes and Cleanups
Beyond the major subsystem updates, Igalia also helped with several “odd fixes” and general maintenance work to keep the kernel healthy.
We also simplified the nouveau and panthor codebases and continued improving the shared DRM scheduler component.
We fixed an issue in the i915/Xe display code where new enum entries overflowed storage, and we fixed many UAF issues in the AMD KUNIT tests.
We identified and fixed several memory leaks during in KMS atomic modesetting.
We did a minor code cleanup by removing a useless return branch in VFS POSIX ACL code. This unnecessary code was identified while working on the FUSE ACLs caching documentation.
We also clarified console verbosity when using panic_print with pstore. When you want more information during a kernel panic, you can print extra stuff using, for example, the panic_{print,sys_info} parameters to dump memory state, task stacks, etc. This is especially useful for pstore users saving data for post-mortem analysis. What might go unnoticed is how console drivers can impact that. Consoles are known to be slow, and the console verbosity is automatically bumped on panic. In this cycle, we documented this behavior and how it relates to panic extra dumping, so users don’t waste time debugging the panic path itself.
Authored (69)
Changwoo Min
- selftests/bpf: Remove duplicate copies of the arena spinlock qnodes
- sched_ext: Allow ops.cgroup_set_bandwidth() to be sleepable
Guilherme G. Piccoli
John Harrison
- drm/i915/display: Fix too few bits in transcoder mask variables
- drm/amd/display: Fix use-after-free bugs in KUnit tests
Luis Henriques
Maíra Canal
- dma-fence: Clarify external lock use case in dma_fence_init() docs
- drm/v3d: Reduce PM runtime autosuspend delay
- accel: ethosu: Remove redundant job_lock
- drm/v3d: Drop unused drm_encoder.h include from v3d_drv.h
- drm/v3d: Clear queue->active_job when v3d_fence_create() fails
- drm/v3d: Extract v3d_job_add_syncobjs() helper
- drm/v3d: Reject invalid syncobj handles in submit ioctls
- drm/v3d: Migrate BO reservation locking to DRM exec
- drm/v3d: Introduce struct v3d_submit and convert CL/TFU/CSD ioctls
- drm/v3d: Make v3d_get_cpu_indirect_csd_params() a pure parser
- drm/v3d: Convert submit helpers to operate on struct v3d_submit
- drm/v3d: Refactor CPU ioctl into unified submission chain
- drm/v3d: Split BO fence attach from syncobj output handling
- drm/v3d: Reject invalid out_sync handles in submit ioctls
- drm/v3d: Ensure atomic submissions in v3d_submit_jobs()
- drm/v3d: Deprecate V3D 3.3 and 4.1 support
- drm/v3d: Refactor perfmon locking
- drm/v3d: Serialize jobs across queues when a perfmon is attached
- drm/v3d: Use write_to_buffer() helper in performance query copy
- pmdomain: bcm: bcm2835-power: Raise ASB poll timeout to 100us
- drm/v3d: Associate BOs with every job that accesses them
- drm/panfrost: Remove unused scheduled_jobs list
- drm/vc4: Free the BO cache size list on teardown
- drm/vc4: Use kvmalloc_objs() for the BO cache size list
- drm/vc4: Disable the V3D interrupt across runtime suspend
- drm/vc4: Fix binner slot allocation failing on an idle GPU
Melissa Wen
- drm/amd/display: use GAMCOR for degamma private props in subsampled format
- Revert “drm/amd/display: Remove unused cm3_helper_translate_curve_to_degamma_hw_format”
- drm/amd/display: use a separate helper to translate degamma curves
- drm/amd/display: support up to 256 samples per region in degamma/blend LUT
- drm/amd/display: use halving distribution for PQ/sRGB linearizing LUT
- drm/atomic-state-helper: set pixel_blend_mode to prop default on reset
- drm/amd/display: fix missing blend-mode-prop warning for DCN
- drm/amd/display: advertise PIXEL_NONE and PREMULTI blend mode for DCE
- drm/amd/display: use halving distribution for all encode-to-linear curves
- drm/amd/display: use plane color_mgmt_changed to track colorop changes
Thadeu Lima de Souza Cascardo
- cgroup/dmem: introduce a peak file
- drm/amdgpu: initialize irq.lock spinlock earlier
- drm/atomic: remove bogus check for file_priv
- drm: Fix drm_crtc_commit leak if signaled when PAGE_FLIP_EVENT is used
- Revert “drm/amdgpu: debugfs: avoid extra EOLs in amdgpu_gem_info”
- drm: Fix drm_pending_vblank_event leak in error path for out_fence_ptr
Tvrtko Ursulin
- drm/sched: Remove redundant entity->rq initialization and checks
- drm/amdgpu: Fix context pstate override handling
- drm/amdgpu: Remove arbitrary number of contexts limitation
- drm/amdgpu: Consolidate ctx put
- drm/amdgpu: Remove live context error log and skip
- drm/amdgpu: Simplify amdgpu_ctx_get_stable_pstate()
- drm/amdgpu: Convert context manager to xarray
- drm/amdgpu: Clarify odd behaviour of AMDGPU_CTX_OP_GET_STABLE_PSTATE
- drm/amdgpu: Choose SOC15 RLC register read write functions at init time
- drm/amdgpu: Only calculate register offset once in SOC15 RLC
- drm/nouveau: Simplify nouveau_cli_work
- drm/amdgpu: Drop support for variable struct drm_amdgpu_bo_list_entry size
- drm/amdgpu: Remove the bo list mutex
- drm/amdgpu: Replace idr with xarray in amdgpu_bo_list
- drm/amdgpu: Remove output parameter in bo list handling
- drm/amdgpu: Remove unused amdgpu_device_ip_is_hw
- drm/amdgpu: Save some cycles on the job submission path
- drm/amdgpu: Do not fiddle with the idle workers too much
- drm/panthor: Remove redundant drm_sched_job_cleanup() from the .free_job callback
- drm/sched: Fix virtual runtime race
- drm/xe: Do not emit Wa_16010904313 twice
Reviewed (59)
André Almeida
- futex: Remove unnecessary NULL check before kvfree()
- selftests/futex: Give circular-list nodes static storage
Christian Gmeiner
Iago Toral Quiroga
- drm/v3d: Reduce PM runtime autosuspend delay
- drm/v3d: Drop unused drm_encoder.h include from v3d_drv.h
- drm/v3d: Deprecate V3D 3.3 and 4.1 support
- drm/v3d: Refactor perfmon locking
- drm/v3d: Serialize jobs across queues when a perfmon is attached
- drm/v3d: Use write_to_buffer() helper in performance query copy
- drm/v3d: Associate BOs with every job that accesses them
- drm/vc4: Disable the V3D interrupt across runtime suspend
- drm/vc4: Fix binner slot allocation failing on an idle GPU
Maíra Canal
- accel: ethosu: Add performance counter support
- drm/v3d: bound CPU-job query writes to their destination BO
- drm/vc4: hdmi: take i2c adapter module reference
- drm/vc4: Use managed KMS polling to fix UAF on unbind
- drm/vc4: drain the hangcheck timer and works on V3D unbind
- drm/vc4: Fix firmware reference leak in vc4_drm_bind()
- drm/vc4: hdmi: Move packet RAM enable to PM runtime
Melissa Wen
- drm/amd/display: Fix mem_type change detection for async flips
- drm/amd/display: Fix NULL pointer dereference in amdgpu_dm_crtc_set_vblank()
- drm/amd/display: avoid divide-by-zero in __is_lut_linear()
- drm/amd/display: validate plane degamma LUT size for private color prop
- drm/atomic: remove bogus check for file_priv
- drm: Fix drm_crtc_commit leak if signaled when PAGE_FLIP_EVENT is used
- drm: Fix drm_pending_vblank_event leak in error path for out_fence_ptr
Thadeu Lima de Souza Cascardo
- cgroup/dmem: accept only one region per limit write
- drm/vc4: Free the BO cache size list on teardown
- drm/vc4: Use kvmalloc_objs() for the BO cache size list
Tvrtko Ursulin
- drm/v3d: Clear queue->active_job when v3d_fence_create() fails
- drm/v3d: Extract v3d_job_add_syncobjs() helper
- drm/v3d: Reject invalid syncobj handles in submit ioctls
- drm/v3d: Migrate BO reservation locking to DRM exec
- drm/v3d: Introduce struct v3d_submit and convert CL/TFU/CSD ioctls
- drm/v3d: Make v3d_get_cpu_indirect_csd_params() a pure parser
- drm/v3d: Convert submit helpers to operate on struct v3d_submit
- drm/v3d: Refactor CPU ioctl into unified submission chain
- drm/v3d: Split BO fence attach from syncobj output handling
- drm/v3d: Reject invalid out_sync handles in submit ioctls
- drm/v3d: Ensure atomic submissions in v3d_submit_jobs()
- drm/i915/gem: Fix phys BO pread/pwrite with offset
- drm/amdgpu: initialize irq.lock spinlock earlier
- amdgpu/ih6.1: Fix minor version
- drm/amdgpu: Use system unbound workqueue for soft IH ring
- drm/i915/gem: Add missing nospec on parallel submit slot
- ttm/pool: Use sentinels in debugfs
- dma-buf: rename dma_fence_enable_sw_signaling
- drm/amdgpu: Simplify filtering rings during IP block soft reset
- drm/amdgpu: Fix typos in comments for IP block soft reset
- drm/xe/guc: Keep scheduler timeline name alive
- drm/amdgpu/gfx7: Make amdgpu_gfx_mqd_sw_init() usable on GFX7
- drm/amdgpu/gfx7: Refactor MQD initialization and finalization
- drm/amdgpu/gfx7: Use COND_EXEC
- drm/amdgpu/gfx7: Fixup IP block soft reset
- drm/amdgpu/gfx7: Enable IP block soft reset as a GPU recovery method
- drm/ttm: Extract code for attempting allocation in a place
- drm/amd/display: Shorten hdmi_frl_status_polling_workqueue
- drm/i915: fix incorrect RCU teardown order
Tested (8)
Thadeu Lima de Souza Cascardo
- cgroup/dmem: accept only one region per limit write
- cgroup,cgroup/dmem: Add (dmem_)cgroup_common_ancestor helper
- drm/amdgpu: Fix init ordering in amdgpu_vram_mgr_init()
- cgroup/dmem: Introduce struct dmem_cgroup_init for region initialization
- cgroup/dmem: Add reclaim callback for lowering max below current usage
- drm/ttm: Hook up a cgroup-aware reclaim callback for the dmem controller
- drm/xe: Wire up dmem cgroup reclaim for VRAM manager
- drm/amdgpu: Wire up dmem cgroup reclaim for VRAM manager
Acked (2)
Maíra Canal
Tvrtko Ursulin
Maintainer SoB (9)
Maíra Canal
- drm/v3d: bound CPU-job query writes to their destination BO
- drm/vc4: hdmi: take i2c adapter module reference
- drm/vc4: Use managed KMS polling to fix UAF on unbind
- drm/vc4: drain the hangcheck timer and works on V3D unbind
- drm/vc4: Fix firmware reference leak in vc4_drm_bind()
- drm/vc4: hdmi: Move packet RAM enable to PM runtime