[PATCH 0/9] cxl: explicit DAX driver selection and hotplug

Gregory Price
2026-01-29T21:04:49Z

Currently, CXL regions that create DAX devices have no mechanism to
control select the hotplug online policy for kmem regions at region
creation time. Users must either rely on a build-time default or
manually configure each memory block after hotplug occurs.

Additionally, there is no explicit way to choose between device_dax
and dax_kmem modes at region creation time - regions default to kmem.

This series addresses both issues by:

1. Plumbing an online_type parameter through the memory hotplug path,
from mm/memory_hotplug through the DAX layer, enabling drivers to
specify the desired policy (offline, online, online_movable).

2. Adding infrastructure for explicit dax driver selection (kmem vs
device) when creating CXL DAX regions.

3. Introducing new CXL region drivers that provide a two-stage binding
process with user-configurable policy between region creation and
memory hotplug.

The new drivers are:
- cxl_devdax_region: Creates dax_regions that bind to device_dax driver
- cxl_sysram_region: Creates sysram_region devices with hotplug policy
- cxl_dax_kmem_region: Probes sysram_regions to create kmem dax_regions

The sysram_region device exposes an 'online_type' sysfs attribute
allowing users to configure the memory online type before hotplug:

echo region0 > cxl_sysram_region/bind
echo online_movable > sysram_region0/online_type
echo sysram_region0 > cxl_dax_kmem_region/bind

This enables explicit control over both the dax driver mode and the
memory hotplug policy for CXL memory regions.

In the future, with DCD regions, this will also provide a policy step
which dictates how extents will be surfaces and managed (e.g. if the
dc region is bound to the sysram driver, it will surface as system
memory, while the devdax driver will surface extents as new devdax).

Gregory Price (9):
mm/memory_hotplug: pass online_type to online_memory_block() via arg
mm/memory_hotplug: add __add_memory_driver_managed() with online_type
arg
dax: plumb online_type from dax_kmem creators to hotplug
drivers/cxl,dax: add dax driver mode selection for dax regions
cxl/core/region: move pmem region driver logic into pmem_region
cxl/core/region: move dax region device logic into dax_region.c
cxl/core: add cxl_devdax_region driver for explicit userland region
binding
cxl/core: Add dax_kmem_region and sysram_region drivers
Documentation/driver-api/cxl: add dax and sysram driver documentation

Documentation/ABI/testing/sysfs-bus-cxl | 21 ++
.../driver-api/cxl/linux/cxl-driver.rst | 43 +++
.../driver-api/cxl/linux/dax-driver.rst | 29 ++
drivers/cxl/core/Makefile | 3 +
drivers/cxl/core/core.h | 11 +
drivers/cxl/core/dax_region.c | 179 ++++++++++
drivers/cxl/core/pmem_region.c | 191 +++++++++++
drivers/cxl/core/port.c | 2 +
drivers/cxl/core/region.c | 321 ++----------------
drivers/cxl/core/sysram_region.c | 180 ++++++++++
drivers/cxl/cxl.h | 29 ++
drivers/dax/bus.c | 3 +
drivers/dax/bus.h | 7 +-
drivers/dax/cxl.c | 7 +-
drivers/dax/dax-private.h | 2 +
drivers/dax/hmem/hmem.c | 2 +
drivers/dax/kmem.c | 13 +-
drivers/dax/pmem.c | 2 +
include/linux/dax.h | 5 +
include/linux/memory_hotplug.h | 3 +
mm/memory_hotplug.c | 95 ++++--
21 files changed, 826 insertions(+), 322 deletions(-)
create mode 100644 drivers/cxl/core/dax_region.c
create mode 100644 drivers/cxl/core/pmem_region.c
create mode 100644 drivers/cxl/core/sysram_region.c

--
2.52.0