Skip to content

Commit 8b6ede6

Browse files
teburdMaureenHelm
authored andcommitted
rtio: Release sqe before submitting cqe
When an application is waiting on a completion it may be expecting, rightfully so, that a new submissions slot is available. Frees the submission queue event prior to enqueuing the completion queue event in the simple executor. Signed-off-by: Tom Burdick <[email protected]>
1 parent f6e2cb9 commit 8b6ede6

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

subsys/rtio/rtio_executor_simple.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@ int rtio_simple_submit(struct rtio *r)
4141
*/
4242
void rtio_simple_ok(struct rtio *r, const struct rtio_sqe *sqe, int result)
4343
{
44-
rtio_cqe_submit(r, result, sqe->userdata);
44+
void *userdata = sqe->userdata;
45+
4546
rtio_spsc_release(r->sq);
47+
rtio_cqe_submit(r, result, userdata);
4648
rtio_simple_submit(r);
4749
}
4850

@@ -52,18 +54,19 @@ void rtio_simple_ok(struct rtio *r, const struct rtio_sqe *sqe, int result)
5254
void rtio_simple_err(struct rtio *r, const struct rtio_sqe *sqe, int result)
5355
{
5456
struct rtio_sqe *nsqe;
55-
bool chained;
57+
void *userdata = sqe->userdata;
58+
bool chained = sqe->flags & RTIO_SQE_CHAINED;
5659

57-
rtio_cqe_submit(r, result, sqe->userdata);
58-
chained = sqe->flags & RTIO_SQE_CHAINED;
5960
rtio_spsc_release(r->sq);
61+
rtio_cqe_submit(r, result, sqe->userdata);
6062

6163
if (chained) {
6264

6365
nsqe = rtio_spsc_consume(r->sq);
6466
while (nsqe != NULL && nsqe->flags & RTIO_SQE_CHAINED) {
65-
rtio_cqe_submit(r, -ECANCELED, nsqe->userdata);
67+
userdata = nsqe->userdata;
6668
rtio_spsc_release(r->sq);
69+
rtio_cqe_submit(r, -ECANCELED, userdata);
6770
nsqe = rtio_spsc_consume(r->sq);
6871
}
6972

0 commit comments

Comments
 (0)