blob: 67e102c43f6ce4b7fc7ab36336a60d12de7bc8e1 [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
Jens Axboea2141fc2020-05-19 17:36:19 -060024 if (argc > 1)
25 return 0;
26
Jens Axboe1fe30fc2020-02-02 09:31:22 -070027 ret = io_uring_queue_init_params(8, &ring1, &p);
28 if (ret) {
29 fprintf(stderr, "ring setup failed: %d\n", ret);
30 return 1;
31 }
32 if (!(p.features & IORING_FEAT_CUR_PERSONALITY)) {
33 fprintf(stdout, "Skipping\n");
34 return 0;
35 }
36 ret = io_uring_queue_init(8, &ring2, 0);
37 if (ret) {
38 fprintf(stderr, "ring setup failed: %d\n", ret);
39 return 1;
40 }
41
42 evfd1 = eventfd(0, EFD_CLOEXEC);
43 if (evfd1 < 0) {
44 perror("eventfd");
45 return 1;
46 }
47
48 evfd2 = eventfd(0, EFD_CLOEXEC);
49 if (evfd2 < 0) {
50 perror("eventfd");
51 return 1;
52 }
53
54 ret = io_uring_register_eventfd(&ring1, evfd1);
55 if (ret) {
56 fprintf(stderr, "failed to register evfd: %d\n", ret);
57 return 1;
58 }
59
60 ret = io_uring_register_eventfd(&ring2, evfd2);
61 if (ret) {
62 fprintf(stderr, "failed to register evfd: %d\n", ret);
63 return 1;
64 }
65
66 sqe = io_uring_get_sqe(&ring1);
67 io_uring_prep_poll_add(sqe, evfd2, POLLIN);
68 sqe->user_data = 1;
69
70 sqe = io_uring_get_sqe(&ring2);
71 io_uring_prep_poll_add(sqe, evfd1, POLLIN);
72 sqe->user_data = 1;
73
74 ret = io_uring_submit(&ring1);
75 if (ret != 1) {
76 fprintf(stderr, "submit: %d\n", ret);
77 return 1;
78 }
79
80 ret = io_uring_submit(&ring2);
81 if (ret != 1) {
82 fprintf(stderr, "submit: %d\n", ret);
83 return 1;
84 }
85
86 sqe = io_uring_get_sqe(&ring1);
87 io_uring_prep_nop(sqe);
88 sqe->user_data = 3;
89
90 ret = io_uring_submit(&ring1);
91 if (ret != 1) {
92 fprintf(stderr, "submit: %d\n", ret);
93 return 1;
94 }
95
96 return 0;
97}