mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
io_uring: use LuringState from the running thread
Remove usage of aio_context_acquire by always submitting asynchronous AIO to the current thread's LuringState. In order to prevent mistakes from the caller side, avoid passing LuringState in luring_io_{plug/unplug} and luring_co_submit, and document the functions to make clear that they work in the current thread's AioContext. Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> Message-Id: <20230203131731.851116-3-eesposit@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
ab50533b69
commit
a75e4e4365
4 changed files with 30 additions and 24 deletions
|
@ -211,10 +211,6 @@ struct AioContext {
|
|||
struct LinuxAioState *linux_aio;
|
||||
#endif
|
||||
#ifdef CONFIG_LINUX_IO_URING
|
||||
/*
|
||||
* State for Linux io_uring. Uses aio_context_acquire/release for
|
||||
* locking.
|
||||
*/
|
||||
struct LuringState *linux_io_uring;
|
||||
|
||||
/* State for file descriptor monitoring using Linux io_uring */
|
||||
|
|
|
@ -69,12 +69,19 @@ void laio_io_unplug(uint64_t dev_max_batch);
|
|||
typedef struct LuringState LuringState;
|
||||
LuringState *luring_init(Error **errp);
|
||||
void luring_cleanup(LuringState *s);
|
||||
int coroutine_fn luring_co_submit(BlockDriverState *bs, LuringState *s, int fd,
|
||||
uint64_t offset, QEMUIOVector *qiov, int type);
|
||||
|
||||
/* luring_co_submit: submit I/O requests in the thread's current AioContext. */
|
||||
int coroutine_fn luring_co_submit(BlockDriverState *bs, int fd, uint64_t offset,
|
||||
QEMUIOVector *qiov, int type);
|
||||
void luring_detach_aio_context(LuringState *s, AioContext *old_context);
|
||||
void luring_attach_aio_context(LuringState *s, AioContext *new_context);
|
||||
void luring_io_plug(BlockDriverState *bs, LuringState *s);
|
||||
void luring_io_unplug(BlockDriverState *bs, LuringState *s);
|
||||
|
||||
/*
|
||||
* luring_io_plug/unplug work in the thread's current AioContext, therefore the
|
||||
* caller must ensure that they are paired in the same IOThread.
|
||||
*/
|
||||
void luring_io_plug(void);
|
||||
void luring_io_unplug(void);
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue