On Thu, Feb 8, 2018 at 9:34 PM, Vishal Verma <vishal.l.verma(a)intel.com> wrote:
Add an inject-smart command to ndctl to allow injection of smart
fields,
and setting of smart thresholds. If a field is injected that breaches
the threshold, or sets a fatal flag, or if a new threshold is set that
causes the same effect, generate an acpi health even notification.
Cc: Dan Williams <dan.j.williams(a)intel.com>
Signed-off-by: Vishal Verma <vishal.l.verma(a)intel.com>
---
Documentation/ndctl/ndctl-inject-smart.txt | 102 +++++++
builtin.h | 1 +
ndctl/Makefile.am | 3 +-
ndctl/inject-smart.c | 436 +++++++++++++++++++++++++++++
ndctl/ndctl.c | 1 +
5 files changed, 542 insertions(+), 1 deletion(-)
create mode 100644 Documentation/ndctl/ndctl-inject-smart.txt
create mode 100644 ndctl/inject-smart.c
v2: Change inject-smart semantics to avoid sub-commands like --inject
and --set. Instead allow injection and threshold setting all in one
command by making each a distinct option. (Dan)
diff --git a/Documentation/ndctl/ndctl-inject-smart.txt
b/Documentation/ndctl/ndctl-inject-smart.txt
new file mode 100644
index 0000000..212bca0
--- /dev/null
+++ b/Documentation/ndctl/ndctl-inject-smart.txt
@@ -0,0 +1,102 @@
+ndctl-inject-smart(1)
+=====================
+
+NAME
+----
+ndctl-inject-smart - perform smart threshold/injection operations on a DIMM
+
+SYNOPSIS
+--------
+[verse]
+'ndctl inject-smart' <dimm> [<options>]
+
+DESCRIPTION
+-----------
+A generic DIMM device object, named /dev/nmemX, is registered for each
+memory device indicated in the ACPI NFIT table, or other platform NVDIMM
+resource discovery mechanism.
+
+ndctl-inject-smart can be used to set smart thresholds, and inject smart
+attributes.
+
+EXAMPLES
+--------
+
+Set smart controller temperature and spares threshold for DIMM-0 to 32C, spares
+threshold to 8, and enable the spares alarm.
+[verse]
+ndctl inject-smart --ctrl-temperature-threshold=32 --spares-threshold=8 --spares-alarm
nmem0
+
+Inject a media temperature value of 52 and fatal health status flag for DIMM-0
+[verse]
+ndctl inject-smart --media-temperature=52 --health=fatal nmem0
+
+
+OPTIONS
+-------
+-b::
+--bus=::
+ Enforce that the operation only be carried on devices that are
+ attached to the given bus. Where 'bus' can be a provider name or a bus
+ id number.
+
+-m::
+--media-temperature=::
+ Inject <value> for the media temperature smart attribute.
+
+-M::
+--media-temperature-threshold=::
+ Set <value> for the smart media temperature threshold.
+
+--media-temperature-alarm=::
+ Enable or disable the smart media temperature alarm. Options are
+ 'on' or 'off'.
+
+-c::
+--ctrl-temperature=::
+ Inject <value> for the controller temperature smart attribute.
+
+-C::
+--ctrl-temperature-threshold=::
+ Set <value> for the smart controller temperature threshold.
+
+--ctrl-temperature-alarm=::
+ Enable or disable the smart controller temperature alarm. Options are
+ 'on' or 'off'.
+
+-s::
+--spares=::
+ Inject <value> for the spares smart attribute.
+
+-S::
+--spares-threshold=::
+ Set <value> for the smart spares threshold.
+
+--spares-alarm=::
+ Enable or disable the smart spares alarm. Options are 'on' or
'off'.
+
+-H::
+--health=::
+ Smart attribute for health status. Provide either 'fatal' or
'nominal'
+ to set the state of the attribute.
+
+-U::
+--unsafe-shutdown=::
+ Set the flag to spoof an unsafe shutdown on the next power down.
+
+-v::
+--verbose::
+ Emit debug messages for the error injection process
Nice, and I like your short option choices too.