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