On 10/16/20 8:48 AM, Volker Rümelin wrote: >> From: Claudio Fontana <cfont...@suse.de> >> >> register a "CpusAccel" interface for HAX as well. >> > >> diff --git a/softmmu/cpus.c b/softmmu/cpus.c >> index 9fa73735a2..900fff827a 100644 >> --- a/softmmu/cpus.c >> +++ b/softmmu/cpus.c >> @@ -416,35 +403,6 @@ void qemu_wait_io_event(CPUState *cpu) >> qemu_wait_io_event_common(cpu); >> } >> >> -static void *qemu_hax_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(); >> - current_cpu = cpu; > > Hi Claudio, > > is there a reason why you removed current_cpu = cpu; from hax_cpu_thread_fn() > when you moved that function to target/i386/hax-cpus.c? This change broke HAX > on Windows. Adding back that line makes it work again.
Hello Volker, I see the change in the history and it was clearly an ugly mistake on my part. There was no reason or intention to remove the current_cpu = cpu assignment The fix seems indeed to just + current_cpu = cpu; and I will send a patch momentarily that does just that, but I don't know of any CI coverage for Windows + hax currently, so it would be good if you could spin the change to verify that it fixes the problem. Ciao, Claudio > > The simplest reproducer is: > $ ./qemu-system-x86_64.exe -machine pc,accel=hax -smp 2 -display gtk > HAX is working and emulator runs in fast virt mode. > > Then the QEMU window opens and shows 'Guest has not initialized the display > (yet).' forever. > > A look at the Windows Task Manager suggests one thread is busy looping. > > With best regards, > Volker > >> - hax_init_vcpu(cpu); >> - cpu_thread_signal_created(cpu); >> - qemu_guest_random_seed_thread_part2(cpu->random_seed); >> - >> - do { >> - if (cpu_can_run(cpu)) { >> - r = hax_smp_cpu_exec(cpu); >> - if (r == EXCP_DEBUG) { >> - cpu_handle_guest_debug(cpu); >> - } >> - } >> - >> - qemu_wait_io_event(cpu); >> - } while (!cpu->unplug || cpu_can_run(cpu)); >> - rcu_unregister_thread(); >> - return NULL; >> -} >> - >> /* The HVF-specific vCPU thread function. This one should only run when the >> host >> * CPU supports the VMX "unrestricted guest" feature. */ >> static void *qemu_hvf_cpu_thread_fn(void *arg) >>