mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
block-coroutine-wrapper: Introduce no_co_wrapper
Some functions must not be called from coroutine context. The common pattern to use them anyway from a coroutine is running them in a BH and letting the calling coroutine yield to be woken up when the BH is completed. Instead of manually writing such wrappers, add support for generating them to block-coroutine-wrapper. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20230126172432.436111-2-kwolf@redhat.com> Reviewed-by: Emanuele Giuseppe Esposito <eesposit@redhat.com> Reviewed-by: Hanna Czenczek <hreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
1e84cf7957
commit
d6ee2e324e
2 changed files with 86 additions and 11 deletions
|
@ -54,6 +54,20 @@
|
|||
#define co_wrapper_bdrv_rdlock no_coroutine_fn
|
||||
#define co_wrapper_mixed_bdrv_rdlock no_coroutine_fn coroutine_mixed_fn
|
||||
|
||||
/*
|
||||
* no_co_wrapper: Function specifier used by block-coroutine-wrapper.py
|
||||
*
|
||||
* Function specifier which does nothing but mark functions to be generated by
|
||||
* scripts/block-coroutine-wrapper.py.
|
||||
*
|
||||
* A no_co_wrapper function declaration creates a coroutine_fn wrapper around
|
||||
* functions that must not be called in coroutine context. It achieves this by
|
||||
* scheduling a BH in the bottom half that runs the respective non-coroutine
|
||||
* function. The coroutine yields after scheduling the BH and is reentered when
|
||||
* the wrapped function returns.
|
||||
*/
|
||||
#define no_co_wrapper
|
||||
|
||||
#include "block/blockjob.h"
|
||||
|
||||
/* block.c */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue