xref: /aosp_15_r20/external/ublksrv/utils/nop.c (revision 94c4a1e103eb1715230460aab379dff275992c20)
1 /* SPDX-License-Identifier: MIT */
2 #include <errno.h>
3 #include <stdio.h>
4 #include <unistd.h>
5 #include <stdlib.h>
6 #include <string.h>
7 #include <fcntl.h>
8 #include <liburing.h>
9 
10 /* gcc -g -o nop nop.c -luring */
11 
12 /* test nop over uring and see io_uring is working */
test_nop()13 static int test_nop()
14 {
15 	struct io_uring _ring;
16 	struct io_uring *ring = &_ring;
17 	struct io_uring_params p = { };
18 	int ret, i;
19 	struct io_uring_cqe *cqe;
20 	struct io_uring_sqe *sqe;
21 
22 	p.flags = IORING_SETUP_SQE128;
23 	ret = io_uring_queue_init_params(64, ring, &p);
24 	if (ret < 0) {
25 		fprintf(stderr, "ring can't be setup %d\n", ret);
26 		goto err;
27 	}
28 
29 	ret = -EINVAL;
30 	sqe = io_uring_get_sqe(ring);
31 	if (!sqe) {
32 		fprintf(stderr, "get sqe failed ret %d\n", ret);
33 		return ret;
34 	}
35 
36 	io_uring_prep_nop(sqe);
37 	sqe->user_data = 1;
38 	ret = io_uring_submit(ring);
39 	if (ret <= 0) {
40 		fprintf(stderr, "sqe submit failed: %d\n", ret);
41 		goto err;
42 	}
43 
44 	ret = io_uring_wait_cqe(ring, &cqe);
45 	if (ret < 0) {
46 		fprintf(stderr, "wait completion %d\n", ret);
47 		goto err;
48 	}
49 	if (!cqe->user_data) {
50 		fprintf(stderr, "Unexpected 0 user_data\n");
51 		goto err;
52 	}
53 	io_uring_cqe_seen(ring, cqe);
54 	fprintf(stdout, "nop over uring run successfully\n");
55 err:
56 	io_uring_queue_exit(ring);
57 	return ret;
58 }
59 
main(int argc,char * argv[])60 int main(int argc, char *argv[])
61 {
62 	test_nop();
63 
64 	return 0;
65 }
66