diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-07-14 09:36:13 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-07-14 09:36:13 +0000 |
commit | a8e5ac33d22c335b792389a5b153bfc02b04fcdc (patch) | |
tree | eb60626db9f7bc4e1e1827852a2d899ca24632b2 /vl.c | |
parent | ec607da7c2f2199a486f8df243f23f509f6ab5c0 (diff) |
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
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -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(); |