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