xref: /aosp_15_r20/external/ublksrv/utils/nop.c (revision 94c4a1e103eb1715230460aab379dff275992c20)
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