util/async: replace __thread with QEMU TLS macros
QEMU TLS macros must be used to make TLS variables safe with coroutines. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20220222140150.27240-3-stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
7d29c341c9
commit
47b7446456
12
util/async.c
12
util/async.c
@ -32,6 +32,7 @@
|
|||||||
#include "qemu/rcu_queue.h"
|
#include "qemu/rcu_queue.h"
|
||||||
#include "block/raw-aio.h"
|
#include "block/raw-aio.h"
|
||||||
#include "qemu/coroutine_int.h"
|
#include "qemu/coroutine_int.h"
|
||||||
|
#include "qemu/coroutine-tls.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
/***********************************************************/
|
/***********************************************************/
|
||||||
@ -675,12 +676,13 @@ void aio_context_release(AioContext *ctx)
|
|||||||
qemu_rec_mutex_unlock(&ctx->lock);
|
qemu_rec_mutex_unlock(&ctx->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static __thread AioContext *my_aiocontext;
|
QEMU_DEFINE_STATIC_CO_TLS(AioContext *, my_aiocontext)
|
||||||
|
|
||||||
AioContext *qemu_get_current_aio_context(void)
|
AioContext *qemu_get_current_aio_context(void)
|
||||||
{
|
{
|
||||||
if (my_aiocontext) {
|
AioContext *ctx = get_my_aiocontext();
|
||||||
return my_aiocontext;
|
if (ctx) {
|
||||||
|
return ctx;
|
||||||
}
|
}
|
||||||
if (qemu_mutex_iothread_locked()) {
|
if (qemu_mutex_iothread_locked()) {
|
||||||
/* Possibly in a vCPU thread. */
|
/* Possibly in a vCPU thread. */
|
||||||
@ -691,6 +693,6 @@ AioContext *qemu_get_current_aio_context(void)
|
|||||||
|
|
||||||
void qemu_set_current_aio_context(AioContext *ctx)
|
void qemu_set_current_aio_context(AioContext *ctx)
|
||||||
{
|
{
|
||||||
assert(!my_aiocontext);
|
assert(!get_my_aiocontext());
|
||||||
my_aiocontext = ctx;
|
set_my_aiocontext(ctx);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user