
Linux Kernel v6.19 is Released: This is What's New for Compute Express Link (CXL)
- Steve Scargall
- Cxl
- February 8, 2026
The Linux Kernel v6.19 release brings several improvements and additions related to Compute Express Link (CXL) technology.
Release Highlights
Linux Kernel v6.19 includes 31 commits to the CXL and DAX subsystems:
| Category | Commits |
|---|---|
| New Features & Hardware | 1 |
| Bug Fixes | 4 |
| Refactoring & Cleanup | 5 |
| Testing | 1 |
| Documentation | 2 |
| Other | 18 |
Linux v6.19 is a measured release for the CXL/DAX subsystem — 31 commits spread across correctness fixes, code hardening, and targeted new functionality. The headline addition is extended linear cache (ELC) region support: regions can now be flagged to indicate they carry an ELC mapping, a prerequisite for properly managing CXL memory that participates in CPU-side cache hierarchies. Alongside the feature itself, the release includes adjustments to how ELC failures are reported through cxl_acpi, and the HBIW platform-data guard that was accidentally dropped has been restored.
Address translation received concentrated attention this cycle. A new validity check was threaded through all translation call sites so that error-path addresses — which can be indistinguishable from legitimate zeroes — no longer silently propagate up the stack. The translation helpers were also refactored to be directly callable from the test suite, enabling future unit-level coverage of the XOR arithmetic that underpins interleave decode. The XOR setup code in cxl_acpi was consolidated into a single block as a companion cleanup.
On the correctness side, __cxl_dpa_reserve() had a latent infinite loop that could be triggered under certain DPA allocation patterns — fixed this cycle. The port layer received a fix for target list construction when multiple decoders share the same downstream port, a topology that appears in multi-level switch hierarchies. The memregion layer gained fine-grained cache invalidation via cpu_cache_invalidate_memregion() while shedding an unused IORES_DESC_* parameter that had been carried as dead weight. The DAX character device also transitioned to the new mmap_prepare interface, aligning with the VMA operation model introduced in recent MM rework.
Key Changes
Extended Linear Cache region flag:
cxl/regioncan now mark a region as having an extended linear cache, allowing the kernel to correctly account for ELC-backed memory in topology enumeration and resource management decisions.Address translation error hardening: Return values from address translation functions are now validated at every call site, preventing silent use of sentinel error addresses that could corrupt DPA/HPA mappings in error paths.
Locked CXL decoder handling: The driver now explicitly handles decoders that arrive from firmware in a locked state, rather than treating them as misconfigured — important for systems where early boot firmware programs and locks decoders before the OS takes control.
Fine-grained
memregioncache invalidation:cpu_cache_invalidate_memregion()now supports range-limited invalidation, reducing the overhead of cache coherence operations when only a portion of a memory region changes state.Infinite loop fix in
__cxl_dpa_reserve(): A missing termination condition in the DPA reservation loop could cause the kernel to spin indefinitely when the requested range couldn’t be satisfied; the fix adds a proper bounds check before re-entering the search.Multi-decoder dport target list fix:
cxl/portnow correctly constructs the target list when more than one decoder maps through the same downstream port, preventing silent misconfiguration of interleave sets in certain switch topologies.Address translation functions exposed for testing: The XOR interleave arithmetic in
cxl/acpiwas refactored so the calculation helpers are reachable from the test suite, enabling in-kernel unit tests for the decode path without requiring full ACPI enumeration.devdax migrated to
mmap_prepare: The DAX device’s memory-mapping path now uses themmap_prepareVMA hook, replacing a deprecated interface and keeping devdax aligned with the MM subsystem’s evolving VMA lifecycle model.
CXL related changes from Kernel v6.18 to v6.19
Here is the detailed list of all commits merged into the 6.19 Kernel for CXL and DAX. This list was generated by the Linux Kernel CXL Feature Tracker .
- cxl: Check for invalid addresses returned from translation functions on errors
- cxl/hdm: Fix potential infinite loop in __cxl_dpa_reserve()
- cxl/acpi: Restore HBIW check before dereferencing platform_data
- cxl/port: Fix target list setup for multiple decoders sharing the same dport
- cxl/region: fix format string for resource_size_t
- Merge tag ‘soc-drivers-6.19-2’ of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
- Merge tag ‘cxl-for-6.19’ of git://git.kernel.org/pub/scm/linux/kernel/git/cxl/cxl
- Merge tag ‘cache-for-v6.19’ of https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux into soc/drivers-late
- memregion: Support fine grained invalidate by cpu_cache_invalidate_memregion()
- memregion: Drop unused IORES_DESC_* parameter from cpu_cache_invalidate_memregion()
- Merge branch ‘for-6.19/cxl-prm’ into cxl-for-next
- cxl/region: Remove local variable @inc in cxl_port_setup_targets()
- cxl/acpi: Group xor arithmetric setup code in a single block
- cxl: Simplify cxl_rd_ops allocation and handling
- Merge branch ‘for-6.19/cxl-elc’ into cxl-for-next
- Merge branch ‘for-6.19/cxl-addr-xlat’ into cxl-for-next
- cxl: Clarify comment in spa_maps_hpa()
- cxl: Rename region_res_match_cxl_range() to spa_maps_hpa()
- cxl: Add handling of locked CXL decoder
- cxl/region: Add support to indicate region has extended linear cache
- cxl: Adjust extended linear cache failure emission in cxl_acpi
- cxl/acpi: Make the XOR calculations available for testing
- cxl/region: Refactor address translation funcs for testing
- cxl/pci: replace use of system_wq with system_percpu_wq
- cxl: fix typos in cdat.c comments
- cxl/port: Remove devm_cxl_port_enumerate_dports()
- drivers/dax: add some missing kerneldoc comment fields for struct dev_dax
- Merge tag ‘mm-stable-2025-12-03-21-26’ of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
- device/dax: update devdax to use mmap_prepare
- mm: consistently use current->mm in mm_get_unmapped_area()
- Coccinelle-based conversion to use ->i_state accessors


