xref: /dpdk/app/test-mldev/test_model_ops.c (revision a1474e134dd5561a678984a05ac03be340715b6f)
1f6661e6dSSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2f6661e6dSSrikanth Yalavarthi  * Copyright (c) 2022 Marvell.
3f6661e6dSSrikanth Yalavarthi  */
4f6661e6dSSrikanth Yalavarthi 
5f6661e6dSSrikanth Yalavarthi #include <unistd.h>
6f6661e6dSSrikanth Yalavarthi 
7f6661e6dSSrikanth Yalavarthi #include <rte_common.h>
8f6661e6dSSrikanth Yalavarthi #include <rte_malloc.h>
9f6661e6dSSrikanth Yalavarthi #include <rte_mldev.h>
10f6661e6dSSrikanth Yalavarthi 
11f6661e6dSSrikanth Yalavarthi #include "test_model_ops.h"
1277fefa0aSSrikanth Yalavarthi #include "test_stats.h"
13f6661e6dSSrikanth Yalavarthi 
14f6661e6dSSrikanth Yalavarthi static bool
test_model_ops_cap_check(struct ml_options * opt)15f6661e6dSSrikanth Yalavarthi test_model_ops_cap_check(struct ml_options *opt)
16f6661e6dSSrikanth Yalavarthi {
17f6661e6dSSrikanth Yalavarthi 	if (!ml_test_cap_check(opt))
18f6661e6dSSrikanth Yalavarthi 		return false;
19f6661e6dSSrikanth Yalavarthi 
20f6661e6dSSrikanth Yalavarthi 	return true;
21f6661e6dSSrikanth Yalavarthi }
22f6661e6dSSrikanth Yalavarthi 
23f6661e6dSSrikanth Yalavarthi static int
test_model_ops_opt_check(struct ml_options * opt)24f6661e6dSSrikanth Yalavarthi test_model_ops_opt_check(struct ml_options *opt)
25f6661e6dSSrikanth Yalavarthi {
26f6661e6dSSrikanth Yalavarthi 	uint32_t i;
27f6661e6dSSrikanth Yalavarthi 	int ret;
28f6661e6dSSrikanth Yalavarthi 
29f6661e6dSSrikanth Yalavarthi 	/* check common opts */
30f6661e6dSSrikanth Yalavarthi 	ret = ml_test_opt_check(opt);
31f6661e6dSSrikanth Yalavarthi 	if (ret != 0)
32f6661e6dSSrikanth Yalavarthi 		return ret;
33f6661e6dSSrikanth Yalavarthi 
34*a1474e13SSrikanth Yalavarthi 	/* check for at least one model */
35*a1474e13SSrikanth Yalavarthi 	if (opt->nb_filelist == 0) {
36*a1474e13SSrikanth Yalavarthi 		ml_err("Models list empty, need at least one model to run the test\n");
37*a1474e13SSrikanth Yalavarthi 		return -EINVAL;
38*a1474e13SSrikanth Yalavarthi 	}
39*a1474e13SSrikanth Yalavarthi 
40f6661e6dSSrikanth Yalavarthi 	/* check model file availability */
41f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
42f6661e6dSSrikanth Yalavarthi 		if (access(opt->filelist[i].model, F_OK) == -1) {
43f6661e6dSSrikanth Yalavarthi 			ml_err("Model file not available: id = %u, file = %s", i,
44f6661e6dSSrikanth Yalavarthi 			       opt->filelist[i].model);
45f6661e6dSSrikanth Yalavarthi 			return -ENOENT;
46f6661e6dSSrikanth Yalavarthi 		}
47f6661e6dSSrikanth Yalavarthi 	}
48f6661e6dSSrikanth Yalavarthi 
49f6661e6dSSrikanth Yalavarthi 	return 0;
50f6661e6dSSrikanth Yalavarthi }
51f6661e6dSSrikanth Yalavarthi 
52f6661e6dSSrikanth Yalavarthi static void
test_model_ops_opt_dump(struct ml_options * opt)53f6661e6dSSrikanth Yalavarthi test_model_ops_opt_dump(struct ml_options *opt)
54f6661e6dSSrikanth Yalavarthi {
55f6661e6dSSrikanth Yalavarthi 	uint32_t i;
56f6661e6dSSrikanth Yalavarthi 
57f6661e6dSSrikanth Yalavarthi 	/* dump common opts */
58f6661e6dSSrikanth Yalavarthi 	ml_test_opt_dump(opt);
59f6661e6dSSrikanth Yalavarthi 
60f6661e6dSSrikanth Yalavarthi 	/* dump test specific opts */
61f6661e6dSSrikanth Yalavarthi 	ml_dump_begin("models");
62f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
63f6661e6dSSrikanth Yalavarthi 		ml_dump_list("model", i, opt->filelist[i].model);
64f6661e6dSSrikanth Yalavarthi 	ml_dump_end;
65f6661e6dSSrikanth Yalavarthi }
66f6661e6dSSrikanth Yalavarthi 
67f6661e6dSSrikanth Yalavarthi static int
test_model_ops_setup(struct ml_test * test,struct ml_options * opt)68f6661e6dSSrikanth Yalavarthi test_model_ops_setup(struct ml_test *test, struct ml_options *opt)
69f6661e6dSSrikanth Yalavarthi {
70f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
71f6661e6dSSrikanth Yalavarthi 	void *test_model_ops;
72f6661e6dSSrikanth Yalavarthi 	int ret = 0;
73f6661e6dSSrikanth Yalavarthi 	uint32_t i;
74f6661e6dSSrikanth Yalavarthi 
75f6661e6dSSrikanth Yalavarthi 	/* allocate model ops test structure */
76f6661e6dSSrikanth Yalavarthi 	test_model_ops = rte_zmalloc_socket(test->name, sizeof(struct test_model_ops),
77f6661e6dSSrikanth Yalavarthi 					    RTE_CACHE_LINE_SIZE, opt->socket_id);
78f6661e6dSSrikanth Yalavarthi 	if (test_model_ops == NULL) {
79f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to allocate memory for test_model");
80f6661e6dSSrikanth Yalavarthi 		ret = -ENOMEM;
81f6661e6dSSrikanth Yalavarthi 		goto error;
82f6661e6dSSrikanth Yalavarthi 	}
83f6661e6dSSrikanth Yalavarthi 	test->test_priv = test_model_ops;
84f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
85f6661e6dSSrikanth Yalavarthi 
86f6661e6dSSrikanth Yalavarthi 	t->cmn.result = ML_TEST_FAILED;
87f6661e6dSSrikanth Yalavarthi 	t->cmn.opt = opt;
88f6661e6dSSrikanth Yalavarthi 
89f6661e6dSSrikanth Yalavarthi 	/* get device info */
90f6661e6dSSrikanth Yalavarthi 	ret = rte_ml_dev_info_get(opt->dev_id, &t->cmn.dev_info);
91f6661e6dSSrikanth Yalavarthi 	if (ret < 0) {
92f6661e6dSSrikanth Yalavarthi 		ml_err("Failed to get device info");
93f6661e6dSSrikanth Yalavarthi 		goto error;
94f6661e6dSSrikanth Yalavarthi 	}
95f6661e6dSSrikanth Yalavarthi 
96f6661e6dSSrikanth Yalavarthi 	/* set model initial state */
97f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
98f6661e6dSSrikanth Yalavarthi 		t->model[i].state = MODEL_INITIAL;
99f6661e6dSSrikanth Yalavarthi 
100f6661e6dSSrikanth Yalavarthi 	return 0;
101f6661e6dSSrikanth Yalavarthi 
102f6661e6dSSrikanth Yalavarthi error:
103f6661e6dSSrikanth Yalavarthi 	rte_free(test_model_ops);
104f6661e6dSSrikanth Yalavarthi 
105f6661e6dSSrikanth Yalavarthi 	return ret;
106f6661e6dSSrikanth Yalavarthi }
107f6661e6dSSrikanth Yalavarthi 
108f6661e6dSSrikanth Yalavarthi static void
test_model_ops_destroy(struct ml_test * test,struct ml_options * opt)109f6661e6dSSrikanth Yalavarthi test_model_ops_destroy(struct ml_test *test, struct ml_options *opt)
110f6661e6dSSrikanth Yalavarthi {
111f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
112f6661e6dSSrikanth Yalavarthi 
113f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(opt);
114f6661e6dSSrikanth Yalavarthi 
115f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
116f6661e6dSSrikanth Yalavarthi 	rte_free(t);
117f6661e6dSSrikanth Yalavarthi }
118f6661e6dSSrikanth Yalavarthi 
119f6661e6dSSrikanth Yalavarthi static int
test_model_ops_mldev_setup(struct ml_test * test,struct ml_options * opt)120f6661e6dSSrikanth Yalavarthi test_model_ops_mldev_setup(struct ml_test *test, struct ml_options *opt)
121f6661e6dSSrikanth Yalavarthi {
122f6661e6dSSrikanth Yalavarthi 	int ret;
123f6661e6dSSrikanth Yalavarthi 
124f6661e6dSSrikanth Yalavarthi 	ret = ml_test_device_configure(test, opt);
125f6661e6dSSrikanth Yalavarthi 	if (ret != 0)
126f6661e6dSSrikanth Yalavarthi 		return ret;
127f6661e6dSSrikanth Yalavarthi 
128f6661e6dSSrikanth Yalavarthi 	ret = ml_test_device_start(test, opt);
129f6661e6dSSrikanth Yalavarthi 	if (ret != 0)
130f6661e6dSSrikanth Yalavarthi 		goto error;
131f6661e6dSSrikanth Yalavarthi 
132f6661e6dSSrikanth Yalavarthi 	return 0;
133f6661e6dSSrikanth Yalavarthi 
134f6661e6dSSrikanth Yalavarthi error:
135f6661e6dSSrikanth Yalavarthi 	ml_test_device_close(test, opt);
136f6661e6dSSrikanth Yalavarthi 
137f6661e6dSSrikanth Yalavarthi 	return ret;
138f6661e6dSSrikanth Yalavarthi }
139f6661e6dSSrikanth Yalavarthi 
140f6661e6dSSrikanth Yalavarthi static int
test_model_ops_mldev_destroy(struct ml_test * test,struct ml_options * opt)141f6661e6dSSrikanth Yalavarthi test_model_ops_mldev_destroy(struct ml_test *test, struct ml_options *opt)
142f6661e6dSSrikanth Yalavarthi {
143f6661e6dSSrikanth Yalavarthi 	int ret;
144f6661e6dSSrikanth Yalavarthi 
145f6661e6dSSrikanth Yalavarthi 	ret = ml_test_device_stop(test, opt);
146f6661e6dSSrikanth Yalavarthi 	if (ret != 0)
147f6661e6dSSrikanth Yalavarthi 		goto error;
148f6661e6dSSrikanth Yalavarthi 
149f6661e6dSSrikanth Yalavarthi 	ret = ml_test_device_close(test, opt);
150f6661e6dSSrikanth Yalavarthi 	if (ret != 0)
151f6661e6dSSrikanth Yalavarthi 		return ret;
152f6661e6dSSrikanth Yalavarthi 
153f6661e6dSSrikanth Yalavarthi 	return 0;
154f6661e6dSSrikanth Yalavarthi 
155f6661e6dSSrikanth Yalavarthi error:
156f6661e6dSSrikanth Yalavarthi 	ml_test_device_close(test, opt);
157f6661e6dSSrikanth Yalavarthi 
158f6661e6dSSrikanth Yalavarthi 	return ret;
159f6661e6dSSrikanth Yalavarthi }
160f6661e6dSSrikanth Yalavarthi 
161f6661e6dSSrikanth Yalavarthi /* Sub-test A: (load -> start -> stop -> unload) x n */
162f6661e6dSSrikanth Yalavarthi static int
test_model_ops_subtest_a(struct ml_test * test,struct ml_options * opt)163f6661e6dSSrikanth Yalavarthi test_model_ops_subtest_a(struct ml_test *test, struct ml_options *opt)
164f6661e6dSSrikanth Yalavarthi {
165f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
166f6661e6dSSrikanth Yalavarthi 	int ret = 0;
167f6661e6dSSrikanth Yalavarthi 	uint32_t i;
168f6661e6dSSrikanth Yalavarthi 
169f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
170f6661e6dSSrikanth Yalavarthi 
171f6661e6dSSrikanth Yalavarthi 	/* load + start + stop + unload */
172f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
173f6661e6dSSrikanth Yalavarthi 		ret = ml_model_load(test, opt, &t->model[i], i);
174f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
175f6661e6dSSrikanth Yalavarthi 			goto error;
176f6661e6dSSrikanth Yalavarthi 
177f6661e6dSSrikanth Yalavarthi 		ret = ml_model_start(test, opt, &t->model[i], i);
178f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
179f6661e6dSSrikanth Yalavarthi 			goto error;
180f6661e6dSSrikanth Yalavarthi 
181f6661e6dSSrikanth Yalavarthi 		ret = ml_model_stop(test, opt, &t->model[i], i);
182f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
183f6661e6dSSrikanth Yalavarthi 			goto error;
184f6661e6dSSrikanth Yalavarthi 
185f6661e6dSSrikanth Yalavarthi 		ret = ml_model_unload(test, opt, &t->model[i], i);
186f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
187f6661e6dSSrikanth Yalavarthi 			goto error;
188f6661e6dSSrikanth Yalavarthi 	}
189f6661e6dSSrikanth Yalavarthi 
190f6661e6dSSrikanth Yalavarthi error:
191f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
192f6661e6dSSrikanth Yalavarthi 		ml_model_stop(test, opt, &t->model[i], i);
193f6661e6dSSrikanth Yalavarthi 
194f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
195f6661e6dSSrikanth Yalavarthi 		ml_model_unload(test, opt, &t->model[i], i);
196f6661e6dSSrikanth Yalavarthi 
197f6661e6dSSrikanth Yalavarthi 	return ret;
198f6661e6dSSrikanth Yalavarthi }
199f6661e6dSSrikanth Yalavarthi 
200f6661e6dSSrikanth Yalavarthi /* Sub-test B: load x n -> start x n -> stop x n -> unload x n */
201f6661e6dSSrikanth Yalavarthi static int
test_model_ops_subtest_b(struct ml_test * test,struct ml_options * opt)202f6661e6dSSrikanth Yalavarthi test_model_ops_subtest_b(struct ml_test *test, struct ml_options *opt)
203f6661e6dSSrikanth Yalavarthi {
204f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
205f6661e6dSSrikanth Yalavarthi 	int ret = 0;
206f6661e6dSSrikanth Yalavarthi 	uint32_t i;
207f6661e6dSSrikanth Yalavarthi 
208f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
209f6661e6dSSrikanth Yalavarthi 
210f6661e6dSSrikanth Yalavarthi 	/* load */
211f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
212f6661e6dSSrikanth Yalavarthi 		ret = ml_model_load(test, opt, &t->model[i], i);
213f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
214f6661e6dSSrikanth Yalavarthi 			goto error;
215f6661e6dSSrikanth Yalavarthi 	}
216f6661e6dSSrikanth Yalavarthi 
217f6661e6dSSrikanth Yalavarthi 	/* start */
218f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
219f6661e6dSSrikanth Yalavarthi 		ret = ml_model_start(test, opt, &t->model[i], i);
220f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
221f6661e6dSSrikanth Yalavarthi 			goto error;
222f6661e6dSSrikanth Yalavarthi 	}
223f6661e6dSSrikanth Yalavarthi 
224f6661e6dSSrikanth Yalavarthi 	/* stop */
225f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
226f6661e6dSSrikanth Yalavarthi 		ret = ml_model_stop(test, opt, &t->model[i], i);
227f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
228f6661e6dSSrikanth Yalavarthi 			goto error;
229f6661e6dSSrikanth Yalavarthi 	}
230f6661e6dSSrikanth Yalavarthi 
231f6661e6dSSrikanth Yalavarthi 	/* unload */
232f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
233f6661e6dSSrikanth Yalavarthi 		ret = ml_model_unload(test, opt, &t->model[i], i);
234f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
235f6661e6dSSrikanth Yalavarthi 			goto error;
236f6661e6dSSrikanth Yalavarthi 	}
237f6661e6dSSrikanth Yalavarthi 
238f6661e6dSSrikanth Yalavarthi 	return 0;
239f6661e6dSSrikanth Yalavarthi 
240f6661e6dSSrikanth Yalavarthi error:
241f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
242f6661e6dSSrikanth Yalavarthi 		ml_model_stop(test, opt, &t->model[i], i);
243f6661e6dSSrikanth Yalavarthi 
244f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
245f6661e6dSSrikanth Yalavarthi 		ml_model_unload(test, opt, &t->model[i], i);
246f6661e6dSSrikanth Yalavarthi 
247f6661e6dSSrikanth Yalavarthi 	return ret;
248f6661e6dSSrikanth Yalavarthi }
249f6661e6dSSrikanth Yalavarthi 
250f6661e6dSSrikanth Yalavarthi /* Sub-test C: load x n + (start  + stop) x n + unload x n */
251f6661e6dSSrikanth Yalavarthi static int
test_model_ops_subtest_c(struct ml_test * test,struct ml_options * opt)252f6661e6dSSrikanth Yalavarthi test_model_ops_subtest_c(struct ml_test *test, struct ml_options *opt)
253f6661e6dSSrikanth Yalavarthi {
254f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
255f6661e6dSSrikanth Yalavarthi 	int ret = 0;
256f6661e6dSSrikanth Yalavarthi 	uint32_t i;
257f6661e6dSSrikanth Yalavarthi 
258f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
259f6661e6dSSrikanth Yalavarthi 
260f6661e6dSSrikanth Yalavarthi 	/* load */
261f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
262f6661e6dSSrikanth Yalavarthi 		ret = ml_model_load(test, opt, &t->model[i], i);
263f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
264f6661e6dSSrikanth Yalavarthi 			goto error;
265f6661e6dSSrikanth Yalavarthi 	}
266f6661e6dSSrikanth Yalavarthi 
267f6661e6dSSrikanth Yalavarthi 	/* start + stop */
268f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
269f6661e6dSSrikanth Yalavarthi 		ret = ml_model_start(test, opt, &t->model[i], i);
270f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
271f6661e6dSSrikanth Yalavarthi 			goto error;
272f6661e6dSSrikanth Yalavarthi 
273f6661e6dSSrikanth Yalavarthi 		ret = ml_model_stop(test, opt, &t->model[i], i);
274f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
275f6661e6dSSrikanth Yalavarthi 			goto error;
276f6661e6dSSrikanth Yalavarthi 	}
277f6661e6dSSrikanth Yalavarthi 
278f6661e6dSSrikanth Yalavarthi 	/* unload */
279f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
280f6661e6dSSrikanth Yalavarthi 		ret = ml_model_unload(test, opt, &t->model[i], i);
281f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
282f6661e6dSSrikanth Yalavarthi 			goto error;
283f6661e6dSSrikanth Yalavarthi 	}
284f6661e6dSSrikanth Yalavarthi 
285f6661e6dSSrikanth Yalavarthi 	return 0;
286f6661e6dSSrikanth Yalavarthi 
287f6661e6dSSrikanth Yalavarthi error:
288f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
289f6661e6dSSrikanth Yalavarthi 		ml_model_stop(test, opt, &t->model[i], i);
290f6661e6dSSrikanth Yalavarthi 
291f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
292f6661e6dSSrikanth Yalavarthi 		ml_model_unload(test, opt, &t->model[i], i);
293f6661e6dSSrikanth Yalavarthi 
294f6661e6dSSrikanth Yalavarthi 	return ret;
295f6661e6dSSrikanth Yalavarthi }
296f6661e6dSSrikanth Yalavarthi 
297f6661e6dSSrikanth Yalavarthi /* Sub-test D: (load + start) x n -> (stop + unload) x n */
298f6661e6dSSrikanth Yalavarthi static int
test_model_ops_subtest_d(struct ml_test * test,struct ml_options * opt)299f6661e6dSSrikanth Yalavarthi test_model_ops_subtest_d(struct ml_test *test, struct ml_options *opt)
300f6661e6dSSrikanth Yalavarthi {
301f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
302f6661e6dSSrikanth Yalavarthi 	int ret = 0;
303f6661e6dSSrikanth Yalavarthi 	uint32_t i;
304f6661e6dSSrikanth Yalavarthi 
305f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
306f6661e6dSSrikanth Yalavarthi 
307f6661e6dSSrikanth Yalavarthi 	/* load + start */
308f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
309f6661e6dSSrikanth Yalavarthi 		ret = ml_model_load(test, opt, &t->model[i], i);
310f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
311f6661e6dSSrikanth Yalavarthi 			goto error;
312f6661e6dSSrikanth Yalavarthi 
313f6661e6dSSrikanth Yalavarthi 		ret = ml_model_start(test, opt, &t->model[i], i);
314f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
315f6661e6dSSrikanth Yalavarthi 			goto error;
316f6661e6dSSrikanth Yalavarthi 	}
317f6661e6dSSrikanth Yalavarthi 
318f6661e6dSSrikanth Yalavarthi 	/* stop + unload */
319f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++) {
320f6661e6dSSrikanth Yalavarthi 		ret = ml_model_stop(test, opt, &t->model[i], i);
321f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
322f6661e6dSSrikanth Yalavarthi 			goto error;
323f6661e6dSSrikanth Yalavarthi 
324f6661e6dSSrikanth Yalavarthi 		ret = ml_model_unload(test, opt, &t->model[i], i);
325f6661e6dSSrikanth Yalavarthi 		if (ret != 0)
326f6661e6dSSrikanth Yalavarthi 			goto error;
327f6661e6dSSrikanth Yalavarthi 	}
328f6661e6dSSrikanth Yalavarthi 
329f6661e6dSSrikanth Yalavarthi 	return 0;
330f6661e6dSSrikanth Yalavarthi 
331f6661e6dSSrikanth Yalavarthi error:
332f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
333f6661e6dSSrikanth Yalavarthi 		ml_model_stop(test, opt, &t->model[i], i);
334f6661e6dSSrikanth Yalavarthi 
335f6661e6dSSrikanth Yalavarthi 	for (i = 0; i < opt->nb_filelist; i++)
336f6661e6dSSrikanth Yalavarthi 		ml_model_unload(test, opt, &t->model[i], i);
337f6661e6dSSrikanth Yalavarthi 
338f6661e6dSSrikanth Yalavarthi 	return ret;
339f6661e6dSSrikanth Yalavarthi }
340f6661e6dSSrikanth Yalavarthi 
341f6661e6dSSrikanth Yalavarthi static int
test_model_ops_driver(struct ml_test * test,struct ml_options * opt)342f6661e6dSSrikanth Yalavarthi test_model_ops_driver(struct ml_test *test, struct ml_options *opt)
343f6661e6dSSrikanth Yalavarthi {
344f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
345f6661e6dSSrikanth Yalavarthi 	int ret = 0;
346f6661e6dSSrikanth Yalavarthi 
347f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
348f6661e6dSSrikanth Yalavarthi 
349f6661e6dSSrikanth Yalavarthi 	/* device setup */
350f6661e6dSSrikanth Yalavarthi 	ret = test_model_ops_mldev_setup(test, opt);
351f6661e6dSSrikanth Yalavarthi 	if (ret != 0)
352f6661e6dSSrikanth Yalavarthi 		return ret;
353f6661e6dSSrikanth Yalavarthi 
354f6661e6dSSrikanth Yalavarthi 	printf("\n");
355f6661e6dSSrikanth Yalavarthi 
356f6661e6dSSrikanth Yalavarthi 	/* sub-test A */
357f6661e6dSSrikanth Yalavarthi 	ret = test_model_ops_subtest_a(test, opt);
358f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
359f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test A: " CLRED "%s" CLNRM "\n", "Failed");
360f6661e6dSSrikanth Yalavarthi 		goto error;
361f6661e6dSSrikanth Yalavarthi 	} else {
362f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test A: " CLYEL "%s" CLNRM "\n", "Passed");
363f6661e6dSSrikanth Yalavarthi 	}
364f6661e6dSSrikanth Yalavarthi 
365f6661e6dSSrikanth Yalavarthi 	/* sub-test B */
366f6661e6dSSrikanth Yalavarthi 	ret = test_model_ops_subtest_b(test, opt);
367f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
368f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test B: " CLRED "%s" CLNRM "\n", "Failed");
369f6661e6dSSrikanth Yalavarthi 		goto error;
370f6661e6dSSrikanth Yalavarthi 	} else {
371f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test B: " CLYEL "%s" CLNRM "\n", "Passed");
372f6661e6dSSrikanth Yalavarthi 	}
373f6661e6dSSrikanth Yalavarthi 
374f6661e6dSSrikanth Yalavarthi 	/* sub-test C */
375f6661e6dSSrikanth Yalavarthi 	ret = test_model_ops_subtest_c(test, opt);
376f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
377f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test C: " CLRED "%s" CLNRM "\n", "Failed");
378f6661e6dSSrikanth Yalavarthi 		goto error;
379f6661e6dSSrikanth Yalavarthi 	} else {
380f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test C: " CLYEL "%s" CLNRM "\n", "Passed");
381f6661e6dSSrikanth Yalavarthi 	}
382f6661e6dSSrikanth Yalavarthi 
383f6661e6dSSrikanth Yalavarthi 	/* sub-test D */
384f6661e6dSSrikanth Yalavarthi 	ret = test_model_ops_subtest_d(test, opt);
385f6661e6dSSrikanth Yalavarthi 	if (ret != 0) {
386f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test D: " CLRED "%s" CLNRM "\n", "Failed");
387f6661e6dSSrikanth Yalavarthi 		goto error;
388f6661e6dSSrikanth Yalavarthi 	} else {
389f6661e6dSSrikanth Yalavarthi 		printf("Model Ops Sub-test D: " CLYEL "%s" CLNRM "\n", "Passed");
390f6661e6dSSrikanth Yalavarthi 	}
391f6661e6dSSrikanth Yalavarthi 
392f6661e6dSSrikanth Yalavarthi 	printf("\n");
393f6661e6dSSrikanth Yalavarthi 
39477fefa0aSSrikanth Yalavarthi 	ml_stats_get(test, opt, RTE_ML_DEV_XSTATS_DEVICE, -1);
39577fefa0aSSrikanth Yalavarthi 
396f6661e6dSSrikanth Yalavarthi 	/* device destroy */
397f6661e6dSSrikanth Yalavarthi 	ret = test_model_ops_mldev_destroy(test, opt);
398f6661e6dSSrikanth Yalavarthi 	if (ret != 0)
399f6661e6dSSrikanth Yalavarthi 		return ret;
400f6661e6dSSrikanth Yalavarthi 
401f6661e6dSSrikanth Yalavarthi 	t->cmn.result = ML_TEST_SUCCESS;
402f6661e6dSSrikanth Yalavarthi 
403f6661e6dSSrikanth Yalavarthi 	return 0;
404f6661e6dSSrikanth Yalavarthi 
405f6661e6dSSrikanth Yalavarthi error:
406f6661e6dSSrikanth Yalavarthi 	test_model_ops_mldev_destroy(test, opt);
407f6661e6dSSrikanth Yalavarthi 
408f6661e6dSSrikanth Yalavarthi 	t->cmn.result = ML_TEST_FAILED;
409f6661e6dSSrikanth Yalavarthi 
410f6661e6dSSrikanth Yalavarthi 	return ret;
411f6661e6dSSrikanth Yalavarthi }
412f6661e6dSSrikanth Yalavarthi 
413f6661e6dSSrikanth Yalavarthi static int
test_model_ops_result(struct ml_test * test,struct ml_options * opt)414f6661e6dSSrikanth Yalavarthi test_model_ops_result(struct ml_test *test, struct ml_options *opt)
415f6661e6dSSrikanth Yalavarthi {
416f6661e6dSSrikanth Yalavarthi 	struct test_model_ops *t;
417f6661e6dSSrikanth Yalavarthi 
418f6661e6dSSrikanth Yalavarthi 	RTE_SET_USED(opt);
419f6661e6dSSrikanth Yalavarthi 
420f6661e6dSSrikanth Yalavarthi 	t = ml_test_priv(test);
421f6661e6dSSrikanth Yalavarthi 
422f6661e6dSSrikanth Yalavarthi 	return t->cmn.result;
423f6661e6dSSrikanth Yalavarthi }
424f6661e6dSSrikanth Yalavarthi 
425f6661e6dSSrikanth Yalavarthi static const struct ml_test_ops model_ops = {
426f6661e6dSSrikanth Yalavarthi 	.cap_check = test_model_ops_cap_check,
427f6661e6dSSrikanth Yalavarthi 	.opt_check = test_model_ops_opt_check,
428f6661e6dSSrikanth Yalavarthi 	.opt_dump = test_model_ops_opt_dump,
429f6661e6dSSrikanth Yalavarthi 	.test_setup = test_model_ops_setup,
430f6661e6dSSrikanth Yalavarthi 	.test_destroy = test_model_ops_destroy,
431f6661e6dSSrikanth Yalavarthi 	.test_driver = test_model_ops_driver,
432f6661e6dSSrikanth Yalavarthi 	.test_result = test_model_ops_result,
433f6661e6dSSrikanth Yalavarthi };
434f6661e6dSSrikanth Yalavarthi 
435f6661e6dSSrikanth Yalavarthi ML_TEST_REGISTER(model_ops);
436