From a8e5ac33d22c335b792389a5b153bfc02b04fcdc Mon Sep 17 00:00:00 2001
From: bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Date: Fri, 14 Jul 2006 09:36:13 +0000
Subject: [PATCH] win32 compilation - force process affinity on win32 as a workaround for SMP issues

---
 vl.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+), 0 deletions(-)

diff --git a/vl.c b/vl.c
index c9992d8..77ebd35 100644
--- a/vl.c
+++ b/vl.c
@@ -517,6 +517,8 @@ static int64_t clock_freq;
 
 static void init_get_clock(void)
 {
+    LARGE_INTEGER freq;
+    int ret;
     ret = QueryPerformanceFrequency(&freq);
     if (ret == 0) {
         fprintf(stderr, "Could not calibrate ticks\n");
@@ -5614,6 +5616,24 @@ int main(int argc, char **argv)
     }
 #else
     SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
+    /* Note: cpu_interrupt() is currently not SMP safe, so we force
+       QEMU to run on a single CPU */
+    {
+        HANDLE h;
+        DWORD mask, smask;
+        int i;
+        h = GetCurrentProcess();
+        if (GetProcessAffinityMask(h, &mask, &smask)) {
+            for(i = 0; i < 32; i++) {
+                if (mask & (1 << i))
+                    break;
+            }
+            if (i != 32) {
+                mask = 1 << i;
+                SetProcessAffinityMask(h, mask);
+            }
+        }
+    }
 #endif
     init_timers();
     init_timer_alarm();
--
libgit2 0.23.3