[PATCH] io_uring: use io_uring_cq_ready() to check for ready cqes

Stefano Garzarella posted 1 patch 5 years, 5 months ago
Test asan passed
Test docker-mingw@fedora passed
Test checkpatch passed
Test docker-quick@centos7 passed
Test FreeBSD passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200519134942.118178-1-sgarzare@redhat.com
Maintainers: Stefan Hajnoczi <stefanha@redhat.com>, Kevin Wolf <kwolf@redhat.com>, Aarushi Mehta <mehta.aaru20@gmail.com>, Max Reitz <mreitz@redhat.com>, Julia Suvorova <jusual@redhat.com>
block/io_uring.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
[PATCH] io_uring: use io_uring_cq_ready() to check for ready cqes
Posted by Stefano Garzarella 5 years, 5 months ago
In qemu_luring_poll_cb() we are not using the cqe peeked from the
CQ ring. We are using io_uring_peek_cqe() only to see if there
are cqes ready, so we can replace it with io_uring_cq_ready().

Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
 block/io_uring.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/block/io_uring.c b/block/io_uring.c
index a3142ca989..bdf3dec3a1 100644
--- a/block/io_uring.c
+++ b/block/io_uring.c
@@ -277,13 +277,10 @@ static void qemu_luring_completion_cb(void *opaque)
 static bool qemu_luring_poll_cb(void *opaque)
 {
     LuringState *s = opaque;
-    struct io_uring_cqe *cqes;
 
-    if (io_uring_peek_cqe(&s->ring, &cqes) == 0) {
-        if (cqes) {
-            luring_process_completions_and_submit(s);
-            return true;
-        }
+    if (io_uring_cq_ready(&s->ring)) {
+        luring_process_completions_and_submit(s);
+        return true;
     }
 
     return false;
-- 
2.25.4


Re: [PATCH] io_uring: use io_uring_cq_ready() to check for ready cqes
Posted by Stefan Hajnoczi 5 years, 5 months ago
On Tue, May 19, 2020 at 03:49:42PM +0200, Stefano Garzarella wrote:
> In qemu_luring_poll_cb() we are not using the cqe peeked from the
> CQ ring. We are using io_uring_peek_cqe() only to see if there
> are cqes ready, so we can replace it with io_uring_cq_ready().
> 
> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
> ---
>  block/io_uring.c | 9 +++------
>  1 file changed, 3 insertions(+), 6 deletions(-)

io_uring_cq_ready() was added in liburing 0.2 and is already used by
fdmon-io_uring.c. It's safe to use here.

I wanted to mention this in case anyone is concerned about dependencies.
liburing is a fast-moving target and everyone should be on liburing 0.5+.

Thanks, applied to my block tree:
https://github.com/stefanha/qemu/commits/block

Stefan
Re: [PATCH] io_uring: use io_uring_cq_ready() to check for ready cqes
Posted by Stefano Garzarella 5 years, 5 months ago
On Thu, May 21, 2020 at 03:45:34PM +0100, Stefan Hajnoczi wrote:
> On Tue, May 19, 2020 at 03:49:42PM +0200, Stefano Garzarella wrote:
> > In qemu_luring_poll_cb() we are not using the cqe peeked from the
> > CQ ring. We are using io_uring_peek_cqe() only to see if there
> > are cqes ready, so we can replace it with io_uring_cq_ready().
> > 
> > Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
> > ---
> >  block/io_uring.c | 9 +++------
> >  1 file changed, 3 insertions(+), 6 deletions(-)
> 
> io_uring_cq_ready() was added in liburing 0.2 and is already used by
> fdmon-io_uring.c. It's safe to use here.
> 
> I wanted to mention this in case anyone is concerned about dependencies.
> liburing is a fast-moving target and everyone should be on liburing 0.5+.

Yeah, thanks for doing that. I did this check, but I forgot to write it down...

> 
> Thanks, applied to my block tree:
> https://github.com/stefanha/qemu/commits/block

Thanks,
Stefano