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