mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
io_uring: only post the dummy skip CQE on CQE_MIXED rings
io_cqe_cache_refill() posts a dummy skip CQE when a 32b CQE would
straddle the end of the ring, so the real one can start at offset 0. That
only makes sense on CQE_MIXED rings, where slots are 16b and a 32b CQE
needs two of them back to back. On a CQE32 ring every slot is already
32b, but io_fill_cqe_aux32() still passes cqe32 == true, and the dummy
then gets written at cqes[off] rather than cqes[off << 1], inside another
CQE.
Limit the dummy to CQE_MIXED rings.
Fixes: e26dca67fd ("io_uring: add support for IORING_SETUP_CQE_MIXED")
Assisted-by: LLM
Signed-off-by: Hui Peng <benquike@gmail.com>
Link: https://patch.msgid.link/20260919203516.2581409-1-benquike@gmail.com
[axboe: split from Hui's original patch, edited commit message]
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
50b617ba78
commit
2107751744
|
|
@ -733,7 +733,8 @@ bool io_cqe_cache_refill(struct io_ring_ctx *ctx, bool overflow, bool cqe32)
|
|||
* Post dummy CQE if a 32b CQE is needed and there's only room for a
|
||||
* 16b CQE before the ring wraps.
|
||||
*/
|
||||
if (cqe32 && off + 1 == ctx->cq_entries) {
|
||||
if (cqe32 && (ctx->flags & IORING_SETUP_CQE_MIXED) &&
|
||||
off + 1 == ctx->cq_entries) {
|
||||
if (!io_fill_nop_cqe(ctx, off))
|
||||
return false;
|
||||
off = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user