• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: MIT */
2 #include <stdio.h>
3 #include <time.h>
4 #include <sys/time.h>
5 #include "liburing.h"
6 #include "helpers.h"
7 
main(int argc,char * argv[])8 int main(int argc, char *argv[])
9 {
10 	struct __kernel_timespec ts1, ts2;
11 	struct io_uring_cqe *cqe;
12 	struct io_uring_sqe *sqe;
13 	struct io_uring ring;
14 	unsigned long msec;
15 	struct timeval tv;
16 	int ret;
17 
18 	if (argc > 1)
19 		return T_EXIT_SKIP;
20 
21 	ret = io_uring_queue_init(32, &ring, 0);
22 	if (ret) {
23 		fprintf(stderr, "io_uring_queue_init=%d\n", ret);
24 		return T_EXIT_FAIL;
25 	}
26 
27 	sqe = io_uring_get_sqe(&ring);
28 	io_uring_prep_nop(sqe);
29 	ret = io_uring_submit(&ring);
30 	if (ret != 1) {
31 		fprintf(stderr, "io_uring_submit1=%d\n", ret);
32 		return T_EXIT_FAIL;
33 	}
34 
35 
36 	ts1.tv_sec = 5,
37 	ts1.tv_nsec = 0;
38 	ret = io_uring_wait_cqe_timeout(&ring, &cqe, &ts1);
39 	if (ret) {
40 		fprintf(stderr, "io_uring_wait_cqe_timeout=%d\n", ret);
41 		return T_EXIT_FAIL;
42 	}
43 	io_uring_cqe_seen(&ring, cqe);
44 	gettimeofday(&tv, NULL);
45 
46 	ts2.tv_sec = 1;
47 	ts2.tv_nsec = 0;
48 	sqe = io_uring_get_sqe(&ring);
49 	io_uring_prep_timeout(sqe, &ts2, 0, 0);
50 	sqe->user_data = 89;
51 	ret = io_uring_submit(&ring);
52 	if (ret != 1) {
53 		fprintf(stderr, "io_uring_submit2=%d\n", ret);
54 		return T_EXIT_FAIL;
55 	}
56 
57 	io_uring_wait_cqe(&ring, &cqe);
58 	io_uring_cqe_seen(&ring, cqe);
59 	msec = mtime_since_now(&tv);
60 	if (msec >= 900 && msec <= 1100) {
61 		io_uring_queue_exit(&ring);
62 		return T_EXIT_PASS;
63 	}
64 
65 	fprintf(stderr, "%s: Timeout seems wonky (got %lu)\n", __FUNCTION__,
66 								msec);
67 	io_uring_queue_exit(&ring);
68 	return T_EXIT_FAIL;
69 }
70