From 540ca1c11016ed50940e3f6f555a986356578646 Mon Sep 17 00:00:00 2001 From: Pavel Begunkov Date: Fri, 17 Jun 2022 09:42:42 +0100 Subject: tests: fix and improve nop tests We removed CQE32 for nops from the kernel, fix the tests and instead test that we return zeroes in the extra fields instead of garbage. Loop over the tests multiple times so it exhausts CQ and we also test CQ entries recycling and internal caching mechanism. Also excersie IOSQE_ASYNC. Signed-off-by: Pavel Begunkov Link: https://lore.kernel.org/r/92f01041e5ef933a6018bd89dd54cc1fae57c6f6.1655455225.git.asml.silence@gmail.com Signed-off-by: Jens Axboe --- test/nop.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/test/nop.c b/test/nop.c index ce223b3..1aa88fc 100644 --- a/test/nop.c +++ b/test/nop.c @@ -15,7 +15,7 @@ static int seq; -static int test_single_nop(struct io_uring *ring) +static int test_single_nop(struct io_uring *ring, unsigned req_flags) { struct io_uring_cqe *cqe; struct io_uring_sqe *sqe; @@ -29,11 +29,8 @@ static int test_single_nop(struct io_uring *ring) } io_uring_prep_nop(sqe); - if (cqe32) { - sqe->addr = 1234; - sqe->addr2 = 5678; - } sqe->user_data = ++seq; + sqe->flags |= req_flags; ret = io_uring_submit(ring); if (ret <= 0) { @@ -51,12 +48,12 @@ static int test_single_nop(struct io_uring *ring) goto err; } if (cqe32) { - if (cqe->big_cqe[0] != 1234) { + if (cqe->big_cqe[0] != 0) { fprintf(stderr, "Unexpected extra1\n"); goto err; } - if (cqe->big_cqe[1] != 5678) { + if (cqe->big_cqe[1] != 0) { fprintf(stderr, "Unexpected extra2\n"); goto err; } @@ -67,7 +64,7 @@ err: return 1; } -static int test_barrier_nop(struct io_uring *ring) +static int test_barrier_nop(struct io_uring *ring, unsigned req_flags) { struct io_uring_cqe *cqe; struct io_uring_sqe *sqe; @@ -84,11 +81,8 @@ static int test_barrier_nop(struct io_uring *ring) io_uring_prep_nop(sqe); if (i == 4) sqe->flags = IOSQE_IO_DRAIN; - if (cqe32) { - sqe->addr = 1234; - sqe->addr2 = 5678; - } sqe->user_data = ++seq; + sqe->flags |= req_flags; } ret = io_uring_submit(ring); @@ -111,11 +105,11 @@ static int test_barrier_nop(struct io_uring *ring) goto err; } if (cqe32) { - if (cqe->big_cqe[0] != 1234) { + if (cqe->big_cqe[0] != 0) { fprintf(stderr, "Unexpected extra1\n"); goto err; } - if (cqe->big_cqe[1] != 5678) { + if (cqe->big_cqe[1] != 0) { fprintf(stderr, "Unexpected extra2\n"); goto err; } @@ -132,7 +126,7 @@ static int test_ring(unsigned flags) { struct io_uring ring; struct io_uring_params p = { }; - int ret; + int ret, i; p.flags = flags; ret = io_uring_queue_init_params(8, &ring, &p); @@ -143,18 +137,21 @@ static int test_ring(unsigned flags) return 1; } - ret = test_single_nop(&ring); - if (ret) { - fprintf(stderr, "test_single_nop failed\n"); - goto err; - } + for (i = 0; i < 1000; i++) { + unsigned req_flags = (i & 1) ? IOSQE_ASYNC : 0; - ret = test_barrier_nop(&ring); - if (ret) { - fprintf(stderr, "test_barrier_nop failed\n"); - goto err; - } + ret = test_single_nop(&ring, req_flags); + if (ret) { + fprintf(stderr, "test_single_nop failed\n"); + goto err; + } + ret = test_barrier_nop(&ring, req_flags); + if (ret) { + fprintf(stderr, "test_barrier_nop failed\n"); + goto err; + } + } err: io_uring_queue_exit(&ring); return ret; -- cgit v1.2.3