* [PATCH liburing 1/2] Revert "test/nop: kill cqe32 test code"
2022-06-17 8:42 [PATCH liburing 0/2] use nop CQE32 tests to test some assumptions Pavel Begunkov
@ 2022-06-17 8:42 ` Pavel Begunkov
2022-06-17 8:42 ` [PATCH liburing 2/2] tests: fix and improve nop tests Pavel Begunkov
2022-06-17 11:37 ` [PATCH liburing 0/2] use nop CQE32 tests to test some assumptions Jens Axboe
2 siblings, 0 replies; 5+ messages in thread
From: Pavel Begunkov @ 2022-06-17 8:42 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
This reverts commit e5d017ab9cd9605248db68168ae5451f830e646c.
Signed-off-by: Pavel Begunkov <[email protected]>
---
test/nop.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/test/nop.c b/test/nop.c
index 01e41a6..ce223b3 100644
--- a/test/nop.c
+++ b/test/nop.c
@@ -20,6 +20,7 @@ static int test_single_nop(struct io_uring *ring)
struct io_uring_cqe *cqe;
struct io_uring_sqe *sqe;
int ret;
+ bool cqe32 = (ring->flags & IORING_SETUP_CQE32);
sqe = io_uring_get_sqe(ring);
if (!sqe) {
@@ -28,6 +29,10 @@ 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;
ret = io_uring_submit(ring);
@@ -45,6 +50,17 @@ static int test_single_nop(struct io_uring *ring)
fprintf(stderr, "Unexpected 0 user_data\n");
goto err;
}
+ if (cqe32) {
+ if (cqe->big_cqe[0] != 1234) {
+ fprintf(stderr, "Unexpected extra1\n");
+ goto err;
+
+ }
+ if (cqe->big_cqe[1] != 5678) {
+ fprintf(stderr, "Unexpected extra2\n");
+ goto err;
+ }
+ }
io_uring_cqe_seen(ring, cqe);
return 0;
err:
@@ -56,6 +72,7 @@ static int test_barrier_nop(struct io_uring *ring)
struct io_uring_cqe *cqe;
struct io_uring_sqe *sqe;
int ret, i;
+ bool cqe32 = (ring->flags & IORING_SETUP_CQE32);
for (i = 0; i < 8; i++) {
sqe = io_uring_get_sqe(ring);
@@ -67,6 +84,10 @@ 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;
}
@@ -89,6 +110,16 @@ static int test_barrier_nop(struct io_uring *ring)
fprintf(stderr, "Unexpected 0 user_data\n");
goto err;
}
+ if (cqe32) {
+ if (cqe->big_cqe[0] != 1234) {
+ fprintf(stderr, "Unexpected extra1\n");
+ goto err;
+ }
+ if (cqe->big_cqe[1] != 5678) {
+ fprintf(stderr, "Unexpected extra2\n");
+ goto err;
+ }
+ }
io_uring_cqe_seen(ring, cqe);
}
--
2.36.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH liburing 2/2] tests: fix and improve nop tests
2022-06-17 8:42 [PATCH liburing 0/2] use nop CQE32 tests to test some assumptions Pavel Begunkov
2022-06-17 8:42 ` [PATCH liburing 1/2] Revert "test/nop: kill cqe32 test code" Pavel Begunkov
@ 2022-06-17 8:42 ` Pavel Begunkov
2022-06-17 11:36 ` Jens Axboe
2022-06-17 11:37 ` [PATCH liburing 0/2] use nop CQE32 tests to test some assumptions Jens Axboe
2 siblings, 1 reply; 5+ messages in thread
From: Pavel Begunkov @ 2022-06-17 8:42 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
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 <[email protected]>
---
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;
--
2.36.1
^ permalink raw reply related [flat|nested] 5+ messages in thread