SHA256
1
0
forked from pool/qemu
qemu/0023-linux-user-Run-multi-threaded-code-.patch
Andreas Färber 532065e741 Accepting request 143323 from home:a_faerber:branches:Virtualization
Update to v1.3.0-rc1 plus an OOM workaround. Since SPICE v0.12.0 doesn't build on 11.4 due to a missing build dependency, enable SPICE only from 12.1 on.

OBS-URL: https://build.opensuse.org/request/show/143323
OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=119
2012-11-27 20:42:06 +00:00

41 lines
1.5 KiB
Diff

From 871faba46546dc6779367f54e19cf047109d798b Mon Sep 17 00:00:00 2001
From: Alexander Graf <agraf@suse.de>
Date: Tue, 10 Jul 2012 20:40:55 +0200
Subject: [PATCH] linux-user: Run multi-threaded code on a single core
Running multi-threaded code can easily expose some of the fundamental
breakages in QEMU's design. It's just not a well supported scenario.
So if we pin the whole process to a single host CPU, we guarantee that
we will never have concurrent memory access actually happen. We can still
get scheduled away at any time, so it's no complete guarantee, but apparently
it reduces the odds well enough to get my test cases to pass.
This gets Java 1.7 working for me again on my test box.
Signed-off-by: Alexander Graf <agraf@suse.de>
---
linux-user/syscall.c | 9 +++++++++
1 Datei geändert, 9 Zeilen hinzugefügt(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index d62e9e6..5295afb 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4400,6 +4400,15 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp,
if (nptl_flags & CLONE_SETTLS)
cpu_set_tls (new_env, newtls);
+ /* agraf: Pin ourselves to a single CPU when running multi-threaded.
+ This turned out to improve stability for me. */
+ {
+ cpu_set_t mask;
+ CPU_ZERO(&mask);
+ CPU_SET(0, &mask);
+ sched_setaffinity(0, sizeof(mask), &mask);
+ }
+
/* Grab a mutex so that thread setup appears atomic. */
pthread_mutex_lock(&clone_lock);