nvdimm.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: Dave Jiang <dave.jiang@intel.com>
To: Vishal Verma <vishal.l.verma@intel.com>, linux-nvdimm@lists.01.org
Subject: Re: [PATCH] tools/testing/nvdimm: improve emulation of smart injection
Date: Tue, 31 Jul 2018 17:24:59 -0700	[thread overview]
Message-ID: <a638a82c-df5b-0458-8559-b5cff9b91637@intel.com> (raw)
In-Reply-To: <20180730221134.23201-1-vishal.l.verma@intel.com>


On 7/30/2018 3:11 PM, Vishal Verma wrote:
> The emulation for smart injection commands for nfit neglected to check
> the smart field validity flags before injecting to that field. This is
> required as a way to distinguish un-injection vs. leave-alone.
>
> The emulation was also missing support for un-injection entirely. To add
> this support, first, fix the above flags check. Second, use the
> 'enable' field in the injection command to determine injection vs
> un-injection. Third, move the smart initialization struct to be a global
> static structure for the nfit_test module. Reference this to get the
> smart 'defaults' when un-injecting a smart field.
>
> Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>

applied


> ---
>   tools/testing/nvdimm/test/nfit.c | 78 ++++++++++++++++++++++++----------------
>   1 file changed, 47 insertions(+), 31 deletions(-)
>
> diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c
> index a012ab765083..cffc2c5a778d 100644
> --- a/tools/testing/nvdimm/test/nfit.c
> +++ b/tools/testing/nvdimm/test/nfit.c
> @@ -142,6 +142,28 @@ static u32 handle[] = {
>   static unsigned long dimm_fail_cmd_flags[NUM_DCR];
>   static int dimm_fail_cmd_code[NUM_DCR];
>   
> +static const struct nd_intel_smart smart_def = {
> +	.flags = ND_INTEL_SMART_HEALTH_VALID
> +		| ND_INTEL_SMART_SPARES_VALID
> +		| ND_INTEL_SMART_ALARM_VALID
> +		| ND_INTEL_SMART_USED_VALID
> +		| ND_INTEL_SMART_SHUTDOWN_VALID
> +		| ND_INTEL_SMART_MTEMP_VALID
> +		| ND_INTEL_SMART_CTEMP_VALID,
> +	.health = ND_INTEL_SMART_NON_CRITICAL_HEALTH,
> +	.media_temperature = 23 * 16,
> +	.ctrl_temperature = 25 * 16,
> +	.pmic_temperature = 40 * 16,
> +	.spares = 75,
> +	.alarm_flags = ND_INTEL_SMART_SPARE_TRIP
> +		| ND_INTEL_SMART_TEMP_TRIP,
> +	.ait_status = 1,
> +	.life_used = 5,
> +	.shutdown_state = 0,
> +	.vendor_size = 0,
> +	.shutdown_count = 100,
> +};
> +
>   struct nfit_test_fw {
>   	enum intel_fw_update_state state;
>   	u32 context;
> @@ -752,15 +774,30 @@ static int nfit_test_cmd_smart_inject(
>   	if (buf_len != sizeof(*inj))
>   		return -EINVAL;
>   
> -	if (inj->mtemp_enable)
> -		smart->media_temperature = inj->media_temperature;
> -	if (inj->spare_enable)
> -		smart->spares = inj->spares;
> -	if (inj->fatal_enable)
> -		smart->health = ND_INTEL_SMART_FATAL_HEALTH;
> -	if (inj->unsafe_shutdown_enable) {
> -		smart->shutdown_state = 1;
> -		smart->shutdown_count++;
> +	if (inj->flags & ND_INTEL_SMART_INJECT_MTEMP) {
> +		if (inj->mtemp_enable)
> +			smart->media_temperature = inj->media_temperature;
> +		else
> +			smart->media_temperature = smart_def.media_temperature;
> +	}
> +	if (inj->flags & ND_INTEL_SMART_INJECT_SPARE) {
> +		if (inj->spare_enable)
> +			smart->spares = inj->spares;
> +		else
> +			smart->spares = smart_def.spares;
> +	}
> +	if (inj->flags & ND_INTEL_SMART_INJECT_FATAL) {
> +		if (inj->fatal_enable)
> +			smart->health = ND_INTEL_SMART_FATAL_HEALTH;
> +		else
> +			smart->health = ND_INTEL_SMART_NON_CRITICAL_HEALTH;
> +	}
> +	if (inj->flags & ND_INTEL_SMART_INJECT_SHUTDOWN) {
> +		if (inj->unsafe_shutdown_enable) {
> +			smart->shutdown_state = 1;
> +			smart->shutdown_count++;
> +		} else
> +			smart->shutdown_state = 0;
>   	}
>   	inj->status = 0;
>   	smart_notify(bus_dev, dimm_dev, smart, thresh);
> @@ -1317,30 +1354,9 @@ static void smart_init(struct nfit_test *t)
>   		.ctrl_temperature = 30 * 16,
>   		.spares = 5,
>   	};
> -	const struct nd_intel_smart smart_data = {
> -		.flags = ND_INTEL_SMART_HEALTH_VALID
> -			| ND_INTEL_SMART_SPARES_VALID
> -			| ND_INTEL_SMART_ALARM_VALID
> -			| ND_INTEL_SMART_USED_VALID
> -			| ND_INTEL_SMART_SHUTDOWN_VALID
> -			| ND_INTEL_SMART_MTEMP_VALID
> -			| ND_INTEL_SMART_CTEMP_VALID,
> -		.health = ND_INTEL_SMART_NON_CRITICAL_HEALTH,
> -		.media_temperature = 23 * 16,
> -		.ctrl_temperature = 25 * 16,
> -		.pmic_temperature = 40 * 16,
> -		.spares = 75,
> -		.alarm_flags = ND_INTEL_SMART_SPARE_TRIP
> -			| ND_INTEL_SMART_TEMP_TRIP,
> -		.ait_status = 1,
> -		.life_used = 5,
> -		.shutdown_state = 0,
> -		.vendor_size = 0,
> -		.shutdown_count = 100,
> -	};
>   
>   	for (i = 0; i < t->num_dcr; i++) {
> -		memcpy(&t->smart[i], &smart_data, sizeof(smart_data));
> +		memcpy(&t->smart[i], &smart_def, sizeof(smart_def));
>   		memcpy(&t->smart_threshold[i], &smart_t_data,
>   				sizeof(smart_t_data));
>   	}
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

      reply	other threads:[~2018-08-01  0:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-30 22:11 [PATCH] tools/testing/nvdimm: improve emulation of smart injection Vishal Verma
2018-08-01  0:24 ` Dave Jiang [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=a638a82c-df5b-0458-8559-b5cff9b91637@intel.com \
    --to=dave.jiang@intel.com \
    --cc=linux-nvdimm@lists.01.org \
    --cc=vishal.l.verma@intel.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;
as well as URLs for NNTP newsgroup(s).