Linux CXL
 help / color / mirror / Atom feed
From: Alison Schofield <alison.schofield@intel.com>
To: Jonathan Zhang <jonzhang@meta.com>
Cc: linux-cxl@vger.kernel.org, vishal.l.verma@intel.com,
	wzhang@meta.com, Jonathan Zhang <jonzhang@fb.com>
Subject: Re: [ndctl PATCH V2 2/2] cxl: display alert configuration fields
Date: Mon, 31 Oct 2022 11:50:07 -0700	[thread overview]
Message-ID: <Y2AY3372iFJvY2lX@aschofie-mobl2> (raw)
In-Reply-To: <20221025204320.290354-3-jonzhang@meta.com>

On Tue, Oct 25, 2022 at 01:43:20PM -0700, Jonathan Zhang wrote:
> From: Jonathan Zhang <jonzhang@fb.com>
> 
> CXL device's critical alert and programmable warning configurations
> are displayed when:
> * list command is issued.
> * "--alert-config" is issued.
> 

Hi Jonathan,

The change from 'alert' to 'alert-config' in the cmdline needs to carry
through to the JSON output and the man page example too.

Alison


> Signed-off-by: Jonathan Zhang <jonzhang@meta.com>
> ---
>  Documentation/cxl/cxl-list.txt |  33 ++++++
>  cxl/filter.c                   |   2 +
>  cxl/filter.h                   |   1 +
>  cxl/json.c                     | 185 +++++++++++++++++++++++++++++++++
>  cxl/list.c                     |   6 +-
>  util/json.h                    |   1 +
>  6 files changed, 226 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/cxl/cxl-list.txt b/Documentation/cxl/cxl-list.txt
> index 14a2b4b..c762368 100644
> --- a/Documentation/cxl/cxl-list.txt
> +++ b/Documentation/cxl/cxl-list.txt
> @@ -219,6 +219,39 @@ OPTIONS
>    }
>  ]
>  ----
> +-A::
> +--alert::
> +	Include alert configuration in the memdev listing. Example listing:
> +----
> +# cxl list -m mem0 -A
> +[
> +  {
> +    "memdev":"mem0",
> +    "pmem_size":0,
> +    "ram_size":273535729664,
> +    "alert":{
> +      "life_used_prog_warn_threshold_valid":false,
> +      "dev_over_temperature_prog_warn_threshold_valid":false,
> +      "dev_under_temperature_prog_warn_threshold_valid":false,
> +      "corrected_volatile_mem_err_prog_warn_threshold_valid":true,
> +      "corrected_pmem_err_prog_warn_threshold_valid":false,
> +      "life_used_prog_warn_threshold_writable":false,
> +      "dev_over_temperature_prog_warn_threshold_writable":false,
> +      "dev_under_temperature_prog_warn_threshold_writable":false,
> +      "corrected_volatile_mem_err_prog_warn_threshold_writable":true,
> +      "corrected_pmem_err_prog_warn_threshold_writable":false,
> +      "life_used_crit_alert_threshold":0,
> +      "life_used_prog_warn_threshold":0,
> +      "dev_over_temperature_crit_alert_threshold":0,
> +      "dev_under_temperature_crit_alert_threshold":0,
> +      "dev_over_temperature_prog_warn_threshold":0,
> +      "dev_under_temperature_prog_warn_threshold":0,
> +      "corrected_volatile_mem_err_prog_warn_threshold":0,
> +      "corrected_pmem_err_prog_warn_threshold":0
> +    },
> +  }
> +]
> +----
>  
>  -B::
>  --buses::
> diff --git a/cxl/filter.c b/cxl/filter.c
> index 56c6599..beb64de 100644
> --- a/cxl/filter.c
> +++ b/cxl/filter.c
> @@ -686,6 +686,8 @@ static unsigned long params_to_flags(struct cxl_filter_params *param)
>  		flags |= UTIL_JSON_TARGETS;
>  	if (param->partition)
>  		flags |= UTIL_JSON_PARTITION;
> +	if (param->alert_config)
> +		flags |= UTIL_JSON_ALERT_CONFIG;
>  	return flags;
>  }
>  
> diff --git a/cxl/filter.h b/cxl/filter.h
> index 256df49..cd514c9 100644
> --- a/cxl/filter.h
> +++ b/cxl/filter.h
> @@ -26,6 +26,7 @@ struct cxl_filter_params {
>  	bool human;
>  	bool health;
>  	bool partition;
> +	bool alert_config;
>  	int verbose;
>  	struct log_ctx ctx;
>  };
> diff --git a/cxl/json.c b/cxl/json.c
> index 63c1751..2f74452 100644
> --- a/cxl/json.c
> +++ b/cxl/json.c
> @@ -185,6 +185,185 @@ err_jobj:
>  	return NULL;
>  }
>  
> +static struct json_object *
> +util_cxl_memdev_alert_config_to_json(struct cxl_memdev *memdev,
> +				     unsigned long flags)
> +{
> +	struct json_object *jalert_config;
> +	struct json_object *jobj;
> +	struct cxl_cmd *cmd;
> +	int rc;
> +
> +	jalert_config = json_object_new_object();
> +	if (!jalert_config)
> +		return NULL;
> +	if (!memdev)
> +		goto err_jobj;
> +
> +	cmd = cxl_cmd_new_get_alert_config(memdev);
> +	if (!cmd)
> +		goto err_jobj;
> +
> +	rc = cxl_cmd_submit(cmd);
> +	if (rc < 0)
> +		goto err_cmd;
> +	rc = cxl_cmd_get_mbox_status(cmd);
> +	if (rc != 0)
> +		goto err_cmd;
> +
> +	rc = cxl_cmd_alert_config_life_used_prog_warn_threshold_valid(cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(jalert_config,
> +				       "life_used_prog_warn_threshold_valid",
> +				       jobj);
> +
> +	rc = cxl_cmd_alert_config_dev_over_temperature_prog_warn_threshold_valid(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_over_temperature_prog_warn_threshold_valid", jobj);
> +
> +	rc = cxl_cmd_alert_config_dev_under_temperature_prog_warn_threshold_valid(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_under_temperature_prog_warn_threshold_valid",
> +			jobj);
> +
> +	rc = cxl_cmd_alert_config_corrected_volatile_mem_err_prog_warn_threshold_valid(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"corr_volatile_mem_err_prog_warn_threshold_valid",
> +			jobj);
> +
> +	rc = cxl_cmd_alert_config_corrected_pmem_err_prog_warn_threshold_valid(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"corr_pmem_err_prog_warn_threshold_valid", jobj);
> +
> +	rc = cxl_cmd_alert_config_life_used_prog_warn_threshold_writable(cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(jalert_config,
> +				       "life_used_prog_warn_threshold_writable",
> +				       jobj);
> +
> +	rc = cxl_cmd_alert_config_dev_over_temperature_prog_warn_threshold_writable(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_over_temperature_prog_warn_threshold_writable",
> +			jobj);
> +
> +	rc = cxl_cmd_alert_config_dev_under_temperature_prog_warn_threshold_writable(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_under_temperature_prog_warn_threshold_writable",
> +			jobj);
> +
> +	rc = cxl_cmd_alert_config_corrected_volatile_mem_err_prog_warn_threshold_writable(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"corr_volatile_mem_err_prog_warn_threshold_writable",
> +			jobj);
> +
> +	rc = cxl_cmd_alert_config_corrected_pmem_err_prog_warn_threshold_writable(
> +		cmd);
> +	jobj = json_object_new_boolean(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"corr_pmem_err_prog_warn_threshold_writable", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_life_used_crit_alert_threshold(cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(jalert_config,
> +				       "life_used_crit_alert_threshold", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_life_used_prog_warn_threshold(cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(jalert_config,
> +				       "life_used_prog_warn_threshold", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_dev_over_temperature_crit_alert_threshold(
> +		cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_over_temperature_crit_alert_threshold", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_dev_under_temperature_crit_alert_threshold(
> +		cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_under_temperature_crit_alert_threshold", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_dev_over_temperature_prog_warn_threshold(
> +		cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_over_temperature_prog_warn_threshold", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_dev_under_temperature_prog_warn_threshold(
> +		cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"dev_under_temperature_prog_warn_threshold", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_corrected_volatile_mem_err_prog_warn_threshold(
> +		cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(
> +			jalert_config,
> +			"corr_volatile_mem_err_prog_warn_threshold", jobj);
> +
> +	rc = cxl_cmd_alert_config_get_corrected_pmem_err_prog_warn_threshold(
> +		cmd);
> +	jobj = json_object_new_int(rc);
> +	if (jobj)
> +		json_object_object_add(jalert_config,
> +				       "corr_pmem_err_prog_warn_threshold",
> +				       jobj);
> +
> +	cxl_cmd_unref(cmd);
> +	return jalert_config;
> +
> +err_cmd:
> +	cxl_cmd_unref(cmd);
> +err_jobj:
> +	json_object_put(jalert_config);
> +	return NULL;
> +}
> +
>  /*
>   * Present complete view of memdev partition by presenting fields from
>   * both GET_PARTITION_INFO and IDENTIFY mailbox commands.
> @@ -330,6 +509,12 @@ struct json_object *util_cxl_memdev_to_json(struct cxl_memdev *memdev,
>  			json_object_object_add(jdev, "health", jobj);
>  	}
>  
> +	if (flags & UTIL_JSON_ALERT_CONFIG) {
> +		jobj = util_cxl_memdev_alert_config_to_json(memdev, flags);
> +		if (jobj)
> +			json_object_object_add(jdev, "alert_config", jobj);
> +	}
> +
>  	serial = cxl_memdev_get_serial(memdev);
>  	if (serial < ULLONG_MAX) {
>  		jobj = util_json_object_hex(serial, flags);
> diff --git a/cxl/list.c b/cxl/list.c
> index 8c48fbb..5dd76b9 100644
> --- a/cxl/list.c
> +++ b/cxl/list.c
> @@ -52,8 +52,9 @@ static const struct option options[] = {
>  		    "include memory device health information"),
>  	OPT_BOOLEAN('I', "partition", &param.partition,
>  		    "include memory device partition information"),
> -	OPT_INCR('v', "verbose", &param.verbose,
> -		 "increase output detail"),
> +	OPT_BOOLEAN('A', "alert-config", &param.alert_config,
> +		    "include alert configuration information"),
> +	OPT_INCR('v', "verbose", &param.verbose, "increase output detail"),
>  #ifdef ENABLE_DEBUG
>  	OPT_BOOLEAN(0, "debug", &debug, "debug list walk"),
>  #endif
> @@ -113,6 +114,7 @@ int cmd_list(int argc, const char **argv, struct cxl_ctx *ctx)
>  	case 3:
>  		param.health = true;
>  		param.partition = true;
> +		param.alert_config = true;
>  		/* fallthrough */
>  	case 2:
>  		param.idle = true;
> diff --git a/util/json.h b/util/json.h
> index 73bb9f0..ea370df 100644
> --- a/util/json.h
> +++ b/util/json.h
> @@ -20,6 +20,7 @@ enum util_json_flags {
>  	UTIL_JSON_HEALTH	= (1 << 10),
>  	UTIL_JSON_TARGETS	= (1 << 11),
>  	UTIL_JSON_PARTITION	= (1 << 12),
> +	UTIL_JSON_ALERT_CONFIG	= (1 << 13),
>  };
>  
>  void util_display_json_array(FILE *f_out, struct json_object *jarray,
> -- 
> 2.30.2
> 

      reply	other threads:[~2022-10-31 18:50 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-25 20:43 [ndctl PATCH V2 0/2] add support for CCI Get Alert Configuration Jonathan Zhang
2022-10-25 20:43 ` [ndctl PATCH V2 1/2] libcxl: add accessors for Get Alert Configuration CCI output Jonathan Zhang
2022-10-31 18:57   ` Alison Schofield
2022-10-31 23:46     ` Jonathan Zhang (Infra)
2022-11-01  0:57       ` Alison Schofield
2022-11-01  1:24         ` Jonathan Zhang (Infra)
2022-10-25 20:43 ` [ndctl PATCH V2 2/2] cxl: display alert configuration fields Jonathan Zhang
2022-10-31 18:50   ` Alison Schofield [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y2AY3372iFJvY2lX@aschofie-mobl2 \
    --to=alison.schofield@intel.com \
    --cc=jonzhang@fb.com \
    --cc=jonzhang@meta.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=vishal.l.verma@intel.com \
    --cc=wzhang@meta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox