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
prev parent 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).