@@ -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+
887897static 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