#include "qemu/osdep.h"
#include "qapi/error.h"
-#include "qemu-common.h"
#include "block/aio.h"
#include "block/thread-pool.h"
#include "qemu/main-loop.h"
qemu_rec_mutex_destroy(&ctx->lock);
qemu_lockcnt_destroy(&ctx->list_lock);
timerlistgroup_deinit(&ctx->tlg);
+ aio_context_destroy(ctx);
}
static GSourceFuncs aio_source_funcs = {
}
#ifdef CONFIG_LINUX_AIO
-LinuxAioState *aio_get_linux_aio(AioContext *ctx)
+LinuxAioState *aio_setup_linux_aio(AioContext *ctx, Error **errp)
{
if (!ctx->linux_aio) {
- ctx->linux_aio = laio_init();
- laio_attach_aio_context(ctx->linux_aio, ctx);
+ ctx->linux_aio = laio_init(errp);
+ if (ctx->linux_aio) {
+ laio_attach_aio_context(ctx->linux_aio, ctx);
+ }
}
return ctx->linux_aio;
}
+
+LinuxAioState *aio_get_linux_aio(AioContext *ctx)
+{
+ assert(ctx->linux_aio);
+ return ctx->linux_aio;
+}
#endif
void aio_notify(AioContext *ctx)
/* Protected by write barrier in qemu_aio_coroutine_enter */
atomic_set(&co->scheduled, NULL);
- qemu_coroutine_enter(co);
+ qemu_aio_coroutine_enter(ctx, co);
aio_context_release(ctx);
}
}