mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-01 06:39:05 +00:00

Add documentation on how the CXL driver interacts with the DAX driver. Signed-off-by: Gregory Price <gourry@gourry.net> Link: https://patch.msgid.link/20250512162134.3596150-12-gourry@gourry.net Signed-off-by: Dave Jiang <dave.jiang@intel.com>
44 lines
1.8 KiB
ReStructuredText
44 lines
1.8 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
====================
|
|
DAX Driver Operation
|
|
====================
|
|
The `Direct Access Device` driver was originally designed to provide a
|
|
memory-like access mechanism to memory-like block-devices. It was
|
|
extended to support CXL Memory Devices, which provide user-configured
|
|
memory devices.
|
|
|
|
The CXL subsystem depends on the DAX subsystem to either:
|
|
|
|
- Generate a file-like interface to userland via :code:`/dev/daxN.Y`, or
|
|
- Engage the memory-hotplug interface to add CXL memory to page allocator.
|
|
|
|
The DAX subsystem exposes this ability through the `cxl_dax_region` driver.
|
|
A `dax_region` provides the translation between a CXL `memory_region` and
|
|
a `DAX Device`.
|
|
|
|
DAX Device
|
|
==========
|
|
A `DAX Device` is a file-like interface exposed in :code:`/dev/daxN.Y`. A
|
|
memory region exposed via dax device can be accessed via userland software
|
|
via the :code:`mmap()` system-call. The result is direct mappings to the
|
|
CXL capacity in the task's page tables.
|
|
|
|
Users wishing to manually handle allocation of CXL memory should use this
|
|
interface.
|
|
|
|
kmem conversion
|
|
===============
|
|
The :code:`dax_kmem` driver converts a `DAX Device` into a series of `hotplug
|
|
memory blocks` managed by :code:`kernel/memory-hotplug.c`. This capacity
|
|
will be exposed to the kernel page allocator in the user-selected memory
|
|
zone.
|
|
|
|
The :code:`memmap_on_memory` setting (both global and DAX device local)
|
|
dictates where the kernell will allocate the :code:`struct folio` descriptors
|
|
for this memory will come from. If :code:`memmap_on_memory` is set, memory
|
|
hotplug will set aside a portion of the memory block capacity to allocate
|
|
folios. If unset, the memory is allocated via a normal :code:`GFP_KERNEL`
|
|
allocation - and as a result will most likely land on the local NUM node of the
|
|
CPU executing the hotplug operation.
|