Skip to content

Commit

Permalink
cpus: use coroutine TLS macros for iothread_locked
Browse files Browse the repository at this point in the history
qemu_mutex_iothread_locked() may be used from coroutines. Standard
__thread variables cannot be used by coroutines. Use the coroutine TLS
macros instead.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20220222140150.27240-5-stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
stefanhaRH authored and kevmw committed Mar 4, 2022
1 parent 17c7815 commit d5d2b15
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions softmmu/cpus.c
Expand Up @@ -25,6 +25,7 @@
#include "qemu/osdep.h"
#include "qemu-common.h"
#include "monitor/monitor.h"
#include "qemu/coroutine-tls.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-machine.h"
#include "qapi/qapi-commands-misc.h"
Expand Down Expand Up @@ -473,11 +474,11 @@ bool qemu_in_vcpu_thread(void)
return current_cpu && qemu_cpu_is_self(current_cpu);
}

static __thread bool iothread_locked = false;
QEMU_DEFINE_STATIC_CO_TLS(bool, iothread_locked)

bool qemu_mutex_iothread_locked(void)
{
return iothread_locked;
return get_iothread_locked();
}

/*
Expand All @@ -490,13 +491,13 @@ void qemu_mutex_lock_iothread_impl(const char *file, int line)

g_assert(!qemu_mutex_iothread_locked());
bql_lock(&qemu_global_mutex, file, line);
iothread_locked = true;
set_iothread_locked(true);
}

void qemu_mutex_unlock_iothread(void)
{
g_assert(qemu_mutex_iothread_locked());
iothread_locked = false;
set_iothread_locked(false);
qemu_mutex_unlock(&qemu_global_mutex);
}

Expand Down

0 comments on commit d5d2b15

Please sign in to comment.