diff options
author | Bart Van Assche <bvanassche@acm.org> | 2019-07-01 14:42:31 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2019-07-02 07:33:50 -0600 |
commit | bbb30995a0b4c9e3489aa5d66d1807425734b791 (patch) | |
tree | 36823bbe0a15d03f6ec2cb6a8184c26f2f5d0fca /src/queue.c | |
parent | 043ea2257fb692324f1cb491ae092cdcb311732a (diff) |
__io_uring_get_cqe(): Use io_uring_for_each_cqe()
Use io_uring_for_each_cqe() inside __io_uring_get_cqe() such that it
becomes possible to test the io_uring_for_each_cqe() implementation
from inside the liburing project.
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Roman Penyaev <rpenyaev@suse.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'src/queue.c')
-rw-r--r-- | src/queue.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/src/queue.c b/src/queue.c index 85e0c1e..bec363f 100644 --- a/src/queue.c +++ b/src/queue.c @@ -14,26 +14,14 @@ static int __io_uring_get_cqe(struct io_uring *ring, struct io_uring_cqe **cqe_ptr, int wait) { - struct io_uring_cq *cq = &ring->cq; - const unsigned mask = *cq->kring_mask; unsigned head; int ret; - *cqe_ptr = NULL; - head = *cq->khead; do { - /* - * It's necessary to use a read_barrier() before reading - * the CQ tail, since the kernel updates it locklessly. The - * kernel has the matching store barrier for the update. The - * kernel also ensures that previous stores to CQEs are ordered - * with the tail update. - */ - read_barrier(); - if (head != *cq->ktail) { - *cqe_ptr = &cq->cqes[head & mask]; + io_uring_for_each_cqe(ring, head, *cqe_ptr) + break; + if (*cqe_ptr) break; - } if (!wait) break; ret = io_uring_enter(ring->ring_fd, 0, 1, |