Refactor thread retrieval and check
We have qemu_cpu_self and qemu_thread_self. The latter is retrieving the current thread, the former is checking for equality (using CPUState). We also have qemu_thread_equal which is only used like qemu_cpu_self. This refactors the interfaces, creating qemu_cpu_is_self and qemu_thread_is_self as well ass qemu_thread_get_self. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
68c23e5520
commit
b7680cb607
22
cpus.c
22
cpus.c
@ -531,7 +531,7 @@ void qemu_init_vcpu(void *_env)
|
||||
}
|
||||
}
|
||||
|
||||
int qemu_cpu_self(void *env)
|
||||
int qemu_cpu_is_self(void *env)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@ -699,7 +699,7 @@ int qemu_init_main_loop(void)
|
||||
qemu_mutex_init(&qemu_global_mutex);
|
||||
qemu_mutex_lock(&qemu_global_mutex);
|
||||
|
||||
qemu_thread_self(&io_thread);
|
||||
qemu_thread_get_self(&io_thread);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -714,7 +714,7 @@ void run_on_cpu(CPUState *env, void (*func)(void *data), void *data)
|
||||
{
|
||||
struct qemu_work_item wi;
|
||||
|
||||
if (qemu_cpu_self(env)) {
|
||||
if (qemu_cpu_is_self(env)) {
|
||||
func(data);
|
||||
return;
|
||||
}
|
||||
@ -808,7 +808,7 @@ static void *qemu_kvm_cpu_thread_fn(void *arg)
|
||||
int r;
|
||||
|
||||
qemu_mutex_lock(&qemu_global_mutex);
|
||||
qemu_thread_self(env->thread);
|
||||
qemu_thread_get_self(env->thread);
|
||||
|
||||
r = kvm_init_vcpu(env);
|
||||
if (r < 0) {
|
||||
@ -845,7 +845,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
|
||||
CPUState *env = arg;
|
||||
|
||||
qemu_tcg_init_cpu_signals();
|
||||
qemu_thread_self(env->thread);
|
||||
qemu_thread_get_self(env->thread);
|
||||
|
||||
/* signal CPU creation */
|
||||
qemu_mutex_lock(&qemu_global_mutex);
|
||||
@ -888,14 +888,11 @@ void qemu_cpu_kick_self(void)
|
||||
}
|
||||
}
|
||||
|
||||
int qemu_cpu_self(void *_env)
|
||||
int qemu_cpu_is_self(void *_env)
|
||||
{
|
||||
CPUState *env = _env;
|
||||
QemuThread this;
|
||||
|
||||
qemu_thread_self(&this);
|
||||
|
||||
return qemu_thread_equal(&this, env->thread);
|
||||
return qemu_thread_is_self(env->thread);
|
||||
}
|
||||
|
||||
void qemu_mutex_lock_iothread(void)
|
||||
@ -1023,10 +1020,7 @@ void cpu_stop_current(void)
|
||||
|
||||
void vm_stop(int reason)
|
||||
{
|
||||
QemuThread me;
|
||||
qemu_thread_self(&me);
|
||||
|
||||
if (!qemu_thread_equal(&me, &io_thread)) {
|
||||
if (!qemu_thread_is_self(&io_thread)) {
|
||||
qemu_system_vmstop_request(reason);
|
||||
/*
|
||||
* FIXME: should not return to device code in case
|
||||
|
2
exec.c
2
exec.c
@ -1640,7 +1640,7 @@ void cpu_interrupt(CPUState *env, int mask)
|
||||
* If called from iothread context, wake the target cpu in
|
||||
* case its halted.
|
||||
*/
|
||||
if (!qemu_cpu_self(env)) {
|
||||
if (!qemu_cpu_is_self(env)) {
|
||||
qemu_cpu_kick(env);
|
||||
return;
|
||||
}
|
||||
|
@ -290,7 +290,7 @@ void qemu_notify_event(void);
|
||||
/* Unblock cpu */
|
||||
void qemu_cpu_kick(void *env);
|
||||
void qemu_cpu_kick_self(void);
|
||||
int qemu_cpu_self(void *env);
|
||||
int qemu_cpu_is_self(void *env);
|
||||
|
||||
/* work queue */
|
||||
struct qemu_work_item {
|
||||
|
@ -176,14 +176,14 @@ void qemu_thread_signal(QemuThread *thread, int sig)
|
||||
error_exit(err, __func__);
|
||||
}
|
||||
|
||||
void qemu_thread_self(QemuThread *thread)
|
||||
void qemu_thread_get_self(QemuThread *thread)
|
||||
{
|
||||
thread->thread = pthread_self();
|
||||
}
|
||||
|
||||
int qemu_thread_equal(QemuThread *thread1, QemuThread *thread2)
|
||||
int qemu_thread_is_self(QemuThread *thread)
|
||||
{
|
||||
return pthread_equal(thread1->thread, thread2->thread);
|
||||
return pthread_equal(pthread_self(), thread->thread);
|
||||
}
|
||||
|
||||
void qemu_thread_exit(void *retval)
|
||||
|
@ -37,8 +37,8 @@ void qemu_thread_create(QemuThread *thread,
|
||||
void *(*start_routine)(void*),
|
||||
void *arg);
|
||||
void qemu_thread_signal(QemuThread *thread, int sig);
|
||||
void qemu_thread_self(QemuThread *thread);
|
||||
int qemu_thread_equal(QemuThread *thread1, QemuThread *thread2);
|
||||
void qemu_thread_get_self(QemuThread *thread);
|
||||
int qemu_thread_is_self(QemuThread *thread);
|
||||
void qemu_thread_exit(void *retval);
|
||||
|
||||
#endif
|
||||
|
@ -1355,7 +1355,7 @@ int kvm_arch_put_registers(CPUState *env, int level)
|
||||
{
|
||||
int ret;
|
||||
|
||||
assert(cpu_is_stopped(env) || qemu_cpu_self(env));
|
||||
assert(cpu_is_stopped(env) || qemu_cpu_is_self(env));
|
||||
|
||||
ret = kvm_getput_regs(env, 1);
|
||||
if (ret < 0) {
|
||||
@ -1403,7 +1403,7 @@ int kvm_arch_get_registers(CPUState *env)
|
||||
{
|
||||
int ret;
|
||||
|
||||
assert(cpu_is_stopped(env) || qemu_cpu_self(env));
|
||||
assert(cpu_is_stopped(env) || qemu_cpu_is_self(env));
|
||||
|
||||
ret = kvm_getput_regs(env, 0);
|
||||
if (ret < 0) {
|
||||
|
@ -303,7 +303,7 @@ static void *vnc_worker_thread(void *arg)
|
||||
{
|
||||
VncJobQueue *queue = arg;
|
||||
|
||||
qemu_thread_self(&queue->thread);
|
||||
qemu_thread_get_self(&queue->thread);
|
||||
|
||||
while (!vnc_worker_thread_loop(queue)) ;
|
||||
vnc_queue_clear(queue);
|
||||
|
Loading…
Reference in New Issue
Block a user