blob: c78bc86c50050a55771fa470f91026dec0a4201c [file] [log] [blame]
Jens Axboee5024352020-02-11 20:34:12 -07001/* SPDX-License-Identifier: MIT */
Jens Axboe1fe30fc2020-02-02 09:31:22 -07002/*
3 * Description: run various nop tests
4 *
5 */
6#include <errno.h>
7#include <stdio.h>
8#include <unistd.h>
9#include <stdlib.h>
10#include <string.h>
11#include <fcntl.h>
12#include <sys/poll.h>
13#include <sys/eventfd.h>
14
15#include "liburing.h"
16
17int main(int argc, char *argv[])
18{
19 struct io_uring_params p = {};
20 struct io_uring ring1, ring2;
21 struct io_uring_sqe *sqe;
22 int ret, evfd1, evfd2;
23
24 ret = io_uring_queue_init_params(8, &ring1, &p);
25 if (ret) {
26 fprintf(stderr, "ring setup failed: %d\n", ret);
27 return 1;
28 }
29 if (!(p.features & IORING_FEAT_CUR_PERSONALITY)) {
30 fprintf(stdout, "Skipping\n");
31 return 0;
32 }
33 ret = io_uring_queue_init(8, &ring2, 0);
34 if (ret) {
35 fprintf(stderr, "ring setup failed: %d\n", ret);
36 return 1;
37 }
38
39 evfd1 = eventfd(0, EFD_CLOEXEC);
40 if (evfd1 < 0) {
41 perror("eventfd");
42 return 1;
43 }
44
45 evfd2 = eventfd(0, EFD_CLOEXEC);
46 if (evfd2 < 0) {
47 perror("eventfd");
48 return 1;
49 }
50
51 ret = io_uring_register_eventfd(&ring1, evfd1);
52 if (ret) {
53 fprintf(stderr, "failed to register evfd: %d\n", ret);
54 return 1;
55 }
56
57 ret = io_uring_register_eventfd(&ring2, evfd2);
58 if (ret) {
59 fprintf(stderr, "failed to register evfd: %d\n", ret);
60 return 1;
61 }
62
63 sqe = io_uring_get_sqe(&ring1);
64 io_uring_prep_poll_add(sqe, evfd2, POLLIN);
65 sqe->user_data = 1;
66
67 sqe = io_uring_get_sqe(&ring2);
68 io_uring_prep_poll_add(sqe, evfd1, POLLIN);
69 sqe->user_data = 1;
70
71 ret = io_uring_submit(&ring1);
72 if (ret != 1) {
73 fprintf(stderr, "submit: %d\n", ret);
74 return 1;
75 }
76
77 ret = io_uring_submit(&ring2);
78 if (ret != 1) {
79 fprintf(stderr, "submit: %d\n", ret);
80 return 1;
81 }
82
83 sqe = io_uring_get_sqe(&ring1);
84 io_uring_prep_nop(sqe);
85 sqe->user_data = 3;
86
87 ret = io_uring_submit(&ring1);
88 if (ret != 1) {
89 fprintf(stderr, "submit: %d\n", ret);
90 return 1;
91 }
92
93 return 0;
94}