From: Bin Meng <bmeng.cn@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Xuzhou Cheng" <xuzhou.cheng@windriver.com>,
"Bin Meng" <bin.meng@windriver.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Laurent Vivier" <lvivier@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Thomas Huth" <thuth@redhat.com>,
"Yanan Wang" <wangyanan55@huawei.com>
Subject: [PATCH v5 08/18] accel/qtest: Support qtest accelerator for Windows
Date: Thu, 6 Oct 2022 23:19:17 +0800 [thread overview]
Message-ID: <20221006151927.2079583-9-bmeng.cn@gmail.com> (raw)
In-Reply-To: <20221006151927.2079583-1-bmeng.cn@gmail.com>
From: Xuzhou Cheng <xuzhou.cheng@windriver.com>
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 <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
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(&waitset);
sigaddset(&waitset, 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(&waitset, &sig);
@@ -49,6 +53,9 @@ static void *dummy_cpu_thread_fn(void *arg)
perror("sigwait");
exit(1);
}
+#else
+ qemu_sem_wait(&cpu->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(&cpu->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(&cpu->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
next prev parent reply other threads:[~2022-10-06 16:02 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-06 15:19 [PATCH v5 00/18] tests/qtest: Enable running qtest on Windows Bin Meng
2022-10-06 15:19 ` [PATCH v5 01/18] semihosting/arm-compat-semi: Avoid using hardcoded /tmp Bin Meng
2022-10-06 15:19 ` [PATCH v5 02/18] tcg: " Bin Meng
2022-10-06 15:19 ` [PATCH v5 03/18] util/qemu-sockets: Use g_get_tmp_dir() to get the directory for temporary files Bin Meng
2022-10-06 15:19 ` [PATCH v5 04/18] tests/qtest: migration-test: Avoid using hardcoded /tmp Bin Meng
2022-10-25 23:44 ` Richard Henderson
2022-10-26 0:44 ` Bin Meng
2022-10-26 1:25 ` Richard Henderson
2022-10-06 15:19 ` [PATCH v5 05/18] block/vvfat: Unify the mkdir() call Bin Meng
2022-10-06 15:19 ` [PATCH v5 06/18] fsdev/virtfs-proxy-helper: Use g_mkdir() Bin Meng
2022-10-06 15:19 ` [PATCH v5 07/18] hw/usb: dev-mtp: " Bin Meng
2022-10-06 15:19 ` Bin Meng [this message]
2022-10-11 12:32 ` [PATCH v5 08/18] accel/qtest: Support qtest accelerator for Windows Thomas Huth
2022-10-11 12:37 ` Bin Meng
2022-10-06 15:19 ` [PATCH v5 09/18] tests/qtest: Use send/recv for socket communication Bin Meng
2022-10-18 16:47 ` Alex Bennée
2022-10-19 7:09 ` Bin Meng
2022-10-19 9:28 ` Thomas Huth
2022-10-18 17:09 ` Peter Maydell
2022-10-18 17:14 ` Daniel P. Berrangé
2022-10-06 15:19 ` [PATCH v5 10/18] tests/qtest: libqtest: Install signal handler via signal() Bin Meng
2022-10-11 14:14 ` Thomas Huth
2022-10-11 14:54 ` Bin Meng
2022-10-06 15:19 ` [PATCH v5 11/18] tests/qtest: Support libqtest to build and run on Windows Bin Meng
2022-10-12 7:43 ` Marc-André Lureau
2022-10-06 15:19 ` [PATCH v5 12/18] tests/qtest: migration-test: Make sure QEMU process "to" exited after migration is canceled Bin Meng
2022-10-12 7:57 ` Marc-André Lureau
2022-10-06 15:19 ` [PATCH v5 13/18] tests/qtest: libqtest: Correct the timeout unit of blocking receive calls for win32 Bin Meng
2022-10-06 15:19 ` [PATCH v5 14/18] io/channel-watch: Drop a superfluous '#ifdef WIN32' Bin Meng
2022-10-06 15:19 ` [PATCH v5 15/18] io/channel-watch: Drop the unnecessary cast Bin Meng
2022-10-06 15:19 ` [PATCH v5 16/18] io/channel-watch: Fix socket watch on Windows Bin Meng
2022-10-06 15:19 ` [PATCH v5 17/18] .gitlab-ci.d/windows.yml: Increase the timeout to 90 minutes Bin Meng
2022-10-07 9:57 ` Marc-André Lureau
2022-10-08 1:11 ` Bin Meng
2022-10-11 14:41 ` Thomas Huth
2022-10-11 15:10 ` Bin Meng
2022-10-06 15:19 ` [PATCH v5 18/18] tests/qtest: Enable qtest build on Windows Bin Meng
2022-10-06 20:33 ` [PATCH v5 00/18] tests/qtest: Enable running qtest " Alex Bennée
2022-10-07 5:31 ` Bin Meng
2022-10-17 15:00 ` Bin Meng
2022-10-17 16:40 ` Christian Schoenebeck
2022-10-18 15:59 ` Alex Bennée
2022-10-19 7:07 ` Bin Meng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221006151927.2079583-9-bmeng.cn@gmail.com \
--to=bmeng.cn@gmail.com \
--cc=bin.meng@windriver.com \
--cc=eduardo@habkost.net \
--cc=f4bug@amsat.org \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
--cc=wangyanan55@huawei.com \
--cc=xuzhou.cheng@windriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).