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