[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260112163514.2551809-1-gourry@gourry.net>
Date: Mon, 12 Jan 2026 11:35:08 -0500
From: Gregory Price <gourry@...rry.net>
To: linux-cxl@...r.kernel.org
Cc: linux-kernel@...r.kernel.org,
kernel-team@...a.com,
dave@...olabs.net,
jonathan.cameron@...wei.com,
dave.jiang@...el.com,
alison.schofield@...el.com,
vishal.l.verma@...el.com,
ira.weiny@...el.com,
dan.j.williams@...el.com
Subject: [PATCH 0/6] CXL: Introduce memory controller abstraction and sysram controller
The CXL driver currently hands policy management over to the DAX
subsystem for sysram regions. This makes building policy around
entire regions clunky and at times difficult - for example, requiring
multiple actions to reliably offline and hot-unplug memory.
This series introduces a memory controller abstraction for CXL regions
and adds a "sysram" controller that directly hotplugs memory without
needing to route through DAX. This simplifies the sysram use case
considerably.
This also prepares for future use cases which may require different
memory controller logic (such as private numa nodes).
We organize the controllers into core/memctrl/*_region.c files.
The series is organized as follows:
Patch 1 introduces the cxl_memctrl_mode enum and region->memctrl field,
allowing regions to be switched between different memory controllers.
The supported modes are NONE, AUTO, and DAX initially. Auto-created
regions default to AUTO, while manually created regions default to NONE
(requiring explicit controller selection).
Patch 2 adds the sysram_region memory controller, which provides direct
memory hotplug without DAX intermediation. New sysfs controls are
exposed under region/memctrl/:
- hotplug: trigger memory hotplug
- hotunplug: offline and hotunplug memory
- state: online/online_normal/offline
Patch 3 refactors existing pmem memctrl logic out of region.c into the
new memctrl/pmem_region.c, simplifying controller selection in region
probe.
Patch 4 adds CONFIG_CXL_REGION_CTRL_AUTO_* options, allowing users to
configure auto-regions to default to SYSRAM instead of DAX for existing
simple system configurations (i.e. local memory expansion only).
Patch 5 adds CONFIG_CXL_REGION_SYSRAM_DEFAULT_* options to control the
default state of sysram blocks (OFFLINE, ONLINE/ZONE_MOVABLE, or
ONLINE_NORMAL/ZONE_NORMAL). This provides an alternative to the global
MHP auto-online setting which may cause issues with other devices.
Online defaults to ZONE_MOVABLE to defend hot-unplug by default.
This is the opposite of memory blocks "online" and "online_movable".
Patch 6 adds a memory_notify callback that prevents memory blocks from
being onlined into ZONE_NORMAL when the controller state is set to
ZONE_MOVABLE. This protects against administrators accidentally
breaking hot-unpluggability by writing "offline" then "online" to the
memory block sysfs.
Gregory Price (6):
drivers/cxl: add cxl_memctrl_mode and region->memctrl
cxl: add sysram_region memory controller
cxl/core/region: move pmem memctrl logic into memctrl/pmem_region
cxl: add CONFIG_CXL_REGION_CTRL_AUTO_* build config options
cxl: add CXL_REGION_SYSRAM_DEFAULT_* build options
cxl/sysram: disallow onlining in ZONE_NORMAL if state is movable only
drivers/cxl/Kconfig | 72 ++++
drivers/cxl/core/Makefile | 1 +
drivers/cxl/core/core.h | 5 +
drivers/cxl/core/memctrl/Makefile | 6 +
drivers/cxl/core/memctrl/dax_region.c | 79 ++++
drivers/cxl/core/memctrl/memctrl.c | 48 +++
drivers/cxl/core/memctrl/pmem_region.c | 191 +++++++++
drivers/cxl/core/memctrl/sysram_region.c | 520 +++++++++++++++++++++++
drivers/cxl/core/region.c | 358 ++++------------
drivers/cxl/cxl.h | 18 +
10 files changed, 1013 insertions(+), 285 deletions(-)
create mode 100644 drivers/cxl/core/memctrl/Makefile
create mode 100644 drivers/cxl/core/memctrl/dax_region.c
create mode 100644 drivers/cxl/core/memctrl/memctrl.c
create mode 100644 drivers/cxl/core/memctrl/pmem_region.c
create mode 100644 drivers/cxl/core/memctrl/sysram_region.c
--
2.52.0
Powered by blists - more mailing lists