Signed-off-by: Emilio G. Cota <c...@braap.org> --- cpus.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/cpus.c b/cpus.c index 81dda93..fd9e903 100644 --- a/cpus.c +++ b/cpus.c @@ -922,18 +922,23 @@ static void qemu_kvm_wait_io_event(CPUState *cpu) qemu_wait_io_event_common(cpu); } +/* call with BQL held */ +static void qemu_cpu_thread_init_common(CPUState *cpu) +{ + rcu_register_thread(); + qemu_thread_get_self(cpu->thread); + cpu->thread_id = qemu_get_thread_id(); + cpu->can_do_io = 1; + current_cpu = cpu; +} + static void *qemu_kvm_cpu_thread_fn(void *arg) { CPUState *cpu = arg; int r; - rcu_register_thread(); - qemu_mutex_lock_iothread(); - qemu_thread_get_self(cpu->thread); - cpu->thread_id = qemu_get_thread_id(); - cpu->can_do_io = 1; - current_cpu = cpu; + qemu_cpu_thread_init_common(cpu); r = kvm_init_vcpu(cpu); if (r < 0) { @@ -970,13 +975,8 @@ static void *qemu_dummy_cpu_thread_fn(void *arg) sigset_t waitset; int r; - rcu_register_thread(); - qemu_mutex_lock_iothread(); - qemu_thread_get_self(cpu->thread); - cpu->thread_id = qemu_get_thread_id(); - cpu->can_do_io = 1; - current_cpu = cpu; + qemu_cpu_thread_init_common(cpu); sigemptyset(&waitset); sigaddset(&waitset, SIG_IPI); @@ -1009,15 +1009,9 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) { CPUState *cpu = arg; - rcu_register_thread(); - qemu_mutex_lock_iothread(); - qemu_thread_get_self(cpu->thread); - - cpu->thread_id = qemu_get_thread_id(); + qemu_cpu_thread_init_common(cpu); cpu->created = true; - cpu->can_do_io = 1; - current_cpu = cpu; qemu_cond_signal(&qemu_cpu_cond); -- 1.9.1