xref: /dpdk/app/test-mldev/test_common.c (revision 7c4da16289b957ffa83f9ddb901434025c4c351e)
129369778SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
229369778SSrikanth Yalavarthi  * Copyright (c) 2022 Marvell.
329369778SSrikanth Yalavarthi  */
429369778SSrikanth Yalavarthi 
529369778SSrikanth Yalavarthi #include <errno.h>
629369778SSrikanth Yalavarthi 
729369778SSrikanth Yalavarthi #include <rte_common.h>
8fccf444cSSrikanth Yalavarthi #include <rte_malloc.h>
929369778SSrikanth Yalavarthi #include <rte_memory.h>
1029369778SSrikanth Yalavarthi #include <rte_mldev.h>
1129369778SSrikanth Yalavarthi 
1229369778SSrikanth Yalavarthi #include "ml_common.h"
1329369778SSrikanth Yalavarthi #include "test_common.h"
1429369778SSrikanth Yalavarthi 
15fccf444cSSrikanth Yalavarthi #include <fcntl.h>
16fccf444cSSrikanth Yalavarthi #include <sys/mman.h>
17fccf444cSSrikanth Yalavarthi #include <sys/stat.h>
18fccf444cSSrikanth Yalavarthi #include <unistd.h>
19fccf444cSSrikanth Yalavarthi 
20fccf444cSSrikanth Yalavarthi int
ml_read_file(char * file,size_t * size,char ** buffer)21fccf444cSSrikanth Yalavarthi ml_read_file(char *file, size_t *size, char **buffer)
22fccf444cSSrikanth Yalavarthi {
23fccf444cSSrikanth Yalavarthi 	char *file_buffer = NULL;
24fccf444cSSrikanth Yalavarthi 	struct stat file_stat;
25fccf444cSSrikanth Yalavarthi 	char *file_map;
26fccf444cSSrikanth Yalavarthi 	int ret;
27fccf444cSSrikanth Yalavarthi 	int fd;
28fccf444cSSrikanth Yalavarthi 
29fccf444cSSrikanth Yalavarthi 	fd = open(file, O_RDONLY);
30fccf444cSSrikanth Yalavarthi 	if (fd == -1) {
31fccf444cSSrikanth Yalavarthi 		ml_err("Failed to open file: %s\n", file);
32fccf444cSSrikanth Yalavarthi 		return -errno;
33fccf444cSSrikanth Yalavarthi 	}
34fccf444cSSrikanth Yalavarthi 
35fccf444cSSrikanth Yalavarthi 	if (fstat(fd, &file_stat) != 0) {
36fccf444cSSrikanth Yalavarthi 		ml_err("fstat failed for file: %s\n", file);
37854f380fSSrikanth Yalavarthi 		close(fd);
38fccf444cSSrikanth Yalavarthi 		return -errno;
39fccf444cSSrikanth Yalavarthi 	}
40fccf444cSSrikanth Yalavarthi 
41fccf444cSSrikanth Yalavarthi 	file_buffer = malloc(file_stat.st_size);
42fccf444cSSrikanth Yalavarthi 	if (file_buffer == NULL) {
43fccf444cSSrikanth Yalavarthi 		ml_err("Failed to allocate memory: %s\n", file);
44fccf444cSSrikanth Yalavarthi 		ret = -ENOMEM;
45fccf444cSSrikanth Yalavarthi 		goto error;
46fccf444cSSrikanth Yalavarthi 	}
47fccf444cSSrikanth Yalavarthi 
48fccf444cSSrikanth Yalavarthi 	file_map = mmap(0, file_stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
49fccf444cSSrikanth Yalavarthi 	if (file_map == MAP_FAILED) {
50fccf444cSSrikanth Yalavarthi 		ml_err("Failed to map file: %s\n", file);
51fccf444cSSrikanth Yalavarthi 		ret = -errno;
52fccf444cSSrikanth Yalavarthi 		goto error;
53fccf444cSSrikanth Yalavarthi 	}
54fccf444cSSrikanth Yalavarthi 
55fccf444cSSrikanth Yalavarthi 	rte_memcpy(file_buffer, file_map, file_stat.st_size);
56fccf444cSSrikanth Yalavarthi 	munmap(file_map, file_stat.st_size);
57fccf444cSSrikanth Yalavarthi 	close(fd);
58fccf444cSSrikanth Yalavarthi 
59fccf444cSSrikanth Yalavarthi 	*size = file_stat.st_size;
60fccf444cSSrikanth Yalavarthi 	*buffer = file_buffer;
61fccf444cSSrikanth Yalavarthi 
62fccf444cSSrikanth Yalavarthi 	return 0;
63fccf444cSSrikanth Yalavarthi 
64fccf444cSSrikanth Yalavarthi error:
65fccf444cSSrikanth Yalavarthi 	free(file_buffer);
66fccf444cSSrikanth Yalavarthi 	close(fd);
67fccf444cSSrikanth Yalavarthi 
68fccf444cSSrikanth Yalavarthi 	return ret;
69fccf444cSSrikanth Yalavarthi }
70fccf444cSSrikanth Yalavarthi 
7129369778SSrikanth Yalavarthi bool
ml_test_cap_check(struct ml_options * opt)7229369778SSrikanth Yalavarthi ml_test_cap_check(struct ml_options *opt)
7329369778SSrikanth Yalavarthi {
7429369778SSrikanth Yalavarthi 	struct rte_ml_dev_info dev_info;
7529369778SSrikanth Yalavarthi 
7629369778SSrikanth Yalavarthi 	rte_ml_dev_info_get(opt->dev_id, &dev_info);
7729369778SSrikanth Yalavarthi 	if (dev_info.max_models == 0) {
7829369778SSrikanth Yalavarthi 		ml_err("Not enough mldev models supported = %u", dev_info.max_models);
7929369778SSrikanth Yalavarthi 		return false;
8029369778SSrikanth Yalavarthi 	}
8129369778SSrikanth Yalavarthi 
8229369778SSrikanth Yalavarthi 	return true;
8329369778SSrikanth Yalavarthi }
8429369778SSrikanth Yalavarthi 
8529369778SSrikanth Yalavarthi int
ml_test_opt_check(struct ml_options * opt)8629369778SSrikanth Yalavarthi ml_test_opt_check(struct ml_options *opt)
8729369778SSrikanth Yalavarthi {
8829369778SSrikanth Yalavarthi 	uint16_t dev_count;
8929369778SSrikanth Yalavarthi 	int socket_id;
9029369778SSrikanth Yalavarthi 
9129369778SSrikanth Yalavarthi 	RTE_SET_USED(opt);
9229369778SSrikanth Yalavarthi 
9329369778SSrikanth Yalavarthi 	dev_count = rte_ml_dev_count();
9429369778SSrikanth Yalavarthi 	if (dev_count == 0) {
9529369778SSrikanth Yalavarthi 		ml_err("No ML devices found");
9629369778SSrikanth Yalavarthi 		return -ENODEV;
9729369778SSrikanth Yalavarthi 	}
9829369778SSrikanth Yalavarthi 
9928a4a819SSrikanth Yalavarthi 	if ((opt->dev_id >= dev_count) || (opt->dev_id < 0)) {
10028a4a819SSrikanth Yalavarthi 		ml_err("Invalid option, dev_id = %d", opt->dev_id);
10129369778SSrikanth Yalavarthi 		return -EINVAL;
10229369778SSrikanth Yalavarthi 	}
10329369778SSrikanth Yalavarthi 
10429369778SSrikanth Yalavarthi 	socket_id = rte_ml_dev_socket_id(opt->dev_id);
10528a4a819SSrikanth Yalavarthi 	if ((opt->socket_id != SOCKET_ID_ANY) && (opt->socket_id != socket_id)) {
10629369778SSrikanth Yalavarthi 		ml_err("Invalid option, socket_id = %d\n", opt->socket_id);
10729369778SSrikanth Yalavarthi 		return -EINVAL;
10829369778SSrikanth Yalavarthi 	}
10929369778SSrikanth Yalavarthi 
110*7c4da162SSrikanth Yalavarthi 	if (opt->queue_pairs == 0) {
111*7c4da162SSrikanth Yalavarthi 		ml_err("Invalid option, queue_pairs = %d", opt->queue_pairs);
112*7c4da162SSrikanth Yalavarthi 		return -EINVAL;
113*7c4da162SSrikanth Yalavarthi 	}
114*7c4da162SSrikanth Yalavarthi 
115*7c4da162SSrikanth Yalavarthi 	if (opt->queue_size == 0) {
116*7c4da162SSrikanth Yalavarthi 		ml_err("Invalid option, queue_size = %d", opt->queue_size);
117*7c4da162SSrikanth Yalavarthi 		return -EINVAL;
118*7c4da162SSrikanth Yalavarthi 	}
119*7c4da162SSrikanth Yalavarthi 
12029369778SSrikanth Yalavarthi 	return 0;
12129369778SSrikanth Yalavarthi }
12229369778SSrikanth Yalavarthi 
12329369778SSrikanth Yalavarthi void
ml_test_opt_dump(struct ml_options * opt)12429369778SSrikanth Yalavarthi ml_test_opt_dump(struct ml_options *opt)
12529369778SSrikanth Yalavarthi {
12629369778SSrikanth Yalavarthi 	ml_options_dump(opt);
12729369778SSrikanth Yalavarthi }
12829369778SSrikanth Yalavarthi 
12929369778SSrikanth Yalavarthi int
ml_test_device_configure(struct ml_test * test,struct ml_options * opt)13029369778SSrikanth Yalavarthi ml_test_device_configure(struct ml_test *test, struct ml_options *opt)
13129369778SSrikanth Yalavarthi {
13229369778SSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
13329369778SSrikanth Yalavarthi 	struct rte_ml_dev_config dev_config;
13429369778SSrikanth Yalavarthi 	int ret;
13529369778SSrikanth Yalavarthi 
13629369778SSrikanth Yalavarthi 	ret = rte_ml_dev_info_get(opt->dev_id, &t->dev_info);
13729369778SSrikanth Yalavarthi 	if (ret != 0) {
13829369778SSrikanth Yalavarthi 		ml_err("Failed to get mldev info, dev_id = %d\n", opt->dev_id);
13929369778SSrikanth Yalavarthi 		return ret;
14029369778SSrikanth Yalavarthi 	}
14129369778SSrikanth Yalavarthi 
14229369778SSrikanth Yalavarthi 	/* configure device */
14329369778SSrikanth Yalavarthi 	dev_config.socket_id = opt->socket_id;
14429369778SSrikanth Yalavarthi 	dev_config.nb_models = t->dev_info.max_models;
145c0e87165SSrikanth Yalavarthi 	dev_config.nb_queue_pairs = opt->queue_pairs;
14629369778SSrikanth Yalavarthi 	ret = rte_ml_dev_configure(opt->dev_id, &dev_config);
14729369778SSrikanth Yalavarthi 	if (ret != 0) {
14829369778SSrikanth Yalavarthi 		ml_err("Failed to configure ml device, dev_id = %d\n", opt->dev_id);
14929369778SSrikanth Yalavarthi 		return ret;
15029369778SSrikanth Yalavarthi 	}
15129369778SSrikanth Yalavarthi 
15229369778SSrikanth Yalavarthi 	return 0;
15329369778SSrikanth Yalavarthi }
15429369778SSrikanth Yalavarthi 
15529369778SSrikanth Yalavarthi int
ml_test_device_close(struct ml_test * test,struct ml_options * opt)15629369778SSrikanth Yalavarthi ml_test_device_close(struct ml_test *test, struct ml_options *opt)
15729369778SSrikanth Yalavarthi {
15829369778SSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
15929369778SSrikanth Yalavarthi 	int ret = 0;
16029369778SSrikanth Yalavarthi 
16129369778SSrikanth Yalavarthi 	RTE_SET_USED(t);
16229369778SSrikanth Yalavarthi 
16329369778SSrikanth Yalavarthi 	/* close device */
16429369778SSrikanth Yalavarthi 	ret = rte_ml_dev_close(opt->dev_id);
16529369778SSrikanth Yalavarthi 	if (ret != 0)
16629369778SSrikanth Yalavarthi 		ml_err("Failed to close ML device, dev_id = %d\n", opt->dev_id);
16729369778SSrikanth Yalavarthi 
16829369778SSrikanth Yalavarthi 	return ret;
16929369778SSrikanth Yalavarthi }
17029369778SSrikanth Yalavarthi 
17129369778SSrikanth Yalavarthi int
ml_test_device_start(struct ml_test * test,struct ml_options * opt)17229369778SSrikanth Yalavarthi ml_test_device_start(struct ml_test *test, struct ml_options *opt)
17329369778SSrikanth Yalavarthi {
17429369778SSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
17529369778SSrikanth Yalavarthi 	int ret;
17629369778SSrikanth Yalavarthi 
17729369778SSrikanth Yalavarthi 	RTE_SET_USED(t);
17829369778SSrikanth Yalavarthi 
17929369778SSrikanth Yalavarthi 	/* start device */
18029369778SSrikanth Yalavarthi 	ret = rte_ml_dev_start(opt->dev_id);
18129369778SSrikanth Yalavarthi 	if (ret != 0) {
18229369778SSrikanth Yalavarthi 		ml_err("Failed to start ml device, dev_id = %d\n", opt->dev_id);
18329369778SSrikanth Yalavarthi 		return ret;
18429369778SSrikanth Yalavarthi 	}
18529369778SSrikanth Yalavarthi 
18629369778SSrikanth Yalavarthi 	return 0;
18729369778SSrikanth Yalavarthi }
18829369778SSrikanth Yalavarthi 
18929369778SSrikanth Yalavarthi int
ml_test_device_stop(struct ml_test * test,struct ml_options * opt)19029369778SSrikanth Yalavarthi ml_test_device_stop(struct ml_test *test, struct ml_options *opt)
19129369778SSrikanth Yalavarthi {
19229369778SSrikanth Yalavarthi 	struct test_common *t = ml_test_priv(test);
19329369778SSrikanth Yalavarthi 	int ret = 0;
19429369778SSrikanth Yalavarthi 
19529369778SSrikanth Yalavarthi 	RTE_SET_USED(t);
19629369778SSrikanth Yalavarthi 
19729369778SSrikanth Yalavarthi 	/* stop device */
19829369778SSrikanth Yalavarthi 	ret = rte_ml_dev_stop(opt->dev_id);
19929369778SSrikanth Yalavarthi 	if (ret != 0)
20029369778SSrikanth Yalavarthi 		ml_err("Failed to stop ML device, dev_id = %d\n", opt->dev_id);
20129369778SSrikanth Yalavarthi 
20229369778SSrikanth Yalavarthi 	return ret;
20329369778SSrikanth Yalavarthi }
204