diff options
author | Glauber Costa <glommer@mothafucka.localdomain> | 2009-09-28 15:27:44 -0300 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-10-05 09:32:44 -0500 |
commit | e5bc201df7e060bc4c2912258a77c53f8901356c (patch) | |
tree | d85e3178a7a5d6eebbbca9688ac08886cf8db126 /vl.c | |
parent | 47cbc7aa5e942f7529b88568dc9bd1e71637ad3a (diff) | |
download | qemu-e5bc201df7e060bc4c2912258a77c53f8901356c.zip qemu-e5bc201df7e060bc4c2912258a77c53f8901356c.tar.gz qemu-e5bc201df7e060bc4c2912258a77c53f8901356c.tar.bz2 |
do proper cpu_self check
Currently, our check for qemu_cpu_self only checks if there is a cpu
currently in execution (represented by cpu_single_env being set). While
this might be okay for tcg, it is certainly not okay for kvm, since multiple
cpus might be executing.
Instead, I propose we use pthread primitives to test if the caller thread is
the same as env->thread.
For tcg, it will have the same semantics as before, since all CPUStates will
point to the same thread, and we'll only have one in execution at a time.
Signed-off-by: Glauber Costa <glommer@mothafucka.localdomain>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -3591,9 +3591,14 @@ void qemu_cpu_kick(void *_env) qemu_thread_signal(env->thread, SIGUSR1); } -int qemu_cpu_self(void *env) +int qemu_cpu_self(void *_env) { - return (cpu_single_env != NULL); + CPUState *env = _env; + QemuThread this; + + qemu_thread_self(&this); + + return qemu_thread_equal(&this, env->thread); } static void cpu_signal(int sig) |