diff options
author | Gil Cukierman <cukie@google.com> | 2022-10-31 14:08:03 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-10-31 14:08:03 +0000 |
commit | dae12c7b40c255ad7c6612591e2908a266f2cfd5 (patch) | |
tree | ebe9c872e416346e4b333e5062da32401c8e0a73 /test/tty-write-dpoll.c | |
parent | d53db6851ea17b2d219d084e1afc683b8b62b105 (diff) | |
parent | d0a2042580f3ed180db5e2b53029296a8b555115 (diff) | |
download | liburing-dae12c7b40c255ad7c6612591e2908a266f2cfd5.tar.gz |
Update liburing to version 2.2 am: d0a2042580main-16k-with-phones
Original change: https://android-review.googlesource.com/c/platform/external/liburing/+/2276974
Change-Id: I0ac5dbb2b0dadb76713528e6ab0110ec071bad63
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'test/tty-write-dpoll.c')
-rw-r--r-- | test/tty-write-dpoll.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/test/tty-write-dpoll.c b/test/tty-write-dpoll.c new file mode 100644 index 0000000..ea9df1d --- /dev/null +++ b/test/tty-write-dpoll.c @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Test double poll tty write. A test case for the regression fixed by: + * + * commit 6e295a664efd083ac9a5c1a8130c45be1db0cde7 + * Author: Jens Axboe <axboe@kernel.dk> + * Date: Tue Mar 22 13:11:28 2022 -0600 + * + * io_uring: fix assuming triggered poll waitqueue is the single poll + * + */ +#include <errno.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> + +#include "liburing.h" +#include "helpers.h" + +#define SQES 128 +#define BUFSIZE 512 + +int main(int argc, char *argv[]) +{ + static char buf[BUFSIZE]; + struct iovec vecs[SQES]; + struct io_uring ring; + int ret, i, fd; + + if (argc > 1) + return 0; + + fd = open("/dev/ttyS0", O_RDWR | O_NONBLOCK); + if (fd < 0) + return 0; + + ret = t_create_ring(SQES, &ring, 0); + if (ret == T_SETUP_SKIP) + return 0; + else if (ret < 0) + return 1; + + for (i = 0; i < SQES; i++) { + struct io_uring_sqe *sqe; + + sqe = io_uring_get_sqe(&ring); + vecs[i].iov_base = buf; + vecs[i].iov_len = sizeof(buf); + io_uring_prep_writev(sqe, fd, &vecs[i], 1, 0); + } + + ret = io_uring_submit(&ring); + if (ret != SQES) { + fprintf(stderr, "submit: %d\n", ret); + return 1; + } + + return 0; +} |