@@ -884,6 +884,16 @@ static int nd_intel_test_cmd_set_lss_status(struct nfit_test *t,
884
884
return 0 ;
885
885
}
886
886
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
+
887
897
static int get_dimm (struct nfit_mem * nfit_mem , unsigned int func )
888
898
{
889
899
int i ;
@@ -894,13 +904,6 @@ static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func)
894
904
break ;
895
905
if (i >= ARRAY_SIZE (handle ))
896
906
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
-
904
907
return i ;
905
908
}
906
909
@@ -939,48 +942,59 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc,
939
942
940
943
switch (func ) {
941
944
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 ,
943
946
buf , buf_len );
947
+ break ;
944
948
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 ,
946
950
buf_len , i - t -> dcr_idx );
951
+ break ;
947
952
case ND_INTEL_FW_START_UPDATE :
948
- return nd_intel_test_start_update (t , buf ,
953
+ rc = nd_intel_test_start_update (t , buf ,
949
954
buf_len , i - t -> dcr_idx );
955
+ break ;
950
956
case ND_INTEL_FW_SEND_DATA :
951
- return nd_intel_test_send_data (t , buf ,
957
+ rc = nd_intel_test_send_data (t , buf ,
952
958
buf_len , i - t -> dcr_idx );
959
+ break ;
953
960
case ND_INTEL_FW_FINISH_UPDATE :
954
- return nd_intel_test_finish_fw (t , buf ,
961
+ rc = nd_intel_test_finish_fw (t , buf ,
955
962
buf_len , i - t -> dcr_idx );
963
+ break ;
956
964
case ND_INTEL_FW_FINISH_QUERY :
957
- return nd_intel_test_finish_query (t , buf ,
965
+ rc = nd_intel_test_finish_query (t , buf ,
958
966
buf_len , i - t -> dcr_idx );
967
+ break ;
959
968
case ND_INTEL_SMART :
960
- return nfit_test_cmd_smart (buf , buf_len ,
969
+ rc = nfit_test_cmd_smart (buf , buf_len ,
961
970
& t -> smart [i - t -> dcr_idx ]);
971
+ break ;
962
972
case ND_INTEL_SMART_THRESHOLD :
963
- return nfit_test_cmd_smart_threshold (buf ,
973
+ rc = nfit_test_cmd_smart_threshold (buf ,
964
974
buf_len ,
965
975
& t -> smart_threshold [i -
966
976
t -> dcr_idx ]);
977
+ break ;
967
978
case ND_INTEL_SMART_SET_THRESHOLD :
968
- return nfit_test_cmd_smart_set_threshold (buf ,
979
+ rc = nfit_test_cmd_smart_set_threshold (buf ,
969
980
buf_len ,
970
981
& t -> smart_threshold [i -
971
982
t -> dcr_idx ],
972
983
& t -> smart [i - t -> dcr_idx ],
973
984
& t -> pdev .dev , t -> dimm_dev [i ]);
985
+ break ;
974
986
case ND_INTEL_SMART_INJECT :
975
- return nfit_test_cmd_smart_inject (buf ,
987
+ rc = nfit_test_cmd_smart_inject (buf ,
976
988
buf_len ,
977
989
& t -> smart_threshold [i -
978
990
t -> dcr_idx ],
979
991
& t -> smart [i - t -> dcr_idx ],
980
992
& t -> pdev .dev , t -> dimm_dev [i ]);
993
+ break ;
981
994
default :
982
995
return - ENOTTY ;
983
996
}
997
+ return override_return_code (i , func , rc );
984
998
}
985
999
986
1000
if (!test_bit (cmd , & cmd_mask )
@@ -1006,6 +1020,7 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc,
1006
1020
default :
1007
1021
return - ENOTTY ;
1008
1022
}
1023
+ return override_return_code (i , func , rc );
1009
1024
} else {
1010
1025
struct ars_state * ars_state = & t -> ars_state ;
1011
1026
struct nd_cmd_pkg * call_pkg = buf ;
0 commit comments