Skip to content

Commit 39611e8

Browse files
committed
tools/testing/nvdimm: Make DSM failure code injection an override
In order to emulate the behavior of the NVDIMM_FAMILY_INTEL DSMs nfit_test needs the ability to execute the DSM and then override the return code. Split the current return code injection from get_dimm() and apply at after the function has executed to override the return status. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
1 parent 099b07a commit 39611e8

File tree

1 file changed

+32
-17
lines changed
  • tools/testing/nvdimm/test

1 file changed

+32
-17
lines changed

tools/testing/nvdimm/test/nfit.c

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,16 @@ static int nd_intel_test_cmd_set_lss_status(struct nfit_test *t,
884884
return 0;
885885
}
886886

887+
static int override_return_code(int dimm, unsigned int func, int rc)
888+
{
889+
if ((1 << func) & dimm_fail_cmd_flags[dimm]) {
890+
if (dimm_fail_cmd_code[dimm])
891+
return dimm_fail_cmd_code[dimm];
892+
return -EIO;
893+
}
894+
return rc;
895+
}
896+
887897
static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func)
888898
{
889899
int i;
@@ -894,13 +904,6 @@ static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func)
894904
break;
895905
if (i >= ARRAY_SIZE(handle))
896906
return -ENXIO;
897-
898-
if ((1 << func) & dimm_fail_cmd_flags[i]) {
899-
if (dimm_fail_cmd_code[i])
900-
return dimm_fail_cmd_code[i];
901-
return -EIO;
902-
}
903-
904907
return i;
905908
}
906909

@@ -939,48 +942,59 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc,
939942

940943
switch (func) {
941944
case ND_INTEL_ENABLE_LSS_STATUS:
942-
return nd_intel_test_cmd_set_lss_status(t,
945+
rc = nd_intel_test_cmd_set_lss_status(t,
943946
buf, buf_len);
947+
break;
944948
case ND_INTEL_FW_GET_INFO:
945-
return nd_intel_test_get_fw_info(t, buf,
949+
rc = nd_intel_test_get_fw_info(t, buf,
946950
buf_len, i - t->dcr_idx);
951+
break;
947952
case ND_INTEL_FW_START_UPDATE:
948-
return nd_intel_test_start_update(t, buf,
953+
rc = nd_intel_test_start_update(t, buf,
949954
buf_len, i - t->dcr_idx);
955+
break;
950956
case ND_INTEL_FW_SEND_DATA:
951-
return nd_intel_test_send_data(t, buf,
957+
rc = nd_intel_test_send_data(t, buf,
952958
buf_len, i - t->dcr_idx);
959+
break;
953960
case ND_INTEL_FW_FINISH_UPDATE:
954-
return nd_intel_test_finish_fw(t, buf,
961+
rc = nd_intel_test_finish_fw(t, buf,
955962
buf_len, i - t->dcr_idx);
963+
break;
956964
case ND_INTEL_FW_FINISH_QUERY:
957-
return nd_intel_test_finish_query(t, buf,
965+
rc = nd_intel_test_finish_query(t, buf,
958966
buf_len, i - t->dcr_idx);
967+
break;
959968
case ND_INTEL_SMART:
960-
return nfit_test_cmd_smart(buf, buf_len,
969+
rc = nfit_test_cmd_smart(buf, buf_len,
961970
&t->smart[i - t->dcr_idx]);
971+
break;
962972
case ND_INTEL_SMART_THRESHOLD:
963-
return nfit_test_cmd_smart_threshold(buf,
973+
rc = nfit_test_cmd_smart_threshold(buf,
964974
buf_len,
965975
&t->smart_threshold[i -
966976
t->dcr_idx]);
977+
break;
967978
case ND_INTEL_SMART_SET_THRESHOLD:
968-
return nfit_test_cmd_smart_set_threshold(buf,
979+
rc = nfit_test_cmd_smart_set_threshold(buf,
969980
buf_len,
970981
&t->smart_threshold[i -
971982
t->dcr_idx],
972983
&t->smart[i - t->dcr_idx],
973984
&t->pdev.dev, t->dimm_dev[i]);
985+
break;
974986
case ND_INTEL_SMART_INJECT:
975-
return nfit_test_cmd_smart_inject(buf,
987+
rc = nfit_test_cmd_smart_inject(buf,
976988
buf_len,
977989
&t->smart_threshold[i -
978990
t->dcr_idx],
979991
&t->smart[i - t->dcr_idx],
980992
&t->pdev.dev, t->dimm_dev[i]);
993+
break;
981994
default:
982995
return -ENOTTY;
983996
}
997+
return override_return_code(i, func, rc);
984998
}
985999

9861000
if (!test_bit(cmd, &cmd_mask)
@@ -1006,6 +1020,7 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc,
10061020
default:
10071021
return -ENOTTY;
10081022
}
1023+
return override_return_code(i, func, rc);
10091024
} else {
10101025
struct ars_state *ars_state = &t->ars_state;
10111026
struct nd_cmd_pkg *call_pkg = buf;

0 commit comments

Comments
 (0)