[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <439928219.101768297204618.JavaMail.epsvc@epcpadp1new>
Date: Tue, 13 Jan 2026 15:07:49 +0530
From: Neeraj Kumar <s.neeraj@...sung.com>
To: Gregory Price <gourry@...rry.net>
Cc: linux-cxl@...r.kernel.org, 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, gost.dev@...sung.com,
neeraj.kernel@...il.com, cpgs@...sung.com
Subject: Re: [PATCH 0/6] CXL: Introduce memory controller abstraction and
sysram controller
On 12/01/26 11:35AM, Gregory Price wrote:
>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
>
Hi Gregory,
I am facing compilation issue with this series using CONFIG_CXL_BUS=m
{{{
AR drivers/built-in.a
AR built-in.a
AR vmlinux.a
LD vmlinux.o
MODPOST Module.symvers
ERROR: modpost: "device_offline" [drivers/cxl/core/cxl_core.ko] undefined!
ERROR: modpost: "lock_device_hotplug_sysfs" [drivers/cxl/core/cxl_core.ko] undefined!
ERROR: modpost: "unlock_device_hotplug" [drivers/cxl/core/cxl_core.ko] undefined!
ERROR: modpost: "device_online" [drivers/cxl/core/cxl_core.ko] undefined!
ERROR: modpost: "walk_memory_blocks" [drivers/cxl/core/cxl_core.ko] undefined!
make[2]: *** [scripts/Makefile.modpost:147: Module.symvers] Error 1
make[1]: *** [/mnt/ssd1/neeraj/dcd/cxl_env/cxl-linux-mainline/Makefile:2004: modpost] Error 2
make: *** [Makefile:248: __sub-make] Error 2
}}}
Above routines are not EXPORT_SYMBOL_GPL(), thats why with
"CONFIG_CXL_BUS=m" its breaking.
After adding following EXPORT_SYMBOL_GPL() below their respective
routines. This issue is fixed.
{{{
EXPORT_SYMBOL_GPL(unlock_device_hotplug);
EXPORT_SYMBOL_GPL(lock_device_hotplug_sysfs);
EXPORT_SYMBOL_GPL(device_offline);
EXPORT_SYMBOL_GPL(device_online);
EXPORT_SYMBOL_GPL(walk_memory_blocks);
}}}
Can you please have a look?
Regards,
Neeraj
Powered by blists - more mailing lists