Re: [PATCH v5 08/18] accel/qtest: Support qtest accelerator for Windows
On 06/10/2022 17.19, Bin Meng wrote: From: Xuzhou Cheng Currently signal SIGIPI [=SIGUSR1] is used to kick the dummy CPU when qtest accelerator is used. However SIGUSR1 is unsupported on Windows. To support Windows, we add a QemuSemaphore CPUState::sem to kick the dummy CPU instead for Windows. Signed-off-by: Xuzhou Cheng Signed-off-by: Bin Meng Reviewed-by: Marc-André Lureau --- Changes in v5: - restore to v1 version which does not touch the posix implementation include/hw/core/cpu.h | 1 + accel/dummy-cpus.c | 14 -- softmmu/cpus.c | 9 + accel/meson.build | 1 + accel/qtest/meson.build | 1 + 5 files changed, 20 insertions(+), 6 deletions(-) ... diff --git a/accel/meson.build b/accel/meson.build index b9a963cf80..b21c85dc0a 100644 --- a/accel/meson.build +++ b/accel/meson.build @@ -17,4 +17,5 @@ dummy_ss.add(files( )) specific_ss.add_all(when: ['CONFIG_SOFTMMU', 'CONFIG_POSIX'], if_true: dummy_ss) +specific_ss.add_all(when: ['CONFIG_WIN32'], if_true: dummy_ss) Sorry for not noticing it earlier, but I just noticed that this likely should also only be added for softmmu builds on Windows? So instead of adding a new line, I'd rather simply remove the CONFIG_POSIX from the previous line? specific_ss.add_all(when: ['CONFIG_XEN'], if_true: dummy_ss) diff --git a/accel/qtest/meson.build b/accel/qtest/meson.build index 4c65600293..a4876fc0f2 100644 --- a/accel/qtest/meson.build +++ b/accel/qtest/meson.build @@ -1,2 +1,3 @@ qtest_module_ss.add(when: ['CONFIG_SOFTMMU', 'CONFIG_POSIX'], if_true: files('qtest.c')) +qtest_module_ss.add(when: ['CONFIG_WIN32'], if_true: files('qtest.c')) Dito, rather remove the CONFIG_POSIX in the previous line? Thomas
Re: [PATCH v5 08/18] accel/qtest: Support qtest accelerator for Windows
On Tue, Oct 11, 2022 at 8:32 PM Thomas Huth wrote: > > On 06/10/2022 17.19, Bin Meng wrote: > > From: Xuzhou Cheng > > > > Currently signal SIGIPI [=SIGUSR1] is used to kick the dummy CPU > > when qtest accelerator is used. However SIGUSR1 is unsupported on > > Windows. To support Windows, we add a QemuSemaphore CPUState::sem > > to kick the dummy CPU instead for Windows. > > > > Signed-off-by: Xuzhou Cheng > > Signed-off-by: Bin Meng > > Reviewed-by: Marc-André Lureau > > --- > > > > Changes in v5: > > - restore to v1 version which does not touch the posix implementation > > > > include/hw/core/cpu.h | 1 + > > accel/dummy-cpus.c | 14 -- > > softmmu/cpus.c | 9 + > > accel/meson.build | 1 + > > accel/qtest/meson.build | 1 + > > 5 files changed, 20 insertions(+), 6 deletions(-) > ... > > diff --git a/accel/meson.build b/accel/meson.build > > index b9a963cf80..b21c85dc0a 100644 > > --- a/accel/meson.build > > +++ b/accel/meson.build > > @@ -17,4 +17,5 @@ dummy_ss.add(files( > > )) > > > > specific_ss.add_all(when: ['CONFIG_SOFTMMU', 'CONFIG_POSIX'], if_true: > > dummy_ss) > > +specific_ss.add_all(when: ['CONFIG_WIN32'], if_true: dummy_ss) > > Sorry for not noticing it earlier, but I just noticed that this likely > should also only be added for softmmu builds on Windows? > > So instead of adding a new line, I'd rather simply remove the CONFIG_POSIX > from the previous line? Yes, I think that should work. > > > specific_ss.add_all(when: ['CONFIG_XEN'], if_true: dummy_ss) > > diff --git a/accel/qtest/meson.build b/accel/qtest/meson.build > > index 4c65600293..a4876fc0f2 100644 > > --- a/accel/qtest/meson.build > > +++ b/accel/qtest/meson.build > > @@ -1,2 +1,3 @@ > > qtest_module_ss.add(when: ['CONFIG_SOFTMMU', 'CONFIG_POSIX'], > > if_true: files('qtest.c')) > > +qtest_module_ss.add(when: ['CONFIG_WIN32'], if_true: files('qtest.c')) > > Dito, rather remove the CONFIG_POSIX in the previous line? > Regards, Bin
[PATCH v5 08/18] accel/qtest: Support qtest accelerator for Windows
From: Xuzhou Cheng Currently signal SIGIPI [=SIGUSR1] is used to kick the dummy CPU when qtest accelerator is used. However SIGUSR1 is unsupported on Windows. To support Windows, we add a QemuSemaphore CPUState::sem to kick the dummy CPU instead for Windows. Signed-off-by: Xuzhou Cheng Signed-off-by: Bin Meng Reviewed-by: Marc-André Lureau --- Changes in v5: - restore to v1 version which does not touch the posix implementation include/hw/core/cpu.h | 1 + accel/dummy-cpus.c | 14 -- softmmu/cpus.c | 9 + accel/meson.build | 1 + accel/qtest/meson.build | 1 + 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index f9b58773f7..8830546121 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -333,6 +333,7 @@ struct CPUState { struct QemuThread *thread; #ifdef _WIN32 HANDLE hThread; +QemuSemaphore sem; #endif int thread_id; bool running, has_waiter; diff --git a/accel/dummy-cpus.c b/accel/dummy-cpus.c index 10429fdfb2..d6a1b8d0a2 100644 --- a/accel/dummy-cpus.c +++ b/accel/dummy-cpus.c @@ -21,8 +21,6 @@ static void *dummy_cpu_thread_fn(void *arg) { CPUState *cpu = arg; -sigset_t waitset; -int r; rcu_register_thread(); @@ -32,8 +30,13 @@ static void *dummy_cpu_thread_fn(void *arg) cpu->can_do_io = 1; current_cpu = cpu; +#ifndef _WIN32 +sigset_t waitset; +int r; + sigemptyset(); sigaddset(, SIG_IPI); +#endif /* signal CPU creation */ cpu_thread_signal_created(cpu); @@ -41,6 +44,7 @@ static void *dummy_cpu_thread_fn(void *arg) do { qemu_mutex_unlock_iothread(); +#ifndef _WIN32 do { int sig; r = sigwait(, ); @@ -49,6 +53,9 @@ static void *dummy_cpu_thread_fn(void *arg) perror("sigwait"); exit(1); } +#else +qemu_sem_wait(>sem); +#endif qemu_mutex_lock_iothread(); qemu_wait_io_event(cpu); } while (!cpu->unplug); @@ -69,4 +76,7 @@ void dummy_start_vcpu_thread(CPUState *cpu) cpu->cpu_index); qemu_thread_create(cpu->thread, thread_name, dummy_cpu_thread_fn, cpu, QEMU_THREAD_JOINABLE); +#ifdef _WIN32 +qemu_sem_init(>sem, 0); +#endif } diff --git a/softmmu/cpus.c b/softmmu/cpus.c index 61b27ff59d..9dd1a4dc17 100644 --- a/softmmu/cpus.c +++ b/softmmu/cpus.c @@ -437,18 +437,19 @@ void qemu_wait_io_event(CPUState *cpu) void cpus_kick_thread(CPUState *cpu) { -#ifndef _WIN32 -int err; - if (cpu->thread_kicked) { return; } cpu->thread_kicked = true; -err = pthread_kill(cpu->thread->thread, SIG_IPI); + +#ifndef _WIN32 +int err = pthread_kill(cpu->thread->thread, SIG_IPI); if (err && err != ESRCH) { fprintf(stderr, "qemu:%s: %s", __func__, strerror(err)); exit(1); } +#else +qemu_sem_post(>sem); #endif } diff --git a/accel/meson.build b/accel/meson.build index b9a963cf80..b21c85dc0a 100644 --- a/accel/meson.build +++ b/accel/meson.build @@ -17,4 +17,5 @@ dummy_ss.add(files( )) specific_ss.add_all(when: ['CONFIG_SOFTMMU', 'CONFIG_POSIX'], if_true: dummy_ss) +specific_ss.add_all(when: ['CONFIG_WIN32'], if_true: dummy_ss) specific_ss.add_all(when: ['CONFIG_XEN'], if_true: dummy_ss) diff --git a/accel/qtest/meson.build b/accel/qtest/meson.build index 4c65600293..a4876fc0f2 100644 --- a/accel/qtest/meson.build +++ b/accel/qtest/meson.build @@ -1,2 +1,3 @@ qtest_module_ss.add(when: ['CONFIG_SOFTMMU', 'CONFIG_POSIX'], if_true: files('qtest.c')) +qtest_module_ss.add(when: ['CONFIG_WIN32'], if_true: files('qtest.c')) -- 2.34.1