
Linux Kernel v6.17 is Released: This is What's New for Compute Express Link (CXL)
- Steve Scargall
- Cxl
- September 28, 2025
The Linux Kernel v6.17 release brings several improvements and additions related to Compute Express Link (CXL) technology.
Release Highlights
Linux Kernel v6.17 includes 32 commits to the CXL and DAX subsystems:
| Category | Commits |
|---|---|
| New Features & Hardware | 1 |
| Bug Fixes | 6 |
| Refactoring & Cleanup | 3 |
| Other | 22 |
The v6.17 cycle for CXL and DAX is a consolidation release rather than a feature-heavy one, with 32 commits that reflect the subsystem maturing around correctness, specification compliance, and architectural hygiene. The most visible theme is alignment with CXL specification revision 3.2: the Common Event Record has been updated to match the new spec, the Memory Sparing Event Record gains kernel tracing support for the first time, and additional validity checks land for corrected volatile memory error (CVME) counts in both DRAM and General Media Event Records. This work strengthens the kernel’s ability to correctly interpret and surface CXL RAS events to userspace tooling and monitoring infrastructure.
A quieter but structurally important change is the removal of core/acpi.c and the CXL core’s direct dependency on ACPI. This decoupling makes the CXL core more portable and easier to reason about — the ACPI glue now lives where it belongs rather than being tangled into the driver core. Alongside this, the node-notifier migration replaces the older memory-notifier pattern, bringing CXL memory hotplug handling in line with current kernel conventions for NUMA-aware memory event signaling.
Locking correctness receives explicit attention this cycle: both the conditional rwsem locking paths and the poison list mutex are converted to use ACQUIRE() semantics, ensuring proper memory ordering on architectures where weak ordering would otherwise permit reordering across these critical sections. Several targeted bug fixes round out the release, addressing a typo in the MCE notifier registration, an ERR_PTR vs NULL confusion in region handling, wrong DPA bounds checking for PPR operations in the EDAC path, and a format specifier mismatch for u32 values.
Key Changes
CXL Spec 3.2 Event Record Compliance: The Common Event Record structure is updated to match CXL spec rev 3.2, and validity checks are added for CVME counts in both DRAM and General Media Event Records, ensuring the kernel correctly handles fields that older firmware may leave unset.
Memory Sparing Event Record Tracing: Kernel tracepoints are added for the CXL Memory Sparing Event Record, making sparing operations visible through the standard
trace_eventinfrastructure — essential for diagnosing DRAM sparing activity on CXL memory devices in production.ACQUIRE() Locking Semantics: Conditional
rwsemacquisition paths and the poison list mutex are converted to use explicitACQUIRE()ordering, fixing potential memory ordering hazards on weakly-ordered architectures without adding unnecessary full barriers.ACPI Dependency Removal from CXL Core:
core/acpi.cis removed and the CXL core’s direct compile-time dependency onCONFIG_ACPIis eliminated, making the subsystem cleaner to build in non-ACPI environments and reducing coupling between platform firmware abstractions and driver internals.Node-Notifier Migration: CXL switches from the legacy memory-notifier to the node-notifier interface for memory hotplug events, aligning with current kernel practice for NUMA-aware memory device management.
cxl_resource_contains_addr()Helper: A new helper function centralizes address-in-resource containment checks, replacing open-coded comparisons across the driver with a single, testable predicate — immediately used in the region probing path.EDAC PPR DPA Fix: Incorrect DPA bounds checking in the EDAC path for Post Package Repair operations is corrected, preventing the driver from operating on wrong address ranges during repair sequences — a silent correctness bug with potential data integrity implications.
Region Commit/Detach Consolidation:
cxl_decoder_kill_region()andcxl_region_detach()are merged into a single code path, eliminating duplicated teardown logic that was a maintenance hazard and a source of subtle divergence between the two flows.
CXL related changes from Kernel v6.16 to v6.17
Here is the detailed list of all commits merged into the 6.17 Kernel for CXL and DAX. This list was generated by the Linux Kernel CXL Feature Tracker .
- Merge tag ‘mm-nonmm-stable-2025-08-03-12-47’ of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
- cxl: mce: fix typo “notifer”
- Merge tag ‘cxl-for-6.17’ of git://git.kernel.org/pub/scm/linux/kernel/git/cxl/cxl
- Merge tag ‘mm-stable-2025-07-30-15-25’ of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
- Merge tag ’libnvdimm-for-6.17’ of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
- Merge tag ‘driver-core-6.17-rc1’ of git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core
- Merge branch ‘for-6.17/cxl-events-updates’ into cxl-for-next
- cxl/region: Fix an ERR_PTR() vs NULL bug
- cxl/events: Trace Memory Sparing Event Record
- cxl/events: Add extra validity checks for CVME count in DRAM Event Record
- cxl/events: Add extra validity checks for corrected memory error count in General Media Event Record
- cxl/events: Update Common Event Record to CXL spec rev 3.2
- cxl: Fix -Werror=return-type in cxl_decoder_detach()
- Merge branch ‘for-6.17/cxl-acquire’ into cxl-for-next
- cxl: Convert to ACQUIRE() for conditional rwsem locking
- cxl/region: Consolidate cxl_decoder_kill_region() and cxl_region_detach()
- cxl/region: Move ready-to-probe state check to a helper
- cxl/region: Split commit_store() into __commit() and queue_reset() helpers
- cxl/decoder: Drop pointless locking
- cxl/decoder: Move decoder register programming to a helper
- cxl/mbox: Convert poison list mutex to ACQUIRE()
- cxl: Remove core/acpi.c and cxl core dependency on ACPI
- drivers,cxl: use node-notifier instead of memory-notifier
- cxl/core: Using cxl_resource_contains_addr() to check address availability
- cxl/edac: Fix wrong dpa checking for PPR operation
- cxl/core: Introduce a new helper cxl_resource_contains_addr()
- cxl: Include range.h in cxl.h
- cxl: make cxl_bus_type constant
- cxl/edac: Use correct format specifier for u32 val
- cxl/pci: Replace mutex_lock_io() w mutex_lock() for mailbox access
- sysfs: treewide: switch back to attribute_group::bin_attrs
- mm: remove callers of pfn_t functionality


