]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
system/main: comment lock rationale
authorPierrick Bouvier <pierrick.bouvier@linaro.org>
Thu, 15 May 2025 17:46:41 +0000 (10:46 -0700)
committerRichard Henderson <richard.henderson@linaro.org>
Wed, 28 May 2025 07:07:59 +0000 (08:07 +0100)
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20250515174641.4000309-1-pierrick.bouvier@linaro.org>

system/main.c

index 1c022067349afc7c6b211b639dbb3db0f13d4ce0..b8f7157cc346a37095700d51f96b1a353d06b549 100644 (file)
@@ -69,8 +69,21 @@ int (*qemu_main)(void) = os_darwin_cfrunloop_main;
 int main(int argc, char **argv)
 {
     qemu_init(argc, argv);
+
+    /*
+     * qemu_init acquires the BQL and replay mutex lock. BQL is acquired when
+     * initializing cpus, to block associated threads until initialization is
+     * complete. Replay_mutex lock is acquired on initialization, because it
+     * must be held when configuring icount_mode.
+     *
+     * On MacOS, qemu main event loop runs in a background thread, as main
+     * thread must be reserved for UI. Thus, we need to transfer lock ownership,
+     * and the simplest way to do that is to release them, and reacquire them
+     * from qemu_default_main.
+     */
     bql_unlock();
     replay_mutex_unlock();
+
     if (qemu_main) {
         QemuThread main_loop_thread;
         qemu_thread_create(&main_loop_thread, "qemu_main",