
Linux Kernel v7.1 is Released: This is What's New for Compute Express Link (CXL)
- Steve Scargall
- Cxl
- June 14, 2026
The Linux Kernel v7.1 release brings several improvements and additions related to Compute Express Link (CXL) technology.
Release Highlights
Linux Kernel v7.1 includes 47 commits to the CXL and DAX subsystems:
| Category | Commits |
|---|---|
| New Features & Hardware | 1 |
| Bug Fixes | 5 |
| Refactoring & Cleanup | 5 |
| Testing | 1 |
| Other | 35 |
The v7.1 CXL/DAX cycle is defined by three interlocking themes: laying the groundwork for Type 2 accelerator support, hardening the DAX/HMEM subsystem against a cluster of correctness bugs, and a focused refactoring of the region layer that splits a monolithic file into purpose-specific translation units. None of these is a headline splash feature on its own, but together they represent the kind of steady, unglamorous investment that makes the subsystem reliable enough to build production systems on.
Type 2 support — CXL devices that expose accelerator-attached memory rather than pure memory expanders — takes a significant step forward. Internal structures previously locked inside cxl_pci are now exported so that out-of-tree and in-tree Type 2 drivers can bind against them, and cxl_dev_state initialization now accounts for the Type 2 device class from the start. Alongside this, generic PCI utility code migrates from cxl_pci into core/cxl_pci, giving both the core and Type 2 drivers a shared, stable foundation without duplication.
On the DAX/HMEM side, this release resolves a longstanding ambiguity around Soft Reserved memory ownership — the question of whether a given ACPI-advertised memory range belongs to CXL region management or to the legacy dax_hmem driver. A new containment helper in cxl/region allows that decision to be deferred and resolved cleanly at driver bind time rather than at boot, eliminating a class of singleton confusion bugs and fixing a dependency ordering issue between dax/cxl and dax/hmem that could cause incorrect initialization ordering in multi-device configurations.
Key Changes
Type 2 accelerator device support: Internal CXL structs are now exported to allow external Type 2 drivers to participate in the CXL stack, and
cxl_dev_stateinitialization correctly identifies Type 2 devices. This is a prerequisite for CXL-attached accelerators (GPUs, FPGAs, smart NICs) to interoperate with the kernel’s memory management and RAS infrastructure.32-switch decoder support:
cxl/hdmnow supports up to 32 switch-level decoders, up from the previous limit. This matters for large fabric topologies — multi-host CXL switches in disaggregated memory configurations — where the old cap became a real constraint.Soft Reserved ownership resolution: A new helper checks whether a Soft Reserved EFI memory range is already covered by a CXL region, and
dax_hmemdefers claiming those ranges until CXL binding has had a chance to run. This eliminates a race wheredax_hmemcould steal memory that the CXL region driver was entitled to manage.Region lock status sysfs interface: A new sysfs attribute exposes whether a CXL region is locked, giving userspace tools (and udev rules) a reliable, race-free way to query region state without parsing kernel log output.
Region code split into
region_dax.candregion_pmem.c: The DAX and PMEM region driver logic is extracted from a single sprawling file into two focused translation units. This is maintenance work, but it reduces the cognitive overhead for contributors working on only one media type and makes future specialization easier.PCI reset decoder flag clearing: When a
cxl_memdevundergoes a PCI-level reset, endpoint decoder flags are now explicitly cleared. Without this, stale flag state could cause the driver to misinterpret post-reset device status, leading to incorrect region assembly or missed error events.Use-after-free fix in region auto assembly: A reference-counting bug in the region auto-assembly failure path could cause a freed region object to be accessed during cleanup. The fix ensures teardown ordering is correct and is a straightforward but important memory safety correction.
fsdev_dax_zero_page_range()uninitialized kaddr fix: A missing initialization in the DAX filesystem zero-page path leftkaddrundefined under certain conditions, producing unpredictable behavior when zeroing page ranges through a DAX-mapped filesystem. The fix initializeskaddrunconditionally before use.
CXL related changes from Kernel v7.0 to v7.1
Here is the detailed list of all commits merged into the 7.1 Kernel for CXL and DAX. This list was generated by the Linux Kernel CXL Feature Tracker .
- Merge tag ‘cxl-for-7.1’ of git://git.kernel.org/pub/scm/linux/kernel/git/cxl/cxl
- Merge branch ‘for-7.1/cxl-misc’ into cxl-for-next
- cxl/hdm: Add support for 32 switch decoders
- Merge branch ‘for-7.1/cxl-region-refactor’ into cxl-for-next
- Merge branch ‘for-7.1/dax-hmem’ into cxl-for-next
- Merge branch ‘for-7.1/cxl-type2-support’ into cxl-for-next
- Merge branch ‘for-7.1/cxl-consolidate-endpoint’ into cxl-for-next
- cxl/region: Add a region sysfs interface for region lock status
- cxl/region: Constify cxl_region_resource_contains()
- cxl/region: Limit visibility of cxl_region_contains_resource()
- cxl/region: Fix use-after-free from auto assembly failure
- cxl/core: Check existence of cxl_memdev_state in poison test
- cxl/core: use cleanup.h for devm_cxl_add_dax_region
- cxl/core/region: move dax region device logic into region_dax.c
- cxl/core/region: move pmem region driver logic into region_pmem.c
- cxl/region: Add helper to check Soft Reserved containment by CXL regions
- cxl: Add endpoint decoder flags clear when PCI reset happens
- cxl/pci: Check memdev driver binding status in cxl_reset_done()
- cxl/pci: Hold memdev lock in cxl_event_trace_record()
- cxl/region: Factor out interleave granularity setup
- cxl/region: Factor out interleave ways setup
- cxl: Make region type based on endpoint type
- cxl/pci: Remove redundant cxl_pci_find_port() call
- cxl: Move pci generic code from cxl_pci to core/cxl_pci
- cxl: export internal structs for external Type2 drivers
- cxl: support Type2 when initializing cxl_dev_state
- Merge tag ’libnvdimm-for-7.1’ of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
- dax/fsdev: fix uninitialized kaddr in fsdev_dax_zero_page_range()
- mm: rename VMA flag helpers to be more readable
- dax/hmem: Parent dax_hmem devices
- dax/hmem: Fix singleton confusion between dax_hmem_work and hmem devices
- dax/hmem: Reduce visibility of dax_cxl coordination symbols
- dax/cxl: Fix HMEM dependencies
- dax: export dax_dev_get()
- dax: Add fs_dax_get() func to prepare dax for fs-dax usage
- dax: Add dax_set_ops() for setting dax_operations at bind time
- dax: Add dax_operations for use by fs-dax on fsdev dax
- dax: Save the kva from memremap
- dax: add fsdev.c driver for fs-dax on character dax
- dax: move dax_pgoff_to_phys from [drivers/dax/] device.c to bus.c
- dax/hmem, cxl: Defer and resolve Soft Reserved ownership
- dax: Track all dax_region allocations under a global resource tree
- dax/cxl, hmem: Initialize hmem early and defer dax_cxl binding
- dax/hmem: Gate Soft Reserved deferral on DEV_DAX_CXL
- dax/hmem: Request cxl_acpi and cxl_pci before walking Soft Reserved ranges
- dax/hmem: Factor HMEM registration into __hmem_register_device()
- dax/bus: Use dax_region_put() in alloc_dax_region() error path


