Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions Documentation/nvme-ocp-get-latency-monitor.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
nvme-ocp-get-latency-monitor(1)
=========================================

NAME
----
nvme-ocp-get-latency-monitor - Define and print get-latency-monitor value

SYNOPSIS
--------
[verse]
'nvme ocp get-latency-monitor' <device> [--sel=<select> | -s <select>]
[--namespace-id <nsid> | -n <nsid>] [--no-uuid | -u]

DESCRIPTION
-----------
The <device> parameter is mandatory and may be either the NVMe character
device (ex: /dev/nvme0) or block device (ex: /dev/nvme0n1).

This will only work on OCP compliant devices supporting this feature.
Results for any other device are undefined.

On success it returns 0, error code otherwise.

OPTIONS
-------
-n <nsid>::
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The --nsid not described and also no description for the options -n and --nsid.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ikegami-t incorporated the review comments

--namespace-id=<nsid>::
NSID: Assign the different kind of nsid value(like
active, inactive and invalid nsids) and check
the get feature command response:

-s <select>::
--sel=<select>::
Select (SEL): This field specifies which value of the attributes
to return in the provided data:
+
[]
|==================
|Select|Description
|0|Current
|1|Default
|2|Saved
|3|Supported capabilities
|4-7|Reserved
|==================

-u::
--no-uuid::
Do not try to automatically detect UUID index for this command (required
for old OCP 1.0 support)

EXAMPLES
--------
* Has the program issue a get-latency-monitor to retrieve the 0xC5 get features.
+
------------
# nvme ocp get-latency-monitor /dev/nvme0
------------

NVME
----
Part of the nvme-user suite.
15 changes: 15 additions & 0 deletions completions/_nvme
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,20 @@ _nvme () {
_arguments '*:: :->subcmds'
_describe -t commands "nvme ocp set-telemetry-profile options" _ocp_set_telemetry_profile_feature
;;
(get-latency-monitor)
local _ocp_get_latency_monitor_feature
_ocp_get_latency_monitor_feature=(
/dev/nvme':supply a device to use (required)'
--sel=':select from 0 - current, 1 - default, 2 - saved, 3 - supported'
-s':alias to --sel'
--namespace-id=':valid, invalid and inactive nsid'
-n':alias to --namespace-id'
--no-uuid':Skip UUID index search'
-u':alias for --no-uuid'
)
_arguments '*:: :->subcmds'
_describe -t commands "nvme ocp get-latency-monitor options" _ocp_get_latency_monitor_feature
;;
(*)
_files
;;
Expand Down Expand Up @@ -2843,6 +2857,7 @@ _nvme () {
get-error-injection':get error injection'
set-error-injection':set error injection'
hardware-component-log':retrieve hardware component log'
get-latency-monitor':Get Latency Monitor Feature'
)
_arguments '*:: :->subcmds'
_describe -t commands "nvme ocp options" _ocp
Expand Down
6 changes: 5 additions & 1 deletion completions/bash-nvme-completion.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,10 @@ plugin_ocp_opts () {
opts+=" --comp-id= -i --list -l --verbose -v \
--output-format -o --timeout= -t"
;;
"get-latency-monitor")
opts+=" --sel= -s \
--namespace-id= -n --no-uuid -u"
;;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add --no-uuid.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ikegami-t - Incorporated the review comments

"help")
opts+=$NO_OPTS
;;
Expand Down Expand Up @@ -1729,7 +1733,7 @@ _nvme_subcmds () {
telemetry-string-log set-telemetry-profile \
set-dssd-async-event-config get-dssd-async-event-config \
get-error-injection set-error-injection \
hardware-component-log"
hardware-component-log get-latency-monitor"
[mangoboost]="id-ctrl"
)

Expand Down
74 changes: 74 additions & 0 deletions plugins/ocp/ocp-nvme.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,80 @@ int ocp_set_latency_monitor_feature(int argc, char **argv, struct command *cmd,
return err;
}

static int ocp_get_latency_monitor_feature(int argc, char **argv, struct command *cmd,
struct plugin *plugin)
{
const char *desc = "Define Issue Get Feature command (FID: 0xC5) Latency Monitor";
const char *sel = "[0-3]: current/default/saved/supported/";
const char *nsid = "Byte[04-07]: Namespace Identifier Valid/Invalid/Inactive";

_cleanup_nvme_dev_ struct nvme_dev *dev = NULL;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No needed to add this blank line.

__u32 result;
int err;
bool uuid;
__u8 uuid_index = 0;

struct config {
__u8 sel;
__u32 nsid;
};

struct config cfg = {
.sel = 0,
.nsid = 0,
};

OPT_ARGS(opts) = {
OPT_BYTE("sel", 's', &cfg.sel, sel),
OPT_UINT("namespace-id", 'n', &cfg.nsid, nsid),
OPT_FLAG("no-uuid", 'u', NULL, no_uuid),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update the documentation to add the `no-uuid' parameter.
Also the parameter is not used to check by the command actually so can you please use the option by the command as below for example?

static int eol_plp_failure_mode(int argc, char **argv, struct command *cmd,
				struct plugin *plugin)
{
...
		err = eol_plp_failure_mode_get(dev, nsid, fid, cfg.sel,
					       !argconfig_parse_seen(opts, "no-uuid"));

And also if the nsid value can be deleted then the no-uuid short option u looks better to change to n as same with other OCP commands.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ikegami-t - Incorporated the review comments

OPT_END()
};

err = parse_and_open(&dev, argc, argv, desc, opts);
if (err)
return err;

uuid = !argconfig_parse_seen(opts, "no-uuid");

if (uuid) {
/* OCP 2.0 requires UUID index support */
err = ocp_get_uuid_index(dev, &uuid_index);
if (err || !uuid_index) {
nvme_show_error("ERROR: No OCP UUID index found");
return err;
}
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No needed to add 2 blank lines but only 1 blank line okay to added.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ikegami-t - incorporated the review comments

struct nvme_get_features_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
.fid = OCP_FID_LM,
.nsid = cfg.nsid,
.sel = cfg.sel,
.cdw11 = 0,
.uuidx = uuid_index,
.data_len = 0,
.data = NULL,
.timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
.result = &result,
};

err = nvme_get_features(&args);
if (!err) {
printf("get-feature:0xC5 %s value: %#08x\n",
nvme_select_to_string(cfg.sel), result);

if (cfg.sel == NVME_GET_FEATURES_SEL_SUPPORTED)
nvme_show_select_result(0xC5, result);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- 			nvme_show_select_result(0xC5, result);
+ 			nvme_show_select_result(OCP_FID_LM, result);

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ikegami-t - We can't pass OCP_FID_LM for this nvme_show_select_result api. Because enum data type is different for that api parameter.

} else {
nvme_show_error("Could not get feature: 0xC5");
}

return err;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
Expand Down
2 changes: 2 additions & 0 deletions plugins/ocp/ocp-nvme.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ PLUGIN(NAME("ocp", "OCP cloud SSD extensions", OCP_PLUGIN_VERSION),
get_enable_ieee1667_silo)
ENTRY("set-enable-ieee1667-silo", "enable IEEE1667 silo", set_enable_ieee1667_silo)
ENTRY("hardware-component-log", "retrieve hardware component log", hwcomp_log)
ENTRY("get-latency-monitor", "Get Latency Monitor Feature",
ocp_get_latency_monitor_feature)
)
);

Expand Down