Changes in v5:
 - device.c: correctly set loglevel for daxctl_ctx for --verbose
 - drop the subsys caching, its complexity started to exceed its
   benefit. dax-class device models will simply error out during
   reconfigure. (Dan)
 - Add a note to the man page for the above.
 - Clarify the onlining policy (online_movable) in the man page
 - rename "numa_node" to "target_node" in device listings (Dan)
 - When printing a device 'mode', assume devdax if !system-ram,
   avoiding a "mode: unknown" situation which can be confusing. (Dan)
 - Add a "state: disabled" attribute to the device listing if a driver
   is not bound. This is more apt than the previous "mode: unknown"
   listing.
 - add an api to get 'dev->resource' parsing /proc/iomem as a
   fallback for when the kernel doesn't provide the attribute (Dan)
 - convert node_* apis to 'memory_* apis that act on a new daxctl_memory
   object (Dan)
 - online only memory sections belonging to the device in question by
   cross referencing block indices with the dax device resource (Dan)
 - Refuse to reconfigure a device that is already in the target mode.
   Until now, reconfiguring a system-ram device back to system-ram would
   result in a 'online memory may not be hot-removed' kernel warning.
 - If the device was already in the system-ram mode, skip
   disabling/enabling, but still try to online the memory unless the
   --no-online option is in effect.
 - In daxctl_unbind, also 'remove_id' to prevent devices automatically
   binding to the kmem driver on a disable + re-enable, which can be
   surprising (Dan).
 - Rewrite the top half of daxctl/device.c to borrow elements from
   ndctl/namespace.c so that it can support growing additional commands
   that operate on devices (online-memory and offline-memory)
 - Refactor the bottom half of daxctl/device.c so we only do the
   disabling/offlining steps if the device was enabled.
 - Add new commands to online and offline memory sections (Dan)
   associated with a given dax device (Dan)
 - Add a new test - daxctl-device.sh - to test daxctl reconfigure-device,
   online-memory, and offline-memory commands.
 - Add an example in documentation demonstrating how to use numactl
   to bind a process to a node surfaced from a dax device (Andy Rudoff)

Changes in v4:
 - Don't fail add_dax_dev for kmod failures. Instead fail only when the kmod
   list is actually used, i.e. during daxctl-reconfigure-device

Changes in v3:
 - In daxctl_dev_get_mode(), remove the subsystem warning, detect dax-class
   and simply make it return devdax

Changes in v2:
 - Add examples to the documentation page (Dave Hansen)
 - Clarify documentation regarding the conversion from system-ram to devdax
 - Remove any references to a persistent config from the documentation -
   those can be added when the feature is added.
 - device.c: validate option compatibility
 - daxctl-list: display numa_node for device listings
 - daxctl-list: display mode for device listings
 - make the options more consistent by adding a '-O' short option
   for --attempt-offline

Add a new daxctl-reconfigure-device command that lets us reconfigure DAX
devices back and forth between 'system-ram' and 'device-dax' modes. It
also includes facilities to online any newly hot-plugged memory
(default), and attempt to offline memory before converting away from the
system-ram mode (not default, requires a --attempt-offline option).

Currently missing from this series is a way to persistently store which
devices have been 'marked' for use as system-ram. This depends on a
config system overhaul in ndctl, and patches for those will follow
separately and are independent of this work.

Example invocations:

1. Reconfigure dax0.0 to system-ram mode, don’t online the memory
    # daxctl reconfigure-device --mode=system-ram --no-online dax0.0
    [
      {
        "chardev":"dax0.0",
        "size":16777216000,
        "target_node":2,
        "mode":"system-ram"
      }
    ]

2. Reconfigure dax0.0 to devdax mode, attempt to offline the memory
    # daxctl reconfigure-device --human --mode=devdax --attempt-offline dax0.0
    {
      "chardev":"dax0.0",
      "size":"15.63 GiB (16.78 GB)",
      "target_node":2,
      "mode":"devdax"
    }

3. Reconfigure all dax devices on region0 to system-ram mode
    # daxctl reconfigure-device --mode=system-ram --region=0 all
    [
      {
        "chardev":"dax0.0",
        "size":16777216000,
        "target_node":2,
        "mode":"system-ram"
      },
      {
        "chardev":"dax0.1",
        "size":16777216000,
        "target_node":3,
        "mode":"system-ram"
      }
    ]

These patches can also be found in the 'kmem-pending' branch on github:
https://github.com/pmem/ndctl/tree/kmem-pending

Cc: Dan Williams <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Pavel Tatashin <[email protected]>


Vishal Verma (13):
  libdaxctl: add interfaces to get ctx and check device state
  libdaxctl: add interfaces to enable/disable devices
  libdaxctl: add an interface to retrieve the device resource
  libdaxctl: add a 'daxctl_memory' object for memory based operations
  daxctl/list: add target_node for device listings
  libdaxctl: add an interface to get the mode for a dax device
  daxctl: add a new reconfigure-device command
  Documentation/daxctl: add a man page for daxctl-reconfigure-device
  daxctl: add commands to online and offline memory
  Documentation: Add man pages for daxctl-{on,off}line-memory
  contrib/ndctl: fix region-id completions for daxctl
  contrib/ndctl: add bash-completion for the new daxctl commands
  test: Add a unit test for daxctl-reconfigure-device and friends

 Documentation/daxctl/Makefile.am              |   5 +-
 .../daxctl/daxctl-offline-memory.txt          |  72 ++
 Documentation/daxctl/daxctl-online-memory.txt |  80 +++
 .../daxctl/daxctl-reconfigure-device.txt      | 139 ++++
 Makefile.am                                   |   3 +-
 contrib/ndctl                                 |  38 +-
 daxctl/Makefile.am                            |   2 +
 daxctl/builtin.h                              |   3 +
 daxctl/daxctl.c                               |   3 +
 daxctl/device.c                               | 484 +++++++++++++
 daxctl/lib/Makefile.am                        |   5 +-
 daxctl/lib/libdaxctl-private.h                |  30 +
 daxctl/lib/libdaxctl.c                        | 646 ++++++++++++++++++
 daxctl/lib/libdaxctl.sym                      |  19 +
 daxctl/libdaxctl.h                            |  23 +
 test/Makefile.am                              |   3 +-
 test/common                                   |  19 +-
 test/daxctl-devices.sh                        |  81 +++
 util/iomem.c                                  |  37 +
 util/iomem.h                                  |  12 +
 util/json.c                                   |  25 +
 21 files changed, 1715 insertions(+), 14 deletions(-)
 create mode 100644 Documentation/daxctl/daxctl-offline-memory.txt
 create mode 100644 Documentation/daxctl/daxctl-online-memory.txt
 create mode 100644 Documentation/daxctl/daxctl-reconfigure-device.txt
 create mode 100644 daxctl/device.c
 create mode 100755 test/daxctl-devices.sh
 create mode 100644 util/iomem.c
 create mode 100644 util/iomem.h

-- 
2.20.1

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to