diff mbox series

tools/testing/nvdimm: improve emulation of smart injection

Message ID 20180730221134.23201-1-vishal.l.verma@intel.com (mailing list archive)
State New, archived
Headers show
Series tools/testing/nvdimm: improve emulation of smart injection | expand

Commit Message

Verma, Vishal L July 30, 2018, 10:11 p.m. UTC
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>
---
 tools/testing/nvdimm/test/nfit.c | 78 ++++++++++++++++++++++++----------------
 1 file changed, 47 insertions(+), 31 deletions(-)

Comments

Dave Jiang Aug. 1, 2018, 12:24 a.m. UTC | #1
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));
>   	}
diff mbox series

Patch

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));
 	}