Message ID | 20190521235215.31341-6-mehta.aaru20@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for io_uring | expand |
On Wed, May 22, 2019 at 05:22:11AM +0530, Aarushi Mehta wrote: s/asyn/async/ in the Subject line. > @@ -341,6 +349,25 @@ LinuxAioState *aio_get_linux_aio(AioContext *ctx) > } > #endif > > +#ifdef CONFIG_LINUX_IO_URING > +LuringState *aio_setup_linux_io_uring(AioContext *ctx, Error **errp) > +{ > + if (!ctx->linux_io_uring) { > + ctx->linux_io_uring = luring_init(errp); > + if (ctx->linux_io_uring) { > + luring_attach_aio_context(ctx->linux_io_uring, ctx); > + } > + } > + return ctx->linux_io_uring; > +} Personally I find functions that are written to have a single return statement hard to understand due to the nesting and multiple code paths. I prefer a straight-line approach that returns as soon as there is an error. This is a style thing. You can do it either way. Here is the same without nesting: if (ctx->linux_io_uring) { return ctx->linux_io_uring; } ctx->linux_io_uring = luring_init(errp); if (!ctx->linux_io_uring) { return NULL; } luring_attach_aio_context(ctx->linux_io_uring, ctx); return ctx->linux_io_uring;
diff --git a/util/async.c b/util/async.c index c10642a385..dd45aff8f5 100644 --- a/util/async.c +++ b/util/async.c @@ -277,6 +277,14 @@ aio_ctx_finalize(GSource *source) } #endif +#ifdef CONFIG_LINUX_IO_URING + if (ctx->linux_io_uring) { + luring_detach_aio_context(ctx->linux_io_uring, ctx); + luring_cleanup(ctx->linux_io_uring); + ctx->linux_io_uring = NULL; + } +#endif + assert(QSLIST_EMPTY(&ctx->scheduled_coroutines)); qemu_bh_delete(ctx->co_schedule_bh); @@ -341,6 +349,25 @@ LinuxAioState *aio_get_linux_aio(AioContext *ctx) } #endif +#ifdef CONFIG_LINUX_IO_URING +LuringState *aio_setup_linux_io_uring(AioContext *ctx, Error **errp) +{ + if (!ctx->linux_io_uring) { + ctx->linux_io_uring = luring_init(errp); + if (ctx->linux_io_uring) { + luring_attach_aio_context(ctx->linux_io_uring, ctx); + } + } + return ctx->linux_io_uring; +} + +LuringState *aio_get_linux_io_uring(AioContext *ctx) +{ + assert(ctx->linux_io_uring); + return ctx->linux_io_uring; +} +#endif + void aio_notify(AioContext *ctx) { /* Write e.g. bh->scheduled before reading ctx->notify_me. Pairs @@ -432,6 +459,11 @@ AioContext *aio_context_new(Error **errp) #ifdef CONFIG_LINUX_AIO ctx->linux_aio = NULL; #endif + +#ifdef CONFIG_LINUX_IO_URING + ctx->linux_io_uring = NULL; +#endif + ctx->thread_pool = NULL; qemu_rec_mutex_init(&ctx->lock); timerlistgroup_init(&ctx->tlg, aio_timerlist_notify, ctx);
Signed-off-by: Aarushi Mehta <mehta.aaru20@gmail.com> --- util/async.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) -- 2.17.1