1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (c) 2022 Marvell. 3 */ 4 5 #include <rte_common.h> 6 #include <rte_launch.h> 7 8 #include "ml_common.h" 9 #include "test_inference_common.h" 10 11 static int 12 test_inference_ordered_driver(struct ml_test *test, struct ml_options *opt) 13 { 14 struct test_inference *t; 15 uint16_t fid = 0; 16 int ret = 0; 17 18 t = ml_test_priv(test); 19 20 ret = ml_inference_mldev_setup(test, opt); 21 if (ret != 0) 22 return ret; 23 24 ret = ml_inference_mem_setup(test, opt); 25 if (ret != 0) 26 return ret; 27 28 next_model: 29 /* load model */ 30 ret = ml_model_load(test, opt, &t->model[fid], fid); 31 if (ret != 0) 32 goto error; 33 34 /* start model */ 35 ret = ml_model_start(test, opt, &t->model[fid], fid); 36 if (ret != 0) 37 goto error; 38 39 ret = ml_inference_iomem_setup(test, opt, fid); 40 if (ret != 0) 41 goto error; 42 43 /* launch inferences for one model using available queue pairs */ 44 ret = ml_inference_launch_cores(test, opt, fid, fid); 45 if (ret != 0) { 46 ml_err("failed to launch cores"); 47 goto error; 48 } 49 50 rte_eal_mp_wait_lcore(); 51 52 ret = ml_inference_result(test, opt, fid); 53 if (ret != ML_TEST_SUCCESS) 54 goto error; 55 56 ml_inference_iomem_destroy(test, opt, fid); 57 ml_inference_stats_get(test, opt); 58 59 /* stop model */ 60 ret = ml_model_stop(test, opt, &t->model[fid], fid); 61 if (ret != 0) 62 goto error; 63 64 /* unload model */ 65 ret = ml_model_unload(test, opt, &t->model[fid], fid); 66 if (ret != 0) 67 goto error; 68 69 fid++; 70 if (fid < opt->nb_filelist) 71 goto next_model; 72 73 ml_inference_mem_destroy(test, opt); 74 75 ret = ml_inference_mldev_destroy(test, opt); 76 if (ret != 0) 77 return ret; 78 79 t->cmn.result = ML_TEST_SUCCESS; 80 81 return 0; 82 83 error: 84 ml_inference_iomem_destroy(test, opt, fid); 85 ml_inference_mem_destroy(test, opt); 86 ml_model_stop(test, opt, &t->model[fid], fid); 87 ml_model_unload(test, opt, &t->model[fid], fid); 88 89 t->cmn.result = ML_TEST_FAILED; 90 91 return ret; 92 } 93 94 static int 95 test_inference_ordered_result(struct ml_test *test, struct ml_options *opt) 96 { 97 struct test_inference *t; 98 99 RTE_SET_USED(opt); 100 101 t = ml_test_priv(test); 102 103 return t->cmn.result; 104 } 105 106 static const struct ml_test_ops inference_ordered = { 107 .cap_check = test_inference_cap_check, 108 .opt_check = test_inference_opt_check, 109 .opt_dump = test_inference_opt_dump, 110 .test_setup = test_inference_setup, 111 .test_destroy = test_inference_destroy, 112 .test_driver = test_inference_ordered_driver, 113 .test_result = test_inference_ordered_result, 114 }; 115 116 ML_TEST_REGISTER(inference_ordered); 117