* [PATCH liburing 0/5] deferred tw msg_ring tests
@ 2023-01-24 1:21 Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 1/5] tests/msg_ring: use correct exit codes Pavel Begunkov
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Pavel Begunkov @ 2023-01-24 1:21 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
Add a regression test for a recent null deref regression with
disabled deferred ring and cover a couple more deferred tw cases.
Pavel Begunkov (5):
tests/msg_ring: use correct exit codes
tests/msg_ring: test msg_ring with deferred tw
test/msg_ring: test msg_ring to a disabled ring
tests/msg_ring: refactor test_remote
tests/msg_ring: remote submit to a deferred tw ring
test/msg-ring.c | 182 +++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 172 insertions(+), 10 deletions(-)
--
2.38.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH liburing 1/5] tests/msg_ring: use correct exit codes
2023-01-24 1:21 [PATCH liburing 0/5] deferred tw msg_ring tests Pavel Begunkov
@ 2023-01-24 1:21 ` Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 2/5] tests/msg_ring: test msg_ring with deferred tw Pavel Begunkov
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2023-01-24 1:21 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
test/msg-ring.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/msg-ring.c b/test/msg-ring.c
index a825bf9..afe3192 100644
--- a/test/msg-ring.c
+++ b/test/msg-ring.c
@@ -220,27 +220,27 @@ int main(int argc, char *argv[])
ret = test_own(&ring);
if (ret) {
fprintf(stderr, "test_own failed\n");
- return ret;
+ return T_EXIT_FAIL;
}
if (no_msg)
return T_EXIT_SKIP;
ret = test_own(&pring);
if (ret) {
fprintf(stderr, "test_own iopoll failed\n");
- return ret;
+ return T_EXIT_FAIL;
}
ret = test_invalid(&ring, 0);
if (ret) {
fprintf(stderr, "test_invalid failed\n");
- return ret;
+ return T_EXIT_FAIL;
}
for (i = 0; i < 2; i++) {
ret = test_invalid(&ring, 1);
if (ret) {
fprintf(stderr, "test_invalid fixed failed\n");
- return ret;
+ return T_EXIT_FAIL;
}
}
@@ -249,7 +249,7 @@ int main(int argc, char *argv[])
ret = test_remote(&ring, &ring2);
if (ret) {
fprintf(stderr, "test_remote failed\n");
- return ret;
+ return T_EXIT_FAIL;
}
pthread_join(thread, &tret);
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH liburing 2/5] tests/msg_ring: test msg_ring with deferred tw
2023-01-24 1:21 [PATCH liburing 0/5] deferred tw msg_ring tests Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 1/5] tests/msg_ring: use correct exit codes Pavel Begunkov
@ 2023-01-24 1:21 ` Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 3/5] test/msg_ring: test msg_ring to a disabled ring Pavel Begunkov
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2023-01-24 1:21 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
Extend msg_ring.c to test IORING_SETUP_DEFER_TASKRUN rings
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
test/msg-ring.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/test/msg-ring.c b/test/msg-ring.c
index afe3192..6db7680 100644
--- a/test/msg-ring.c
+++ b/test/msg-ring.c
@@ -254,5 +254,33 @@ int main(int argc, char *argv[])
pthread_join(thread, &tret);
+ io_uring_queue_exit(&ring);
+ io_uring_queue_exit(&ring2);
+ io_uring_queue_exit(&pring);
+
+ if (t_probe_defer_taskrun()) {
+ ret = io_uring_queue_init(8, &ring, IORING_SETUP_SINGLE_ISSUER |
+ IORING_SETUP_DEFER_TASKRUN);
+ if (ret) {
+ fprintf(stderr, "deferred ring setup failed: %d\n", ret);
+ return T_EXIT_FAIL;
+ }
+
+ ret = test_own(&ring);
+ if (ret) {
+ fprintf(stderr, "test_own deferred failed\n");
+ return T_EXIT_FAIL;
+ }
+
+ for (i = 0; i < 2; i++) {
+ ret = test_invalid(&ring, i);
+ if (ret) {
+ fprintf(stderr, "test_invalid(0) deferred failed\n");
+ return T_EXIT_FAIL;
+ }
+ }
+ io_uring_queue_exit(&ring);
+ }
+
return T_EXIT_PASS;
}
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH liburing 3/5] test/msg_ring: test msg_ring to a disabled ring
2023-01-24 1:21 [PATCH liburing 0/5] deferred tw msg_ring tests Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 1/5] tests/msg_ring: use correct exit codes Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 2/5] tests/msg_ring: test msg_ring with deferred tw Pavel Begunkov
@ 2023-01-24 1:21 ` Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 4/5] tests/msg_ring: refactor test_remote Pavel Begunkov
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2023-01-24 1:21 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
A regression test trying to message IORING_SETUP_R_DISABLED rings.
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
test/msg-ring.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/test/msg-ring.c b/test/msg-ring.c
index 6db7680..66c60b3 100644
--- a/test/msg-ring.c
+++ b/test/msg-ring.c
@@ -191,6 +191,49 @@ err:
return 1;
}
+static int test_disabled_ring(struct io_uring *ring, int flags)
+{
+ struct io_uring_cqe *cqe;
+ struct io_uring_sqe *sqe;
+ struct io_uring disabled_ring;
+ int ret;
+
+ flags |= IORING_SETUP_R_DISABLED;
+ ret = io_uring_queue_init(8, &disabled_ring, flags);
+ if (ret) {
+ fprintf(stderr, "ring setup failed: %d\n", ret);
+ return 1;
+ }
+
+ sqe = io_uring_get_sqe(ring);
+ io_uring_prep_msg_ring(sqe, disabled_ring.ring_fd, 0x10, 0x1234, 0);
+ sqe->user_data = 1;
+
+ ret = io_uring_submit(ring);
+ if (ret != 1) {
+ fprintf(stderr, "sqe submit failed: %d\n", ret);
+ return 1;
+ }
+
+ ret = io_uring_wait_cqe(ring, &cqe);
+ if (ret < 0) {
+ fprintf(stderr, "wait completion %d\n", ret);
+ return 1;
+ }
+ if (cqe->res != 0 && cqe->res != -EBADFD) {
+ fprintf(stderr, "cqe res %d\n", cqe->res);
+ return 1;
+ }
+ if (cqe->user_data != 1) {
+ fprintf(stderr, "user_data %llx\n", (long long) cqe->user_data);
+ return 1;
+ }
+
+ io_uring_cqe_seen(ring, cqe);
+ io_uring_queue_exit(&disabled_ring);
+ return 0;
+}
+
int main(int argc, char *argv[])
{
struct io_uring ring, ring2, pring;
@@ -280,6 +323,18 @@ int main(int argc, char *argv[])
}
}
io_uring_queue_exit(&ring);
+
+ if (test_disabled_ring(&ring2, 0)) {
+ fprintf(stderr, "test_disabled_ring failed\n");
+ return T_EXIT_FAIL;
+ }
+
+ if (test_disabled_ring(&ring2, IORING_SETUP_SINGLE_ISSUER |
+ IORING_SETUP_DEFER_TASKRUN)) {
+ fprintf(stderr, "test_disabled_ring defer failed\n");
+ return T_EXIT_FAIL;
+ }
+
}
return T_EXIT_PASS;
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH liburing 4/5] tests/msg_ring: refactor test_remote
2023-01-24 1:21 [PATCH liburing 0/5] deferred tw msg_ring tests Pavel Begunkov
` (2 preceding siblings ...)
2023-01-24 1:21 ` [PATCH liburing 3/5] test/msg_ring: test msg_ring to a disabled ring Pavel Begunkov
@ 2023-01-24 1:21 ` Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 5/5] tests/msg_ring: remote submit to a deferred tw ring Pavel Begunkov
2023-01-24 2:31 ` [PATCH liburing 0/5] deferred tw msg_ring tests Jens Axboe
5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2023-01-24 1:21 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
Refactor test_remote() by folding all pthread accounting inside of it
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
test/msg-ring.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/test/msg-ring.c b/test/msg-ring.c
index 66c60b3..495c127 100644
--- a/test/msg-ring.c
+++ b/test/msg-ring.c
@@ -93,17 +93,23 @@ static void *wait_cqe_fn(void *data)
goto err;
}
+ io_uring_cqe_seen(ring, cqe);
return NULL;
err:
+ io_uring_cqe_seen(ring, cqe);
return (void *) (unsigned long) 1;
}
static int test_remote(struct io_uring *ring, struct io_uring *target)
{
+ pthread_t thread;
+ void *tret;
struct io_uring_cqe *cqe;
struct io_uring_sqe *sqe;
int ret;
+ pthread_create(&thread, NULL, wait_cqe_fn, target);
+
sqe = io_uring_get_sqe(ring);
if (!sqe) {
fprintf(stderr, "get sqe failed\n");
@@ -134,6 +140,7 @@ static int test_remote(struct io_uring *ring, struct io_uring *target)
}
io_uring_cqe_seen(ring, cqe);
+ pthread_join(thread, &tret);
return 0;
err:
return 1;
@@ -237,8 +244,6 @@ static int test_disabled_ring(struct io_uring *ring, int flags)
int main(int argc, char *argv[])
{
struct io_uring ring, ring2, pring;
- pthread_t thread;
- void *tret;
int ret, i;
if (argc > 1)
@@ -287,18 +292,13 @@ int main(int argc, char *argv[])
}
}
- pthread_create(&thread, NULL, wait_cqe_fn, &ring2);
-
ret = test_remote(&ring, &ring2);
if (ret) {
fprintf(stderr, "test_remote failed\n");
return T_EXIT_FAIL;
}
- pthread_join(thread, &tret);
-
io_uring_queue_exit(&ring);
- io_uring_queue_exit(&ring2);
io_uring_queue_exit(&pring);
if (t_probe_defer_taskrun()) {
@@ -337,5 +337,6 @@ int main(int argc, char *argv[])
}
+ io_uring_queue_exit(&ring2);
return T_EXIT_PASS;
}
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH liburing 5/5] tests/msg_ring: remote submit to a deferred tw ring
2023-01-24 1:21 [PATCH liburing 0/5] deferred tw msg_ring tests Pavel Begunkov
` (3 preceding siblings ...)
2023-01-24 1:21 ` [PATCH liburing 4/5] tests/msg_ring: refactor test_remote Pavel Begunkov
@ 2023-01-24 1:21 ` Pavel Begunkov
2023-01-24 2:31 ` [PATCH liburing 0/5] deferred tw msg_ring tests Jens Axboe
5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2023-01-24 1:21 UTC (permalink / raw)
To: io-uring; +Cc: Jens Axboe, asml.silence
Test sending messages to a deferred ring from another task
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
test/msg-ring.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 79 insertions(+), 1 deletion(-)
diff --git a/test/msg-ring.c b/test/msg-ring.c
index 495c127..cb6687f 100644
--- a/test/msg-ring.c
+++ b/test/msg-ring.c
@@ -146,6 +146,79 @@ err:
return 1;
}
+static void *remote_submit_fn(void *data)
+{
+ struct io_uring_sqe *sqe;
+ struct io_uring_cqe *cqe;
+ struct io_uring *target = data;
+ struct io_uring ring;
+ int ret;
+
+ ret = io_uring_queue_init(8, &ring, 0);
+ if (ret) {
+ fprintf(stderr, "thread ring setup failed: %d\n", ret);
+ goto err;
+ }
+ sqe = io_uring_get_sqe(&ring);
+ if (!sqe) {
+ fprintf(stderr, "get sqe failed\n");
+ goto err;
+ }
+
+ io_uring_prep_msg_ring(sqe, target->ring_fd, 0x20, 0x5aa5, 0);
+ sqe->user_data = 1;
+
+ ret = io_uring_submit(&ring);
+ if (ret <= 0) {
+ fprintf(stderr, "sqe submit failed: %d\n", ret);
+ goto err;
+ }
+
+ ret = io_uring_wait_cqe(&ring, &cqe);
+ if (ret < 0) {
+ fprintf(stderr, "wait completion %d\n", ret);
+ goto err;
+ }
+ if (cqe->res != 0 || cqe->user_data != 1) {
+ fprintf(stderr, "invalid cqe\n");
+ goto err;
+ }
+ io_uring_cqe_seen(&ring, cqe);
+ io_uring_queue_exit(&ring);
+ return NULL;
+err:
+ return (void *) (unsigned long) 1;
+}
+
+static int test_remote_submit(struct io_uring *target)
+{
+ struct io_uring_cqe *cqe;
+ pthread_t thread;
+ void *tret;
+ int ret;
+
+ pthread_create(&thread, NULL, remote_submit_fn, target);
+
+ ret = io_uring_wait_cqe(target, &cqe);
+ if (ret < 0) {
+ fprintf(stderr, "wait completion %d\n", ret);
+ goto err;
+ }
+ if (cqe->res != 0x20) {
+ fprintf(stderr, "cqe res %d\n", cqe->res);
+ return -1;
+ }
+ if (cqe->user_data != 0x5aa5) {
+ fprintf(stderr, "user_data %llx\n", (long long) cqe->user_data);
+ return -1;
+ }
+ io_uring_cqe_seen(target, cqe);
+ pthread_join(thread, &tret);
+ return 0;
+err:
+ return 1;
+}
+
static int test_invalid(struct io_uring *ring, bool fixed)
{
struct io_uring_cqe *cqe;
@@ -322,6 +395,12 @@ int main(int argc, char *argv[])
return T_EXIT_FAIL;
}
}
+
+ ret = test_remote_submit(&ring);
+ if (ret) {
+ fprintf(stderr, "test_remote_submit failed\n");
+ return T_EXIT_FAIL;
+ }
io_uring_queue_exit(&ring);
if (test_disabled_ring(&ring2, 0)) {
@@ -334,7 +413,6 @@ int main(int argc, char *argv[])
fprintf(stderr, "test_disabled_ring defer failed\n");
return T_EXIT_FAIL;
}
-
}
io_uring_queue_exit(&ring2);
--
2.38.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH liburing 0/5] deferred tw msg_ring tests
2023-01-24 1:21 [PATCH liburing 0/5] deferred tw msg_ring tests Pavel Begunkov
` (4 preceding siblings ...)
2023-01-24 1:21 ` [PATCH liburing 5/5] tests/msg_ring: remote submit to a deferred tw ring Pavel Begunkov
@ 2023-01-24 2:31 ` Jens Axboe
5 siblings, 0 replies; 7+ messages in thread
From: Jens Axboe @ 2023-01-24 2:31 UTC (permalink / raw)
To: io-uring, Pavel Begunkov
On Tue, 24 Jan 2023 01:21:44 +0000, Pavel Begunkov wrote:
> Add a regression test for a recent null deref regression with
> disabled deferred ring and cover a couple more deferred tw cases.
>
> Pavel Begunkov (5):
> tests/msg_ring: use correct exit codes
> tests/msg_ring: test msg_ring with deferred tw
> test/msg_ring: test msg_ring to a disabled ring
> tests/msg_ring: refactor test_remote
> tests/msg_ring: remote submit to a deferred tw ring
>
> [...]
Applied, thanks!
[1/5] tests/msg_ring: use correct exit codes
commit: f4b49d6a04209799e7919abc10cca0a6fafff5f7
[2/5] tests/msg_ring: test msg_ring with deferred tw
commit: 52ca1bf33fc80425755a8b0f79a8dd91b0833e6b
[3/5] test/msg_ring: test msg_ring to a disabled ring
commit: 538a3a3357a10b9030b4bba0e39e4e14e3726ce8
[4/5] tests/msg_ring: refactor test_remote
commit: b78d76aa18aed2dc6750f4185f6941ce74281779
[5/5] tests/msg_ring: remote submit to a deferred tw ring
commit: 5e065b4d137a5da7d390402f854484e33bb20a5c
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-01-24 2:32 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-24 1:21 [PATCH liburing 0/5] deferred tw msg_ring tests Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 1/5] tests/msg_ring: use correct exit codes Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 2/5] tests/msg_ring: test msg_ring with deferred tw Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 3/5] test/msg_ring: test msg_ring to a disabled ring Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 4/5] tests/msg_ring: refactor test_remote Pavel Begunkov
2023-01-24 1:21 ` [PATCH liburing 5/5] tests/msg_ring: remote submit to a deferred tw ring Pavel Begunkov
2023-01-24 2:31 ` [PATCH liburing 0/5] deferred tw msg_ring tests Jens Axboe
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.