win32 compilation - force process affinity on win32 as a workaround for SMP issues


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2051 c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/vl.c b/vl.c
index c9992d8..77ebd35 100644
--- a/vl.c
+++ b/vl.c
@@ -517,6 +517,8 @@
 
 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 @@
     }
 #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();