Linux 6.14 is the second release of 2025, and as usual Igalia took part on it. It’s a very normal release, except that it was release on Monday, instead of the usual Sunday release that has been going on for years now. The reason behind this? Well, quoting Linus himself:
I’d like to say that some important last-minute thing came up and delayed things.
But no. It’s just pure incompetence.
But we did not forget about it, so here’s our Linux 6.14 blog post!
A part of the development cycle for this release happened during late December, when a lot of maintainers and developers were taking their deserved breaks. As a result of this, this release contains less changes than usual as stated by LWN as the “lowest level of merge-window activity seen in years”. Nevertheless, some cool features made through this release:
- NT synchronization primitives: Elizabeth Figura, from Codeweavers, is know from her work around improving Wine sync functions, like mutexes and semaphores. She was one the main collaborators behind the
futex_waitv()
work and now developed a virtual driver that is more compliant with the precise semantics that the NT kernel exposes. This allows Wine to behave closer to Windows without the need to create new syscalls, since this driver usesioctl()
as the front-end uAPI. - RWF_UNCACHED: Linux has two ways of dealing with storage I/O: buffered I/O (usually the preferred one) that stores data in a temporary buffer and regularly syncs the cache data with the device; and direct I/O that doesn’t use cache and always writes/reads synchronously with the storage device. Now a new mixed approach is available: uncached buffered I/O. This method is aimed to have a fast way to write or read data that will not be needed again in the short term. For reading, the device writes data in the buffer and as soon as the user finished reading the buffer, it’s cleared from the cache. For writing, as soon as userspace fills the cache, the device reads it and removes it from the cache. In this way we still have the advantage of using a fast cache but reducing the cache pressure.
- amdgpu panic support: AMD developers added kernel panic support for amdgpu driver, “which displays a pretty user friendly message on the screen when a Linux kernel panic occurs” instead of just a black screen or a partial dmesg log.
As usual Kernel Newbies provides a very good summary, you should check it for more details: Linux 6.14 changelog. Now let’s jump to see what were the merged contributions by Igalia for this release!
DRM
For the DRM common infrastructure, we helped to land a standardization for DRM client memory usage reporting. Additionally, we contributed to improve and fix bugs found in drivers of AMD, Intel, Broadcom, and Vivante.
AMDGPU
For the AMD driver, we fixed bugs experienced by users of Cosmic Desktop Environment on several AMD hardware versions. One was uncovered with the introduction of overlay cursor mode, and a definition mismatch across the display driver caused a page-fault in the usage of multiple overlay planes. Another bug was related to division by zero on plane scaling. Also, we fixed regressions on VRR and MST generated by the series of changes to migrate AMD display driver from open-coded EDID handling to drm_edid
struct.
Intel
For the Intel drivers, we fixed a bug in the xe GPU driver which prevented certain type of workarounds from being applied, helped with the maintainership of the i915 driver, handled external code contributions, maintained the development branch and sent several pull requests.
Raspberry Pi (V3D)
We fixed the GPU resets for the Raspberry Pi 4 as we found out to be broken as per a user bug report.
Also in the V3D driver, the active performance monitor is now properly stopped before being destroyed, addressing a potential use-after-free issue. Additionally, support for a global performance monitor has been added via a new DRM_IOCTL_V3D_PERFMON_SET_GLOBAL
ioctl. This allows all jobs to share a single, globally configured perfmon, enabling more consistent performance tracking and paving the way for integration with user-space tools such as perfetto.
A small video demo of perfetto integration with V3D
etnaviv
On the etnaviv side, fdinfo
support has been implemented to expose memory usage statistics per file descriptor, enhancing observability and debugging capabilities for memory-related behavior.
sched_ext
Many BPF schedulers (e.g., scx_lavd
) frequently call bpf_ktime_get_ns()
for tracking tasks’ runtime properties. bpf_ktime_get_ns()
eventually reads a hardware timestamp counter (TSC). However, reading a hardware TSC is not performant in some hardware platforms, degrading instructions per cycyle (IPC).
We addressed the performance problem of reading hardware TSC by leveraging the rq clock in the scheduler core, introducing a scx_bpf_now()
function for BPF schedulers. Whenever the rq clock is fresh and valid, scx_bpf_now()
provides the rq clock, which is already updated by the scheduler core, so it can reduce reading the hardware TSC. Using scx_bpf_now()
reduces the number of reading hardware TSC by 50-80% (e.g., 76% for scx_lavd
).
Assorted kernel fixes
Continuing our efforts on cleaning up kernel bugs, we provided a few fixes that address issues reported by syzbot with the goal of increasing stability and security, leveraging the fuzzing capabilities of syzkaller to bring to the surface certain bugs that are hard to notice otherwise. We’re addressing bug reports from different kernel areas, including drivers and core subsystems such as the memory manager. As part of this effort, several fixes were done for the probe path of the rtlwifi driver.
Check the complete list of Igalia’s contributions for the 6.14 release
Authored (38)
Changwoo Min
- sched_ext: Relocate scx_enabled() related code
- sched_ext: Implement scx_bpf_now()
- sched_ext: Add scx_bpf_now() for BPF scheduler
- sched_ext: Add time helpers for BPF schedulers
- sched_ext: Replace bpf_ktime_get_ns() to scx_bpf_now()
- sched_ext: Use time helpers in BPF schedulers
- sched_ext: Fix incorrect time delta calculation in time_delta()
Christian Gmeiner
- drm/v3d: Stop active perfmon if it is being destroyed
- drm/etnaviv: Add fdinfo support for memory stats
- drm/v3d: Add DRM_IOCTL_V3D_PERFMON_SET_GLOBAL
Luis Henriques
Maíra Canal
- drm/v3d: Fix performance counter source settings on V3D 7.x
- drm/v3d: Fix miscellaneous documentation errors
- drm/v3d: Assign job pointer to NULL before signaling the fence
- drm/v3d: Don’t run jobs that have errors flagged in its fence
- drm/v3d: Set job pointer to NULL when the job’s fence has an error
Melissa Wen
- drm/amd/display: fix page fault due to max surface definition mismatch
- drm/amd/display: increase MAX_SURFACES to the value supported by hw
- drm/amd/display: fix divide error in DM plane scale calcs
- drm/amd/display: restore invalid MSA timing check for freesync
- drm/amd/display: restore edid reading from a given i2c adapter
Ricardo Cañuelo Navarro
- mm,madvise,hugetlb: check for 0-length range after end address adjustment
- mm: shmem: remove unnecessary warning in shmem_writepage()
Rodrigo Siqueira
Thadeu Lima de Souza Cascardo
- wifi: rtlwifi: do not complete firmware loading needlessly
- wifi: rtlwifi: rtl8192se: rise completion of firmware loading as last step
- wifi: rtlwifi: wait for firmware loading before releasing memory
- wifi: rtlwifi: fix init_sw_vars leak when probe fails
- wifi: rtlwifi: usb: fix workqueue leak when probe fails
- wifi: rtlwifi: remove unused check_buddy_priv
- wifi: rtlwifi: destroy workqueue at rtl_deinit_core
- wifi: rtlwifi: fix memory leaks and invalid access at probe error path
- wifi: rtlwifi: pci: wait for firmware loading before releasing memory
- Revert “media: uvcvideo: Require entities to have a non-zero unique ID”
- char: misc: deallocate static minor in error path
Tvrtko Ursulin
- drm/amdgpu: Use DRM scheduler API in amdgpu_xcp_release_sched
- drm/xe: Fix GT “for each engine” workarounds
Reviewed (36)
André Almeida
- ASoC: cs35l41: Fallback to using HID for system_name if no SUB is available
- ASoC: cs35l41: Fix acpi_device_hid() not found
Christian Gmeiner
- drm/v3d: Fix performance counter source settings on V3D 7.x
- drm/etnaviv: Convert timeouts to secs_to_jiffies()
Iago Toral Quiroga
- drm/v3d: Fix performance counter source settings on V3D 7.x
- drm/v3d: Assign job pointer to NULL before signaling the fence
- drm/v3d: Don’t run jobs that have errors flagged in its fence
- drm/v3d: Set job pointer to NULL when the job’s fence has an error
Jose Maria Casanova Crespo
Luis Henriques
- fuse: rename to fuse_dev_end_requests and make non-static
- fuse: Move fuse_get_dev to header file
- fuse: Move request bits
- fuse: Add fuse-io-uring design documentation
- fuse: make args->in_args[0] to be always the header
- fuse: {io-uring} Handle SQEs - register commands
- fuse: Make fuse_copy non static
- fuse: Add fuse-io-uring handling into fuse_copy
- fuse: {io-uring} Make hash-list req unique finding functions non-static
- fuse: Add io-uring sqe commit and fetch support
- fuse: {io-uring} Handle teardown of ring entries
- fuse: {io-uring} Make fuse_dev_queue_{interrupt,forget} non-static
- fuse: Allow to queue fg requests through io-uring
- fuse: Allow to queue bg requests through io-uring
- fuse: {io-uring} Prevent mount point hang on fuse-server termination
- fuse: block request allocation until io-uring init is complete
- fuse: enable fuse-over-io-uring
- fuse: prevent disabling io-uring on active connections
Maíra Canal
- drm/vkms: Remove index parameter from init_vkms_output
- drm/vkms: Code formatting
- drm/vkms: Use drm_frame directly
- drm/vkms: Use const for input pointers in pixel_read an pixel_write functions
- drm/v3d: Add DRM_IOCTL_V3D_PERFMON_SET_GLOBAL
Tvrtko Ursulin
- drm/etnaviv: Add fdinfo support for memory stats
- drm: make drm-active- stats optional
- Documentation/gpu: Clarify drm memory stats definition
- drm/sched: Fix preprocessor guard
Tested (2)
André Almeida
Christian Gmeiner
Acked (1)
Iago Toral Quiroga
Maintainer SoB (6)
Maíra Canal
- drm/v3d: Stop active perfmon if it is being destroyed
- drm/v3d: Add DRM_IOCTL_V3D_PERFMON_SET_GLOBAL
- drm/vc4: plane: Remove WARN on state being set in plane_reset