Adding upstream version 2.6.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
acf5b2ec4c
commit
83f51a6dde
262 changed files with 7434 additions and 3024 deletions
|
@ -210,6 +210,7 @@ static void json_nvme_id_ns(struct nvme_id_ns *ns, unsigned int nsid,
|
|||
json_object_add_value_uint(root, "mnan", le32_to_cpu(ctrl->mnan));
|
||||
json_object_add_value_uint128(root, "maxdna", maxdna);
|
||||
json_object_add_value_uint(root, "maxcna", le32_to_cpu(ctrl->maxcna));
|
||||
json_object_add_value_uint(root, "oaqd", le32_to_cpu(ctrl->oaqd));
|
||||
|
||||
if (strlen(subnqn))
|
||||
json_object_add_value_string(root, "subnqn", subnqn);
|
||||
|
@ -229,7 +230,10 @@ static void json_nvme_id_ns(struct nvme_id_ns *ns, unsigned int nsid,
|
|||
|
||||
json_object_add_value_int(psd, "max_power",
|
||||
le16_to_cpu(ctrl->psd[i].mp));
|
||||
json_object_add_value_int(psd, "flags", ctrl->psd[i].flags);
|
||||
json_object_add_value_int(psd, "max_power_scale",
|
||||
ctrl->psd[i].flags & 0x1);
|
||||
json_object_add_value_int(psd, "non-operational_state",
|
||||
(ctrl->psd[i].flags & 0x2) >> 1);
|
||||
json_object_add_value_uint(psd, "entry_lat",
|
||||
le32_to_cpu(ctrl->psd[i].enlat));
|
||||
json_object_add_value_uint(psd, "exit_lat",
|
||||
|
@ -451,51 +455,43 @@ void json_changed_ns_list_log(struct nvme_ns_list *log,
|
|||
json_free_object(root);
|
||||
}
|
||||
|
||||
static void json_endurance_log(struct nvme_endurance_group_log *endurance_group,
|
||||
__u16 group_id, const char *devname)
|
||||
static void json_endurance_log(struct nvme_endurance_group_log *endurance_group, __u16 group_id,
|
||||
const char *devname)
|
||||
{
|
||||
struct json_object *root;
|
||||
|
||||
nvme_uint128_t endurance_estimate =
|
||||
le128_to_cpu(endurance_group->endurance_estimate);
|
||||
nvme_uint128_t data_units_read =
|
||||
le128_to_cpu(endurance_group->data_units_read);
|
||||
nvme_uint128_t data_units_written =
|
||||
le128_to_cpu(endurance_group->data_units_written);
|
||||
nvme_uint128_t media_units_written =
|
||||
le128_to_cpu(endurance_group->media_units_written);
|
||||
nvme_uint128_t host_read_cmds =
|
||||
le128_to_cpu(endurance_group->host_read_cmds);
|
||||
nvme_uint128_t host_write_cmds =
|
||||
le128_to_cpu(endurance_group->host_write_cmds);
|
||||
nvme_uint128_t endurance_estimate = le128_to_cpu(endurance_group->endurance_estimate);
|
||||
nvme_uint128_t data_units_read = le128_to_cpu(endurance_group->data_units_read);
|
||||
nvme_uint128_t data_units_written = le128_to_cpu(endurance_group->data_units_written);
|
||||
nvme_uint128_t media_units_written = le128_to_cpu(endurance_group->media_units_written);
|
||||
nvme_uint128_t host_read_cmds = le128_to_cpu(endurance_group->host_read_cmds);
|
||||
nvme_uint128_t host_write_cmds = le128_to_cpu(endurance_group->host_write_cmds);
|
||||
nvme_uint128_t media_data_integrity_err =
|
||||
le128_to_cpu(endurance_group->media_data_integrity_err);
|
||||
le128_to_cpu(endurance_group->media_data_integrity_err);
|
||||
nvme_uint128_t num_err_info_log_entries =
|
||||
le128_to_cpu(endurance_group->num_err_info_log_entries);
|
||||
le128_to_cpu(endurance_group->num_err_info_log_entries);
|
||||
nvme_uint128_t total_end_grp_cap = le128_to_cpu(endurance_group->total_end_grp_cap);
|
||||
nvme_uint128_t unalloc_end_grp_cap = le128_to_cpu(endurance_group->unalloc_end_grp_cap);
|
||||
|
||||
root = json_create_object();
|
||||
|
||||
json_object_add_value_int(root, "critical_warning",
|
||||
endurance_group->critical_warning);
|
||||
json_object_add_value_int(root, "avl_spare",
|
||||
endurance_group->avl_spare);
|
||||
json_object_add_value_int(root, "critical_warning", endurance_group->critical_warning);
|
||||
json_object_add_value_int(root, "endurance_group_features",
|
||||
endurance_group->endurance_group_features);
|
||||
json_object_add_value_int(root, "avl_spare", endurance_group->avl_spare);
|
||||
json_object_add_value_int(root, "avl_spare_threshold",
|
||||
endurance_group->avl_spare_threshold);
|
||||
json_object_add_value_int(root, "percent_used",
|
||||
endurance_group->percent_used);
|
||||
json_object_add_value_uint128(root, "endurance_estimate",
|
||||
endurance_estimate);
|
||||
endurance_group->avl_spare_threshold);
|
||||
json_object_add_value_int(root, "percent_used", endurance_group->percent_used);
|
||||
json_object_add_value_int(root, "domain_identifier", endurance_group->domain_identifier);
|
||||
json_object_add_value_uint128(root, "endurance_estimate", endurance_estimate);
|
||||
json_object_add_value_uint128(root, "data_units_read", data_units_read);
|
||||
json_object_add_value_uint128(root, "data_units_written",
|
||||
data_units_written);
|
||||
json_object_add_value_uint128(root, "media_units_written",
|
||||
media_units_written);
|
||||
json_object_add_value_uint128(root, "data_units_written", data_units_written);
|
||||
json_object_add_value_uint128(root, "media_units_written", media_units_written);
|
||||
json_object_add_value_uint128(root, "host_read_cmds", host_read_cmds);
|
||||
json_object_add_value_uint128(root, "host_write_cmds", host_write_cmds);
|
||||
json_object_add_value_uint128(root, "media_data_integrity_err",
|
||||
media_data_integrity_err);
|
||||
json_object_add_value_uint128(root, "num_err_info_log_entries",
|
||||
num_err_info_log_entries);
|
||||
json_object_add_value_uint128(root, "media_data_integrity_err", media_data_integrity_err);
|
||||
json_object_add_value_uint128(root, "num_err_info_log_entries", num_err_info_log_entries);
|
||||
json_object_add_value_uint128(root, "total_end_grp_cap", total_end_grp_cap);
|
||||
json_object_add_value_uint128(root, "unalloc_end_grp_cap", unalloc_end_grp_cap);
|
||||
|
||||
json_print_object(root, NULL);
|
||||
printf("\n");
|
||||
|
@ -1413,6 +1409,116 @@ static void json_boot_part_log(void *bp_log, const char *devname,
|
|||
json_free_object(root);
|
||||
}
|
||||
|
||||
/* Printable Eye string is allocated and returned, caller must free */
|
||||
static char *json_eom_printable_eye(struct nvme_eom_lane_desc *lane,
|
||||
struct json_object *root)
|
||||
{
|
||||
char *eye = (char *)lane->eye_desc;
|
||||
|
||||
char *printable = malloc(lane->nrows * lane->ncols + lane->ncols);
|
||||
char *printable_start = printable;
|
||||
if (!printable)
|
||||
goto exit;
|
||||
|
||||
int i, j;
|
||||
for (i = 0; i < lane->nrows; i++) {
|
||||
for (j = 0; j < lane->ncols; j++, printable++)
|
||||
sprintf(printable, "%c", eye[i * lane->ncols + j]);
|
||||
sprintf(printable++, "\n");
|
||||
}
|
||||
|
||||
json_object_add_value_string(root, "printable_eye", printable_start);
|
||||
|
||||
exit:
|
||||
return printable_start;
|
||||
}
|
||||
|
||||
|
||||
static void json_phy_rx_eom_descs(struct nvme_phy_rx_eom_log *log,
|
||||
struct json_object *root, char **allocated_eyes)
|
||||
{
|
||||
void *p = log->descs;
|
||||
uint16_t num_descs = le16_to_cpu(log->nd);
|
||||
int i;
|
||||
struct json_object *descs;
|
||||
|
||||
descs = json_create_array();
|
||||
json_object_add_value_array(root, "descs", descs);
|
||||
|
||||
for (i = 0; i < num_descs; i++) {
|
||||
struct nvme_eom_lane_desc *desc = p;
|
||||
struct json_object *jdesc = json_create_object();
|
||||
|
||||
json_object_add_value_uint(jdesc, "lid", desc->mstatus);
|
||||
json_object_add_value_uint(jdesc, "lane", desc->lane);
|
||||
json_object_add_value_uint(jdesc, "eye", desc->eye);
|
||||
json_object_add_value_uint(jdesc, "top", le16_to_cpu(desc->top));
|
||||
json_object_add_value_uint(jdesc, "bottom", le16_to_cpu(desc->bottom));
|
||||
json_object_add_value_uint(jdesc, "left", le16_to_cpu(desc->left));
|
||||
json_object_add_value_uint(jdesc, "right", le16_to_cpu(desc->right));
|
||||
json_object_add_value_uint(jdesc, "nrows", le16_to_cpu(desc->nrows));
|
||||
json_object_add_value_uint(jdesc, "ncols", le16_to_cpu(desc->ncols));
|
||||
json_object_add_value_uint(jdesc, "edlen", le16_to_cpu(desc->edlen));
|
||||
|
||||
if (log->odp & NVME_EOM_PRINTABLE_EYE_PRESENT)
|
||||
allocated_eyes[i] = json_eom_printable_eye(desc, root);
|
||||
|
||||
/* Eye Data field is vendor specific, doesn't map to JSON */
|
||||
|
||||
json_array_add_value_object(descs, jdesc);
|
||||
|
||||
p += log->dsize;
|
||||
}
|
||||
}
|
||||
|
||||
static void json_phy_rx_eom_log(struct nvme_phy_rx_eom_log *log, __u16 controller)
|
||||
{
|
||||
char **allocated_eyes = NULL;
|
||||
int i;
|
||||
|
||||
struct json_object *root;
|
||||
root = json_create_object();
|
||||
|
||||
json_object_add_value_uint(root, "lid", log->lid);
|
||||
json_object_add_value_uint(root, "eomip", log->eomip);
|
||||
json_object_add_value_uint(root, "hsize", le16_to_cpu(log->hsize));
|
||||
json_object_add_value_uint(root, "rsize", le32_to_cpu(log->rsize));
|
||||
json_object_add_value_uint(root, "eomdgn", log->eomdgn);
|
||||
json_object_add_value_uint(root, "lr", log->lr);
|
||||
json_object_add_value_uint(root, "lanes", log->lanes);
|
||||
json_object_add_value_uint(root, "epl", log->epl);
|
||||
json_object_add_value_uint(root, "lspfc", log->lspfc);
|
||||
json_object_add_value_uint(root, "li", log->li);
|
||||
json_object_add_value_uint(root, "lsic", le16_to_cpu(log->lsic));
|
||||
json_object_add_value_uint(root, "dsize", le32_to_cpu(log->dsize));
|
||||
json_object_add_value_uint(root, "nd", le16_to_cpu(log->nd));
|
||||
json_object_add_value_uint(root, "maxtb", le16_to_cpu(log->maxtb));
|
||||
json_object_add_value_uint(root, "maxlr", le16_to_cpu(log->maxlr));
|
||||
json_object_add_value_uint(root, "etgood", le16_to_cpu(log->etgood));
|
||||
json_object_add_value_uint(root, "etbetter", le16_to_cpu(log->etbetter));
|
||||
json_object_add_value_uint(root, "etbest", le16_to_cpu(log->etbest));
|
||||
|
||||
if (log->eomip == NVME_PHY_RX_EOM_COMPLETED) {
|
||||
/* Save Printable Eye strings allocated to free later */
|
||||
allocated_eyes = malloc(log->nd * sizeof(char *));
|
||||
if (allocated_eyes)
|
||||
json_phy_rx_eom_descs(log, root, allocated_eyes);
|
||||
}
|
||||
|
||||
json_print_object(root, NULL);
|
||||
printf("\n");
|
||||
|
||||
if (allocated_eyes) {
|
||||
for (i = 0; i < log->nd; i++) {
|
||||
/* Free any Printable Eye strings allocated */
|
||||
if (allocated_eyes[i])
|
||||
free(allocated_eyes[i]);
|
||||
}
|
||||
free(allocated_eyes);
|
||||
}
|
||||
json_free_object(root);
|
||||
}
|
||||
|
||||
static void json_media_unit_stat_log(struct nvme_media_unit_stat_log *mus)
|
||||
{
|
||||
|
||||
|
@ -1797,6 +1903,8 @@ static void json_print_nvme_subsystem_list(nvme_root_t r, bool show_ana)
|
|||
nvme_subsystem_get_name(s));
|
||||
json_object_add_value_string(subsystem_attrs, "NQN",
|
||||
nvme_subsystem_get_nqn(s));
|
||||
json_object_add_value_string(subsystem_attrs, "IOPolicy",
|
||||
nvme_subsystem_get_iopolicy(s));
|
||||
|
||||
json_array_add_value_object(subsystems, subsystem_attrs);
|
||||
paths = json_create_array();
|
||||
|
@ -2378,8 +2486,8 @@ static void json_nvme_id_uuid_list(const struct nvme_id_uuid_list *uuid_list)
|
|||
|
||||
root = json_create_object();
|
||||
entries = json_create_array();
|
||||
/* The 0th entry is reserved */
|
||||
for (i = 1; i < NVME_ID_UUID_LIST_MAX; i++) {
|
||||
|
||||
for (i = 0; i < NVME_ID_UUID_LIST_MAX; i++) {
|
||||
__u8 uuid[NVME_UUID_LEN];
|
||||
struct json_object *entry = json_create_object();
|
||||
|
||||
|
@ -2757,6 +2865,8 @@ static void json_simple_topology(nvme_root_t r)
|
|||
nvme_subsystem_get_name(s));
|
||||
json_object_add_value_string(subsystem_attrs, "NQN",
|
||||
nvme_subsystem_get_nqn(s));
|
||||
json_object_add_value_string(subsystem_attrs, "IOPolicy",
|
||||
nvme_subsystem_get_iopolicy(s));
|
||||
|
||||
json_array_add_value_object(subsystems, subsystem_attrs);
|
||||
namespaces = json_create_array();
|
||||
|
@ -2921,6 +3031,7 @@ static void json_output_perror(const char *msg)
|
|||
static struct print_ops json_print_ops = {
|
||||
.ana_log = json_ana_log,
|
||||
.boot_part_log = json_boot_part_log,
|
||||
.phy_rx_eom_log = json_phy_rx_eom_log,
|
||||
.ctrl_list = json_nvme_list_ctrl,
|
||||
.ctrl_registers = json_ctrl_registers,
|
||||
.discovery_log = json_discovery_log,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue