> For the complete documentation index, see [llms.txt](https://docs.pmem.io/ndctl-user-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pmem.io/ndctl-user-guide/v72.0/master.md).

# NDCTL User Guide

## Introduction

`ndctl` is a utility for managing the Linux LIBNVDIMM Kernel subsystem. It is designed to work with various non-volatile memory devices (NVDIMMs) from different vendors. The LIBNVDIMM subsystem defines a kernel device model and control message interface for platform NVDIMM resources like those defined by the [ACPI v6.0](http://www.uefi.org/sites/default/files/resources/ACPI_6_0_Errata_A.PDF) NFIT (**N**VDIMM **F**irmware **I**nterface **T**able). The latest [ACPI ](http://www.uefi.org/specifications)and [UEFI ](http://www.uefi.org/specifications)specifications can be found at [uefi.org](http://www.uefi.org). Operations supported by `ndctl` include:

* Provisioning capacity (namespaces)
* Enumerating Devices
* Enabling and Disabling NVDIMMs, Regions, and Namespaces
* Managing NVDIMM Labels

## What's new in v72.0

This release incorporates functionality up to the 5.16 kernel.

Highlights include a new utility and library for interfacing with the 'CXL' drivers and devices, a policy based configuration mechanism for ndctl and daxctl, fixes, test updates, and general additions for the PAPR family of NVDIMMs, more seed device accounting fixes, misc unit test and documentation updates, and fixes to NVDIMM bus scrubbing.

Commands:&#x20;

* cxl-cli: new utility providing list, {read,write,zero}-label commands&#x20;
* daxctl-reconfigure-device: new --check-config option&#x20;
* ndctl-monitor: add support for a new unified config file format&#x20;
* ndctl-\*-namespace: seed namespace accounting fixes

Tests:&#x20;

* Fix device-dax mremap() test&#x20;
* Exercise soft\_offline\_page() corner cases&#x20;
* Fix btt expect table compile warning&#x20;
* monitor.sh: add checking the presence of jq command ahead of time

APIs:&#x20;

* ndctl\_bus\_nfit\_translate\_spa&#x20;
* ndctl\_dimm\_sizeof\_namespace\_index&#x20;
* ndctl\_get\_config\_path&#x20;
* ndctl\_set\_config\_path&#x20;
* daxctl\_dev\_has\_online\_memory&#x20;
* daxctl\_dev\_will\_auto\_online\_memory&#x20;
* daxctl\_get\_config\_path&#x20;
* daxctl\_set\_config\_path&#x20;
* cxl\_cmd\_get\_devname
* cxl\_cmd\_get\_mbox\_status&#x20;
* cxl\_cmd\_get\_out\_size&#x20;
* cxl\_cmd\_health\_info\_get\_dirty\_shutdowns
* cxl\_cmd\_health\_info\_get\_ext\_corrected\_persistent\_normal
* cxl\_cmd\_health\_info\_get\_ext\_corrected\_persistent\_warning
* cxl\_cmd\_health\_info\_get\_ext\_corrected\_volatile\_normal
* cxl\_cmd\_health\_info\_get\_ext\_corrected\_volatile\_warning
* cxl\_cmd\_health\_info\_get\_ext\_life\_used\_critical&#x20;
* cxl\_cmd\_health\_info\_get\_ext\_life\_used\_normal
* cxl\_cmd\_health\_info\_get\_ext\_life\_used\_warning
* cxl\_cmd\_health\_info\_get\_ext\_temperature\_critical
* cxl\_cmd\_health\_info\_get\_ext\_temperature\_normal
* cxl\_cmd\_health\_info\_get\_ext\_temperature\_warning
* cxl\_cmd\_health\_info\_get\_hw\_replacement\_needed
* cxl\_cmd\_health\_info\_get\_life\_used
* cxl\_cmd\_health\_info\_get\_maintenance\_needed
* cxl\_cmd\_health\_info\_get\_media\_data\_loss\_imminent
* cxl\_cmd\_health\_info\_get\_media\_data\_lost
* cxl\_cmd\_health\_info\_get\_media\_normal
* cxl\_cmd\_health\_info\_get\_media\_not\_ready
* cxl\_cmd\_health\_info\_get\_media\_persistence\_loss\_imminent
* cxl\_cmd\_health\_info\_get\_media\_persistence\_lost
* cxl\_cmd\_health\_info\_get\_media\_powerloss\_data\_loss
* cxl\_cmd\_health\_info\_get\_media\_powerloss\_persistence\_loss
* cxl\_cmd\_health\_info\_get\_media\_shutdown\_data\_loss
* cxl\_cmd\_health\_info\_get\_media\_shutdown\_persistence\_loss
* cxl\_cmd\_health\_info\_get\_performance\_degraded
* cxl\_cmd\_health\_info\_get\_pmem\_errors&#x20;
* cxl\_cmd\_health\_info\_get\_temperature&#x20;
* cxl\_cmd\_health\_info\_get\_volatile\_errors&#x20;
* cxl\_cmd\_identify\_get\_fw\_rev&#x20;
* cxl\_cmd\_identify\_get\_label\_size&#x20;
* cxl\_cmd\_identify\_get\_partition\_align&#x20;
* cxl\_cmd\_new\_get\_health\_info&#x20;
* cxl\_cmd\_new\_identify&#x20;
* cxl\_cmd\_new\_raw&#x20;
* cxl\_cmd\_new\_read\_label cxl\_cmd\_new\_write\_label&#x20;
* cxl\_cmd\_read\_label\_get\_payload&#x20;
* cxl\_cmd\_ref cxl\_cmd\_set\_input\_payload&#x20;
* cxl\_cmd\_set\_output\_payload cxl\_cmd\_submit&#x20;
* cxl\_cmd\_unref cxl\_get\_log\_priority&#x20;
* cxl\_get\_private\_data&#x20;
* cxl\_get\_userdata&#x20;
* cxl\_memdev\_get\_ctx&#x20;
* cxl\_memdev\_get\_devname&#x20;
* cxl\_memdev\_get\_firmware\_verison
* cxl\_memdev\_get\_first&#x20;
* cxl\_memdev\_get\_id&#x20;
* cxl\_memdev\_get\_label\_size&#x20;
* cxl\_memdev\_get\_major&#x20;
* cxl\_memdev\_get\_minor&#x20;
* cxl\_memdev\_get\_next&#x20;
* cxl\_memdev\_get\_pmem\_size
* cxl\_memdev\_get\_ram\_size&#x20;
* cxl\_memdev\_nvdimm\_bridge\_active&#x20;
* cxl\_memdev\_read\_label&#x20;
* cxl\_memdev\_write\_label&#x20;
* cxl\_memdev\_zero\_label&#x20;
* cxl\_new cxl\_ref&#x20;
* cxl\_set\_log\_fn&#x20;
* cxl\_set\_log\_priority&#x20;
* cxl\_set\_private\_data&#x20;
* cxl\_set\_userdata cxl\_unref
