Re: [PATCH v5 08/18] accel/qtest: Support qtest accelerator for Windows

2022-10-11 Thread Thomas Huth

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

2022-10-11 Thread Bin Meng
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

2022-10-06 Thread Bin Meng
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