[PATCH V6 0/2] daxctl: Add support for famfs mode

From: John Groves

Date: Tue May 26 2026 - 13:05:35 EST


From: John Groves <john@xxxxxxxxxx>

This series adds famfs mode support to daxctl, alongside the existing
devdax and system-ram modes. A daxdev is in famfs mode when it is bound
to fsdev_dax.ko (drivers/dax/fsdev.c). famfs is a shared,
memory-mappable filesystem for disaggregated and CXL memory; see
https://famfs.org for more information.

Patch 1 adds the library plumbing: mode detection helpers, an enable
function, and the device.c reconfigure-device wiring. Patch 2 adds a test
that exercises mode transitions on the nfit_test emulated backend.

This series depends on the fsdev_dax kernel driver (which provides famfs
mode) and on the famfs kernel patch series.

Changes since V5 (addressing Alison's review):

Patch 1 (daxctl: Add support for famfs mode):
- Commit message: add an intro paragraph describing what famfs is, with a
link to https://famfs.org.
- Documentation: document famfs mode in
Documentation/daxctl/daxctl-reconfigure-device.txt (DESCRIPTION, the
-m/--mode option list, and a reconfigure example).
- Rename the local 'enum dev_mode' to 'enum reconfig_mode'
(RECONFIG_MODE_*) so it no longer shares member names with
enum daxctl_dev_mode.
- Add daxctl_dev_get_mode(), which reports a device's current mode; the
three reconfig_mode_*() functions and json.c now switch on it instead
of repeating an if-else mode chain. enum daxctl_dev_mode moves to the
public header and gains a DAXCTL_DEV_MODE_UNKNOWN sentinel;
daxctl_dev_get_mode() is exported.
- Collapse disable_devdax_device() and disable_famfs_device() into a
single disable_mode_device() (the caller has already matched the mode).
- Add daxctl_dev_is_system_ram_mode() as the preferred name for the
consistency with daxctl_dev_is_{famfs,devdax}_mode();
daxctl_dev_is_system_ram_capable() becomes a compatibility wrapper so
the existing ABI is preserved.
- Move the "returns false for a disabled device" note onto the shared
daxctl_dev_bound_to_module() helper and drop the redundant per-predicate
comments.
- Fix daxctl_dev_enable() to range-check mode before indexing
dax_modules[]; the lookup previously ran before the bounds check.
- Remove the stray double space in the --mode=famfs parse branch.
- Drop the Reviewed-by: Dave Jiang tag, given the amount of rework since
V5.

Patch 2 (test):
- Replace the V5 device-scanning test with test/daxctl-famfs-nfit.sh, which
builds its own dax device from the emulated ACPI.NFIT bus (nfit_test) so
it runs in the ndctl unit-test model. Real DRAM backing means kmem
onlining works and the full devdax/famfs/system-ram matrix runs
end-to-end, including the system-ram -> famfs rejection. Follows the
existing test style (set -x logging, err/cleanup traps, check_dmesg,
fixture teardown). Based on a rewrite from Alison Schofield.
- Per Alison's "pick a lane to start" feedback, only the nfit_test backend
is upstreamed here; a cxl_test-backed variant is held for a later
revision.

John Groves (2):
daxctl: Add support for famfs mode
Add nfit_test famfs mode-transition test

.../daxctl/daxctl-reconfigure-device.txt | 22 +-
daxctl/device.c | 113 ++++++---
daxctl/json.c | 18 +-
daxctl/lib/libdaxctl-private.h | 9 +-
daxctl/lib/libdaxctl.c | 73 +++++-
daxctl/lib/libdaxctl.sym | 9 +
daxctl/libdaxctl.h | 14 ++
test/daxctl-famfs-nfit.sh | 215 ++++++++++++++++++
test/meson.build | 2 +
9 files changed, 432 insertions(+), 43 deletions(-)
create mode 100755 test/daxctl-famfs-nfit.sh

--
2.53.0