]> git.ipfire.org Git - thirdparty/qemu.git/blame - cpus.c
vl: Fix compiler warning for builds without VNC
[thirdparty/qemu.git] / cpus.c
CommitLineData
296af7c9
BS
1/*
2 * QEMU System Emulator
3 *
4 * Copyright (c) 2003-2008 Fabrice Bellard
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24
25/* Needed early for CONFIG_BSD etc. */
26#include "config-host.h"
27
83c9089e 28#include "monitor/monitor.h"
a4e15de9 29#include "qapi/qmp/qerror.h"
d49b6836 30#include "qemu/error-report.h"
9c17d615 31#include "sysemu/sysemu.h"
022c62cb 32#include "exec/gdbstub.h"
9c17d615
PB
33#include "sysemu/dma.h"
34#include "sysemu/kvm.h"
de0b36b6 35#include "qmp-commands.h"
296af7c9 36
1de7afc9 37#include "qemu/thread.h"
9c17d615
PB
38#include "sysemu/cpus.h"
39#include "sysemu/qtest.h"
1de7afc9
PB
40#include "qemu/main-loop.h"
41#include "qemu/bitmap.h"
cb365646 42#include "qemu/seqlock.h"
a4e15de9 43#include "qapi-event.h"
9cb805fd 44#include "hw/nmi.h"
0ff0fc19
JK
45
46#ifndef _WIN32
1de7afc9 47#include "qemu/compatfd.h"
0ff0fc19 48#endif
296af7c9 49
6d9cb73c
JK
50#ifdef CONFIG_LINUX
51
52#include <sys/prctl.h>
53
c0532a76
MT
54#ifndef PR_MCE_KILL
55#define PR_MCE_KILL 33
56#endif
57
6d9cb73c
JK
58#ifndef PR_MCE_KILL_SET
59#define PR_MCE_KILL_SET 1
60#endif
61
62#ifndef PR_MCE_KILL_EARLY
63#define PR_MCE_KILL_EARLY 1
64#endif
65
66#endif /* CONFIG_LINUX */
67
182735ef 68static CPUState *next_cpu;
27498bef
ST
69int64_t max_delay;
70int64_t max_advance;
296af7c9 71
321bc0b2
TC
72bool cpu_is_stopped(CPUState *cpu)
73{
74 return cpu->stopped || !runstate_is_running();
75}
76
a98ae1d8 77static bool cpu_thread_is_idle(CPUState *cpu)
ac873f1e 78{
c64ca814 79 if (cpu->stop || cpu->queued_work_first) {
ac873f1e
PM
80 return false;
81 }
321bc0b2 82 if (cpu_is_stopped(cpu)) {
ac873f1e
PM
83 return true;
84 }
8c2e1b00 85 if (!cpu->halted || cpu_has_work(cpu) ||
215e79c0 86 kvm_halt_in_kernel()) {
ac873f1e
PM
87 return false;
88 }
89 return true;
90}
91
92static bool all_cpu_threads_idle(void)
93{
182735ef 94 CPUState *cpu;
ac873f1e 95
bdc44640 96 CPU_FOREACH(cpu) {
182735ef 97 if (!cpu_thread_is_idle(cpu)) {
ac873f1e
PM
98 return false;
99 }
100 }
101 return true;
102}
103
946fb27c
PB
104/***********************************************************/
105/* guest cycle counter */
106
a3270e19
PB
107/* Protected by TimersState seqlock */
108
5045e9d9 109static bool icount_sleep = true;
71468395 110static int64_t vm_clock_warp_start = -1;
946fb27c
PB
111/* Conversion factor from emulated instructions to virtual clock ticks. */
112static int icount_time_shift;
113/* Arbitrarily pick 1MIPS as the minimum allowable speed. */
114#define MAX_ICOUNT_SHIFT 10
a3270e19 115
946fb27c
PB
116static QEMUTimer *icount_rt_timer;
117static QEMUTimer *icount_vm_timer;
118static QEMUTimer *icount_warp_timer;
946fb27c
PB
119
120typedef struct TimersState {
cb365646 121 /* Protected by BQL. */
946fb27c
PB
122 int64_t cpu_ticks_prev;
123 int64_t cpu_ticks_offset;
cb365646
LPF
124
125 /* cpu_clock_offset can be read out of BQL, so protect it with
126 * this lock.
127 */
128 QemuSeqLock vm_clock_seqlock;
946fb27c
PB
129 int64_t cpu_clock_offset;
130 int32_t cpu_ticks_enabled;
131 int64_t dummy;
c96778bb
FK
132
133 /* Compensate for varying guest execution speed. */
134 int64_t qemu_icount_bias;
135 /* Only written by TCG thread */
136 int64_t qemu_icount;
946fb27c
PB
137} TimersState;
138
d9cd4007 139static TimersState timers_state;
946fb27c 140
2a62914b 141int64_t cpu_get_icount_raw(void)
946fb27c
PB
142{
143 int64_t icount;
4917cf44 144 CPUState *cpu = current_cpu;
946fb27c 145
c96778bb 146 icount = timers_state.qemu_icount;
4917cf44 147 if (cpu) {
99df7dce 148 if (!cpu_can_do_io(cpu)) {
2a62914b
PD
149 fprintf(stderr, "Bad icount read\n");
150 exit(1);
946fb27c 151 }
28ecfd7a 152 icount -= (cpu->icount_decr.u16.low + cpu->icount_extra);
946fb27c 153 }
2a62914b
PD
154 return icount;
155}
156
157/* Return the virtual CPU time, based on the instruction counter. */
158static int64_t cpu_get_icount_locked(void)
159{
160 int64_t icount = cpu_get_icount_raw();
3f031313 161 return timers_state.qemu_icount_bias + cpu_icount_to_ns(icount);
946fb27c
PB
162}
163
17a15f1b
PB
164int64_t cpu_get_icount(void)
165{
166 int64_t icount;
167 unsigned start;
168
169 do {
170 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
171 icount = cpu_get_icount_locked();
172 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
173
174 return icount;
175}
176
3f031313
FK
177int64_t cpu_icount_to_ns(int64_t icount)
178{
179 return icount << icount_time_shift;
180}
181
946fb27c 182/* return the host CPU cycle counter and handle stop/restart */
cb365646 183/* Caller must hold the BQL */
946fb27c
PB
184int64_t cpu_get_ticks(void)
185{
5f3e3101
PB
186 int64_t ticks;
187
946fb27c
PB
188 if (use_icount) {
189 return cpu_get_icount();
190 }
5f3e3101
PB
191
192 ticks = timers_state.cpu_ticks_offset;
193 if (timers_state.cpu_ticks_enabled) {
194 ticks += cpu_get_real_ticks();
195 }
196
197 if (timers_state.cpu_ticks_prev > ticks) {
198 /* Note: non increasing ticks may happen if the host uses
199 software suspend */
200 timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
201 ticks = timers_state.cpu_ticks_prev;
946fb27c 202 }
5f3e3101
PB
203
204 timers_state.cpu_ticks_prev = ticks;
205 return ticks;
946fb27c
PB
206}
207
cb365646 208static int64_t cpu_get_clock_locked(void)
946fb27c 209{
5f3e3101 210 int64_t ticks;
cb365646 211
5f3e3101
PB
212 ticks = timers_state.cpu_clock_offset;
213 if (timers_state.cpu_ticks_enabled) {
214 ticks += get_clock();
946fb27c 215 }
cb365646 216
5f3e3101 217 return ticks;
cb365646
LPF
218}
219
220/* return the host CPU monotonic timer and handle stop/restart */
221int64_t cpu_get_clock(void)
222{
223 int64_t ti;
224 unsigned start;
225
226 do {
227 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
228 ti = cpu_get_clock_locked();
229 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
230
231 return ti;
946fb27c
PB
232}
233
cb365646
LPF
234/* enable cpu_get_ticks()
235 * Caller must hold BQL which server as mutex for vm_clock_seqlock.
236 */
946fb27c
PB
237void cpu_enable_ticks(void)
238{
cb365646
LPF
239 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
240 seqlock_write_lock(&timers_state.vm_clock_seqlock);
946fb27c
PB
241 if (!timers_state.cpu_ticks_enabled) {
242 timers_state.cpu_ticks_offset -= cpu_get_real_ticks();
243 timers_state.cpu_clock_offset -= get_clock();
244 timers_state.cpu_ticks_enabled = 1;
245 }
cb365646 246 seqlock_write_unlock(&timers_state.vm_clock_seqlock);
946fb27c
PB
247}
248
249/* disable cpu_get_ticks() : the clock is stopped. You must not call
cb365646
LPF
250 * cpu_get_ticks() after that.
251 * Caller must hold BQL which server as mutex for vm_clock_seqlock.
252 */
946fb27c
PB
253void cpu_disable_ticks(void)
254{
cb365646
LPF
255 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
256 seqlock_write_lock(&timers_state.vm_clock_seqlock);
946fb27c 257 if (timers_state.cpu_ticks_enabled) {
5f3e3101 258 timers_state.cpu_ticks_offset += cpu_get_real_ticks();
cb365646 259 timers_state.cpu_clock_offset = cpu_get_clock_locked();
946fb27c
PB
260 timers_state.cpu_ticks_enabled = 0;
261 }
cb365646 262 seqlock_write_unlock(&timers_state.vm_clock_seqlock);
946fb27c
PB
263}
264
265/* Correlation between real and virtual time is always going to be
266 fairly approximate, so ignore small variation.
267 When the guest is idle real and virtual time will be aligned in
268 the IO wait loop. */
269#define ICOUNT_WOBBLE (get_ticks_per_sec() / 10)
270
271static void icount_adjust(void)
272{
273 int64_t cur_time;
274 int64_t cur_icount;
275 int64_t delta;
a3270e19
PB
276
277 /* Protected by TimersState mutex. */
946fb27c 278 static int64_t last_delta;
468cc7cf 279
946fb27c
PB
280 /* If the VM is not running, then do nothing. */
281 if (!runstate_is_running()) {
282 return;
283 }
468cc7cf 284
17a15f1b
PB
285 seqlock_write_lock(&timers_state.vm_clock_seqlock);
286 cur_time = cpu_get_clock_locked();
287 cur_icount = cpu_get_icount_locked();
468cc7cf 288
946fb27c
PB
289 delta = cur_icount - cur_time;
290 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
291 if (delta > 0
292 && last_delta + ICOUNT_WOBBLE < delta * 2
293 && icount_time_shift > 0) {
294 /* The guest is getting too far ahead. Slow time down. */
295 icount_time_shift--;
296 }
297 if (delta < 0
298 && last_delta - ICOUNT_WOBBLE > delta * 2
299 && icount_time_shift < MAX_ICOUNT_SHIFT) {
300 /* The guest is getting too far behind. Speed time up. */
301 icount_time_shift++;
302 }
303 last_delta = delta;
c96778bb
FK
304 timers_state.qemu_icount_bias = cur_icount
305 - (timers_state.qemu_icount << icount_time_shift);
17a15f1b 306 seqlock_write_unlock(&timers_state.vm_clock_seqlock);
946fb27c
PB
307}
308
309static void icount_adjust_rt(void *opaque)
310{
40daca54 311 timer_mod(icount_rt_timer,
1979b908 312 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
946fb27c
PB
313 icount_adjust();
314}
315
316static void icount_adjust_vm(void *opaque)
317{
40daca54
AB
318 timer_mod(icount_vm_timer,
319 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
320 get_ticks_per_sec() / 10);
946fb27c
PB
321 icount_adjust();
322}
323
324static int64_t qemu_icount_round(int64_t count)
325{
326 return (count + (1 << icount_time_shift) - 1) >> icount_time_shift;
327}
328
329static void icount_warp_rt(void *opaque)
330{
17a15f1b
PB
331 /* The icount_warp_timer is rescheduled soon after vm_clock_warp_start
332 * changes from -1 to another value, so the race here is okay.
333 */
334 if (atomic_read(&vm_clock_warp_start) == -1) {
946fb27c
PB
335 return;
336 }
337
17a15f1b 338 seqlock_write_lock(&timers_state.vm_clock_seqlock);
946fb27c 339 if (runstate_is_running()) {
bf2a7ddb 340 int64_t clock = cpu_get_clock_locked();
8ed961d9
PB
341 int64_t warp_delta;
342
343 warp_delta = clock - vm_clock_warp_start;
344 if (use_icount == 2) {
946fb27c 345 /*
40daca54 346 * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
946fb27c
PB
347 * far ahead of real time.
348 */
17a15f1b 349 int64_t cur_icount = cpu_get_icount_locked();
bf2a7ddb 350 int64_t delta = clock - cur_icount;
8ed961d9 351 warp_delta = MIN(warp_delta, delta);
946fb27c 352 }
c96778bb 353 timers_state.qemu_icount_bias += warp_delta;
946fb27c
PB
354 }
355 vm_clock_warp_start = -1;
17a15f1b 356 seqlock_write_unlock(&timers_state.vm_clock_seqlock);
8ed961d9
PB
357
358 if (qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) {
359 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
360 }
946fb27c
PB
361}
362
8156be56
PB
363void qtest_clock_warp(int64_t dest)
364{
40daca54 365 int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
efef88b3 366 AioContext *aio_context;
8156be56 367 assert(qtest_enabled());
efef88b3 368 aio_context = qemu_get_aio_context();
8156be56 369 while (clock < dest) {
40daca54 370 int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
c9299e2f 371 int64_t warp = qemu_soonest_timeout(dest - clock, deadline);
efef88b3 372
17a15f1b 373 seqlock_write_lock(&timers_state.vm_clock_seqlock);
c96778bb 374 timers_state.qemu_icount_bias += warp;
17a15f1b
PB
375 seqlock_write_unlock(&timers_state.vm_clock_seqlock);
376
40daca54 377 qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
efef88b3 378 timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]);
40daca54 379 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
8156be56 380 }
40daca54 381 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
8156be56
PB
382}
383
40daca54 384void qemu_clock_warp(QEMUClockType type)
946fb27c 385{
ce78d18c 386 int64_t clock;
946fb27c
PB
387 int64_t deadline;
388
389 /*
390 * There are too many global variables to make the "warp" behavior
391 * applicable to other clocks. But a clock argument removes the
392 * need for if statements all over the place.
393 */
40daca54 394 if (type != QEMU_CLOCK_VIRTUAL || !use_icount) {
946fb27c
PB
395 return;
396 }
397
5045e9d9
VC
398 if (icount_sleep) {
399 /*
400 * If the CPUs have been sleeping, advance QEMU_CLOCK_VIRTUAL timer now.
401 * This ensures that the deadline for the timer is computed correctly
402 * below.
403 * This also makes sure that the insn counter is synchronized before
404 * the CPU starts running, in case the CPU is woken by an event other
405 * than the earliest QEMU_CLOCK_VIRTUAL timer.
406 */
407 icount_warp_rt(NULL);
408 timer_del(icount_warp_timer);
409 }
ce78d18c 410 if (!all_cpu_threads_idle()) {
946fb27c
PB
411 return;
412 }
413
8156be56
PB
414 if (qtest_enabled()) {
415 /* When testing, qtest commands advance icount. */
416 return;
417 }
418
ac70aafc 419 /* We want to use the earliest deadline from ALL vm_clocks */
bf2a7ddb 420 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT);
40daca54 421 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
ce78d18c 422 if (deadline < 0) {
d7a0f71d
VC
423 static bool notified;
424 if (!icount_sleep && !notified) {
425 error_report("WARNING: icount sleep disabled and no active timers");
426 notified = true;
427 }
ce78d18c 428 return;
ac70aafc
AB
429 }
430
946fb27c
PB
431 if (deadline > 0) {
432 /*
40daca54 433 * Ensure QEMU_CLOCK_VIRTUAL proceeds even when the virtual CPU goes to
946fb27c
PB
434 * sleep. Otherwise, the CPU might be waiting for a future timer
435 * interrupt to wake it up, but the interrupt never comes because
436 * the vCPU isn't running any insns and thus doesn't advance the
40daca54 437 * QEMU_CLOCK_VIRTUAL.
946fb27c 438 */
5045e9d9
VC
439 if (!icount_sleep) {
440 /*
441 * We never let VCPUs sleep in no sleep icount mode.
442 * If there is a pending QEMU_CLOCK_VIRTUAL timer we just advance
443 * to the next QEMU_CLOCK_VIRTUAL event and notify it.
444 * It is useful when we want a deterministic execution time,
445 * isolated from host latencies.
446 */
447 seqlock_write_lock(&timers_state.vm_clock_seqlock);
448 timers_state.qemu_icount_bias += deadline;
449 seqlock_write_unlock(&timers_state.vm_clock_seqlock);
450 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
451 } else {
452 /*
453 * We do stop VCPUs and only advance QEMU_CLOCK_VIRTUAL after some
454 * "real" time, (related to the time left until the next event) has
455 * passed. The QEMU_CLOCK_VIRTUAL_RT clock will do this.
456 * This avoids that the warps are visible externally; for example,
457 * you will not be sending network packets continuously instead of
458 * every 100ms.
459 */
460 seqlock_write_lock(&timers_state.vm_clock_seqlock);
461 if (vm_clock_warp_start == -1 || vm_clock_warp_start > clock) {
462 vm_clock_warp_start = clock;
463 }
464 seqlock_write_unlock(&timers_state.vm_clock_seqlock);
465 timer_mod_anticipate(icount_warp_timer, clock + deadline);
ce78d18c 466 }
ac70aafc 467 } else if (deadline == 0) {
40daca54 468 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
946fb27c
PB
469 }
470}
471
d09eae37
FK
472static bool icount_state_needed(void *opaque)
473{
474 return use_icount;
475}
476
477/*
478 * This is a subsection for icount migration.
479 */
480static const VMStateDescription icount_vmstate_timers = {
481 .name = "timer/icount",
482 .version_id = 1,
483 .minimum_version_id = 1,
5cd8cada 484 .needed = icount_state_needed,
d09eae37
FK
485 .fields = (VMStateField[]) {
486 VMSTATE_INT64(qemu_icount_bias, TimersState),
487 VMSTATE_INT64(qemu_icount, TimersState),
488 VMSTATE_END_OF_LIST()
489 }
490};
491
946fb27c
PB
492static const VMStateDescription vmstate_timers = {
493 .name = "timer",
494 .version_id = 2,
495 .minimum_version_id = 1,
35d08458 496 .fields = (VMStateField[]) {
946fb27c
PB
497 VMSTATE_INT64(cpu_ticks_offset, TimersState),
498 VMSTATE_INT64(dummy, TimersState),
499 VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
500 VMSTATE_END_OF_LIST()
d09eae37 501 },
5cd8cada
JQ
502 .subsections = (const VMStateDescription*[]) {
503 &icount_vmstate_timers,
504 NULL
946fb27c
PB
505 }
506};
507
4603ea01
PD
508void cpu_ticks_init(void)
509{
510 seqlock_init(&timers_state.vm_clock_seqlock, NULL);
511 vmstate_register(NULL, 0, &vmstate_timers, &timers_state);
512}
513
1ad9580b 514void configure_icount(QemuOpts *opts, Error **errp)
946fb27c 515{
1ad9580b 516 const char *option;
a8bfac37 517 char *rem_str = NULL;
1ad9580b 518
1ad9580b 519 option = qemu_opt_get(opts, "shift");
946fb27c 520 if (!option) {
a8bfac37
ST
521 if (qemu_opt_get(opts, "align") != NULL) {
522 error_setg(errp, "Please specify shift option when using align");
523 }
946fb27c
PB
524 return;
525 }
f1f4b57e
VC
526
527 icount_sleep = qemu_opt_get_bool(opts, "sleep", true);
5045e9d9
VC
528 if (icount_sleep) {
529 icount_warp_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
530 icount_warp_rt, NULL);
531 }
f1f4b57e 532
a8bfac37 533 icount_align_option = qemu_opt_get_bool(opts, "align", false);
f1f4b57e
VC
534
535 if (icount_align_option && !icount_sleep) {
536 error_setg(errp, "align=on and sleep=no are incompatible");
537 }
946fb27c 538 if (strcmp(option, "auto") != 0) {
a8bfac37
ST
539 errno = 0;
540 icount_time_shift = strtol(option, &rem_str, 0);
541 if (errno != 0 || *rem_str != '\0' || !strlen(option)) {
542 error_setg(errp, "icount: Invalid shift value");
543 }
946fb27c
PB
544 use_icount = 1;
545 return;
a8bfac37
ST
546 } else if (icount_align_option) {
547 error_setg(errp, "shift=auto and align=on are incompatible");
f1f4b57e
VC
548 } else if (!icount_sleep) {
549 error_setg(errp, "shift=auto and sleep=no are incompatible");
946fb27c
PB
550 }
551
552 use_icount = 2;
553
554 /* 125MIPS seems a reasonable initial guess at the guest speed.
555 It will be corrected fairly quickly anyway. */
556 icount_time_shift = 3;
557
558 /* Have both realtime and virtual time triggers for speed adjustment.
559 The realtime trigger catches emulated time passing too slowly,
560 the virtual time trigger catches emulated time passing too fast.
561 Realtime triggers occur even when idle, so use them less frequently
562 than VM triggers. */
bf2a7ddb
PD
563 icount_rt_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL_RT,
564 icount_adjust_rt, NULL);
40daca54 565 timer_mod(icount_rt_timer,
bf2a7ddb 566 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
40daca54
AB
567 icount_vm_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
568 icount_adjust_vm, NULL);
569 timer_mod(icount_vm_timer,
570 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
571 get_ticks_per_sec() / 10);
946fb27c
PB
572}
573
296af7c9
BS
574/***********************************************************/
575void hw_error(const char *fmt, ...)
576{
577 va_list ap;
55e5c285 578 CPUState *cpu;
296af7c9
BS
579
580 va_start(ap, fmt);
581 fprintf(stderr, "qemu: hardware error: ");
582 vfprintf(stderr, fmt, ap);
583 fprintf(stderr, "\n");
bdc44640 584 CPU_FOREACH(cpu) {
55e5c285 585 fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
878096ee 586 cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU);
296af7c9
BS
587 }
588 va_end(ap);
589 abort();
590}
591
592void cpu_synchronize_all_states(void)
593{
182735ef 594 CPUState *cpu;
296af7c9 595
bdc44640 596 CPU_FOREACH(cpu) {
182735ef 597 cpu_synchronize_state(cpu);
296af7c9
BS
598 }
599}
600
601void cpu_synchronize_all_post_reset(void)
602{
182735ef 603 CPUState *cpu;
296af7c9 604
bdc44640 605 CPU_FOREACH(cpu) {
182735ef 606 cpu_synchronize_post_reset(cpu);
296af7c9
BS
607 }
608}
609
610void cpu_synchronize_all_post_init(void)
611{
182735ef 612 CPUState *cpu;
296af7c9 613
bdc44640 614 CPU_FOREACH(cpu) {
182735ef 615 cpu_synchronize_post_init(cpu);
296af7c9
BS
616 }
617}
618
de9d61e8
MT
619void cpu_clean_all_dirty(void)
620{
621 CPUState *cpu;
622
623 CPU_FOREACH(cpu) {
624 cpu_clean_state(cpu);
625 }
626}
627
56983463 628static int do_vm_stop(RunState state)
296af7c9 629{
56983463
KW
630 int ret = 0;
631
1354869c 632 if (runstate_is_running()) {
296af7c9 633 cpu_disable_ticks();
296af7c9 634 pause_all_vcpus();
f5bbfba1 635 runstate_set(state);
1dfb4dd9 636 vm_state_notify(0, state);
a4e15de9 637 qapi_event_send_stop(&error_abort);
296af7c9 638 }
56983463 639
594a45ce
KW
640 bdrv_drain_all();
641 ret = bdrv_flush_all();
642
56983463 643 return ret;
296af7c9
BS
644}
645
a1fcaa73 646static bool cpu_can_run(CPUState *cpu)
296af7c9 647{
4fdeee7c 648 if (cpu->stop) {
a1fcaa73 649 return false;
0ab07c62 650 }
321bc0b2 651 if (cpu_is_stopped(cpu)) {
a1fcaa73 652 return false;
0ab07c62 653 }
a1fcaa73 654 return true;
296af7c9
BS
655}
656
91325046 657static void cpu_handle_guest_debug(CPUState *cpu)
83f338f7 658{
64f6b346 659 gdb_set_stop_cpu(cpu);
8cf71710 660 qemu_system_debug_request();
f324e766 661 cpu->stopped = true;
3c638d06
JK
662}
663
714bd040
PB
664static void cpu_signal(int sig)
665{
4917cf44
AF
666 if (current_cpu) {
667 cpu_exit(current_cpu);
714bd040
PB
668 }
669 exit_request = 1;
670}
714bd040 671
6d9cb73c
JK
672#ifdef CONFIG_LINUX
673static void sigbus_reraise(void)
674{
675 sigset_t set;
676 struct sigaction action;
677
678 memset(&action, 0, sizeof(action));
679 action.sa_handler = SIG_DFL;
680 if (!sigaction(SIGBUS, &action, NULL)) {
681 raise(SIGBUS);
682 sigemptyset(&set);
683 sigaddset(&set, SIGBUS);
684 sigprocmask(SIG_UNBLOCK, &set, NULL);
685 }
686 perror("Failed to re-raise SIGBUS!\n");
687 abort();
688}
689
690static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo,
691 void *ctx)
692{
693 if (kvm_on_sigbus(siginfo->ssi_code,
694 (void *)(intptr_t)siginfo->ssi_addr)) {
695 sigbus_reraise();
696 }
697}
698
699static void qemu_init_sigbus(void)
700{
701 struct sigaction action;
702
703 memset(&action, 0, sizeof(action));
704 action.sa_flags = SA_SIGINFO;
705 action.sa_sigaction = (void (*)(int, siginfo_t*, void*))sigbus_handler;
706 sigaction(SIGBUS, &action, NULL);
707
708 prctl(PR_MCE_KILL, PR_MCE_KILL_SET, PR_MCE_KILL_EARLY, 0, 0);
709}
710
290adf38 711static void qemu_kvm_eat_signals(CPUState *cpu)
1ab3c6c0
JK
712{
713 struct timespec ts = { 0, 0 };
714 siginfo_t siginfo;
715 sigset_t waitset;
716 sigset_t chkset;
717 int r;
718
719 sigemptyset(&waitset);
720 sigaddset(&waitset, SIG_IPI);
721 sigaddset(&waitset, SIGBUS);
722
723 do {
724 r = sigtimedwait(&waitset, &siginfo, &ts);
725 if (r == -1 && !(errno == EAGAIN || errno == EINTR)) {
726 perror("sigtimedwait");
727 exit(1);
728 }
729
730 switch (r) {
731 case SIGBUS:
290adf38 732 if (kvm_on_sigbus_vcpu(cpu, siginfo.si_code, siginfo.si_addr)) {
1ab3c6c0
JK
733 sigbus_reraise();
734 }
735 break;
736 default:
737 break;
738 }
739
740 r = sigpending(&chkset);
741 if (r == -1) {
742 perror("sigpending");
743 exit(1);
744 }
745 } while (sigismember(&chkset, SIG_IPI) || sigismember(&chkset, SIGBUS));
1ab3c6c0
JK
746}
747
6d9cb73c
JK
748#else /* !CONFIG_LINUX */
749
750static void qemu_init_sigbus(void)
751{
752}
1ab3c6c0 753
290adf38 754static void qemu_kvm_eat_signals(CPUState *cpu)
1ab3c6c0
JK
755{
756}
6d9cb73c
JK
757#endif /* !CONFIG_LINUX */
758
296af7c9 759#ifndef _WIN32
55f8d6ac
JK
760static void dummy_signal(int sig)
761{
762}
55f8d6ac 763
13618e05 764static void qemu_kvm_init_cpu_signals(CPUState *cpu)
714bd040
PB
765{
766 int r;
767 sigset_t set;
768 struct sigaction sigact;
769
770 memset(&sigact, 0, sizeof(sigact));
771 sigact.sa_handler = dummy_signal;
772 sigaction(SIG_IPI, &sigact, NULL);
773
714bd040
PB
774 pthread_sigmask(SIG_BLOCK, NULL, &set);
775 sigdelset(&set, SIG_IPI);
714bd040 776 sigdelset(&set, SIGBUS);
491d6e80 777 r = kvm_set_signal_mask(cpu, &set);
714bd040
PB
778 if (r) {
779 fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
780 exit(1);
781 }
782}
783
784static void qemu_tcg_init_cpu_signals(void)
785{
714bd040
PB
786 sigset_t set;
787 struct sigaction sigact;
788
789 memset(&sigact, 0, sizeof(sigact));
790 sigact.sa_handler = cpu_signal;
791 sigaction(SIG_IPI, &sigact, NULL);
792
793 sigemptyset(&set);
794 sigaddset(&set, SIG_IPI);
795 pthread_sigmask(SIG_UNBLOCK, &set, NULL);
714bd040
PB
796}
797
55f8d6ac 798#else /* _WIN32 */
13618e05 799static void qemu_kvm_init_cpu_signals(CPUState *cpu)
ff48eb5f 800{
714bd040
PB
801 abort();
802}
ff48eb5f 803
714bd040
PB
804static void qemu_tcg_init_cpu_signals(void)
805{
ff48eb5f 806}
714bd040 807#endif /* _WIN32 */
ff48eb5f 808
b2532d88 809static QemuMutex qemu_global_mutex;
46daff13 810static QemuCond qemu_io_proceeded_cond;
6b49809c 811static unsigned iothread_requesting_mutex;
296af7c9
BS
812
813static QemuThread io_thread;
814
815static QemuThread *tcg_cpu_thread;
816static QemuCond *tcg_halt_cond;
817
296af7c9
BS
818/* cpu creation */
819static QemuCond qemu_cpu_cond;
820/* system init */
296af7c9 821static QemuCond qemu_pause_cond;
e82bcec2 822static QemuCond qemu_work_cond;
296af7c9 823
d3b12f5d 824void qemu_init_cpu_loop(void)
296af7c9 825{
6d9cb73c 826 qemu_init_sigbus();
ed94592b 827 qemu_cond_init(&qemu_cpu_cond);
ed94592b
AL
828 qemu_cond_init(&qemu_pause_cond);
829 qemu_cond_init(&qemu_work_cond);
46daff13 830 qemu_cond_init(&qemu_io_proceeded_cond);
296af7c9 831 qemu_mutex_init(&qemu_global_mutex);
296af7c9 832
b7680cb6 833 qemu_thread_get_self(&io_thread);
296af7c9
BS
834}
835
f100f0b3 836void run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data)
e82bcec2
MT
837{
838 struct qemu_work_item wi;
839
60e82579 840 if (qemu_cpu_is_self(cpu)) {
e82bcec2
MT
841 func(data);
842 return;
843 }
844
845 wi.func = func;
846 wi.data = data;
3c02270d 847 wi.free = false;
c64ca814
AF
848 if (cpu->queued_work_first == NULL) {
849 cpu->queued_work_first = &wi;
0ab07c62 850 } else {
c64ca814 851 cpu->queued_work_last->next = &wi;
0ab07c62 852 }
c64ca814 853 cpu->queued_work_last = &wi;
e82bcec2
MT
854 wi.next = NULL;
855 wi.done = false;
856
c08d7424 857 qemu_cpu_kick(cpu);
e82bcec2 858 while (!wi.done) {
4917cf44 859 CPUState *self_cpu = current_cpu;
e82bcec2
MT
860
861 qemu_cond_wait(&qemu_work_cond, &qemu_global_mutex);
4917cf44 862 current_cpu = self_cpu;
e82bcec2
MT
863 }
864}
865
3c02270d
CV
866void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data)
867{
868 struct qemu_work_item *wi;
869
870 if (qemu_cpu_is_self(cpu)) {
871 func(data);
872 return;
873 }
874
875 wi = g_malloc0(sizeof(struct qemu_work_item));
876 wi->func = func;
877 wi->data = data;
878 wi->free = true;
879 if (cpu->queued_work_first == NULL) {
880 cpu->queued_work_first = wi;
881 } else {
882 cpu->queued_work_last->next = wi;
883 }
884 cpu->queued_work_last = wi;
885 wi->next = NULL;
886 wi->done = false;
887
888 qemu_cpu_kick(cpu);
889}
890
6d45b109 891static void flush_queued_work(CPUState *cpu)
e82bcec2
MT
892{
893 struct qemu_work_item *wi;
894
c64ca814 895 if (cpu->queued_work_first == NULL) {
e82bcec2 896 return;
0ab07c62 897 }
e82bcec2 898
c64ca814
AF
899 while ((wi = cpu->queued_work_first)) {
900 cpu->queued_work_first = wi->next;
e82bcec2
MT
901 wi->func(wi->data);
902 wi->done = true;
3c02270d
CV
903 if (wi->free) {
904 g_free(wi);
905 }
e82bcec2 906 }
c64ca814 907 cpu->queued_work_last = NULL;
e82bcec2
MT
908 qemu_cond_broadcast(&qemu_work_cond);
909}
910
509a0d78 911static void qemu_wait_io_event_common(CPUState *cpu)
296af7c9 912{
4fdeee7c
AF
913 if (cpu->stop) {
914 cpu->stop = false;
f324e766 915 cpu->stopped = true;
296af7c9
BS
916 qemu_cond_signal(&qemu_pause_cond);
917 }
6d45b109 918 flush_queued_work(cpu);
216fc9a4 919 cpu->thread_kicked = false;
296af7c9
BS
920}
921
6cabe1f3 922static void qemu_tcg_wait_io_event(void)
296af7c9 923{
182735ef 924 CPUState *cpu;
6cabe1f3 925
16400322 926 while (all_cpu_threads_idle()) {
ab33fcda
PB
927 /* Start accounting real time to the virtual clock if the CPUs
928 are idle. */
40daca54 929 qemu_clock_warp(QEMU_CLOCK_VIRTUAL);
9705fbb5 930 qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex);
16400322 931 }
296af7c9 932
46daff13
PB
933 while (iothread_requesting_mutex) {
934 qemu_cond_wait(&qemu_io_proceeded_cond, &qemu_global_mutex);
935 }
6cabe1f3 936
bdc44640 937 CPU_FOREACH(cpu) {
182735ef 938 qemu_wait_io_event_common(cpu);
6cabe1f3 939 }
296af7c9
BS
940}
941
fd529e8f 942static void qemu_kvm_wait_io_event(CPUState *cpu)
296af7c9 943{
a98ae1d8 944 while (cpu_thread_is_idle(cpu)) {
f5c121b8 945 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
16400322 946 }
296af7c9 947
290adf38 948 qemu_kvm_eat_signals(cpu);
509a0d78 949 qemu_wait_io_event_common(cpu);
296af7c9
BS
950}
951
7e97cd88 952static void *qemu_kvm_cpu_thread_fn(void *arg)
296af7c9 953{
48a106bd 954 CPUState *cpu = arg;
84b4915d 955 int r;
296af7c9 956
ab28bd23
PB
957 rcu_register_thread();
958
2e7f7a3c 959 qemu_mutex_lock_iothread();
814e612e 960 qemu_thread_get_self(cpu->thread);
9f09e18a 961 cpu->thread_id = qemu_get_thread_id();
626cf8f4 962 cpu->can_do_io = 1;
4917cf44 963 current_cpu = cpu;
296af7c9 964
504134d2 965 r = kvm_init_vcpu(cpu);
84b4915d
JK
966 if (r < 0) {
967 fprintf(stderr, "kvm_init_vcpu failed: %s\n", strerror(-r));
968 exit(1);
969 }
296af7c9 970
13618e05 971 qemu_kvm_init_cpu_signals(cpu);
296af7c9
BS
972
973 /* signal CPU creation */
61a46217 974 cpu->created = true;
296af7c9
BS
975 qemu_cond_signal(&qemu_cpu_cond);
976
296af7c9 977 while (1) {
a1fcaa73 978 if (cpu_can_run(cpu)) {
1458c363 979 r = kvm_cpu_exec(cpu);
83f338f7 980 if (r == EXCP_DEBUG) {
91325046 981 cpu_handle_guest_debug(cpu);
83f338f7 982 }
0ab07c62 983 }
fd529e8f 984 qemu_kvm_wait_io_event(cpu);
296af7c9
BS
985 }
986
987 return NULL;
988}
989
c7f0f3b1
AL
990static void *qemu_dummy_cpu_thread_fn(void *arg)
991{
992#ifdef _WIN32
993 fprintf(stderr, "qtest is not supported under Windows\n");
994 exit(1);
995#else
10a9021d 996 CPUState *cpu = arg;
c7f0f3b1
AL
997 sigset_t waitset;
998 int r;
999
ab28bd23
PB
1000 rcu_register_thread();
1001
c7f0f3b1 1002 qemu_mutex_lock_iothread();
814e612e 1003 qemu_thread_get_self(cpu->thread);
9f09e18a 1004 cpu->thread_id = qemu_get_thread_id();
626cf8f4 1005 cpu->can_do_io = 1;
c7f0f3b1
AL
1006
1007 sigemptyset(&waitset);
1008 sigaddset(&waitset, SIG_IPI);
1009
1010 /* signal CPU creation */
61a46217 1011 cpu->created = true;
c7f0f3b1
AL
1012 qemu_cond_signal(&qemu_cpu_cond);
1013
4917cf44 1014 current_cpu = cpu;
c7f0f3b1 1015 while (1) {
4917cf44 1016 current_cpu = NULL;
c7f0f3b1
AL
1017 qemu_mutex_unlock_iothread();
1018 do {
1019 int sig;
1020 r = sigwait(&waitset, &sig);
1021 } while (r == -1 && (errno == EAGAIN || errno == EINTR));
1022 if (r == -1) {
1023 perror("sigwait");
1024 exit(1);
1025 }
1026 qemu_mutex_lock_iothread();
4917cf44 1027 current_cpu = cpu;
509a0d78 1028 qemu_wait_io_event_common(cpu);
c7f0f3b1
AL
1029 }
1030
1031 return NULL;
1032#endif
1033}
1034
bdb7ca67
JK
1035static void tcg_exec_all(void);
1036
7e97cd88 1037static void *qemu_tcg_cpu_thread_fn(void *arg)
296af7c9 1038{
c3586ba7 1039 CPUState *cpu = arg;
296af7c9 1040
ab28bd23
PB
1041 rcu_register_thread();
1042
2e7f7a3c 1043 qemu_mutex_lock_iothread();
55f8d6ac 1044 qemu_tcg_init_cpu_signals();
814e612e 1045 qemu_thread_get_self(cpu->thread);
296af7c9 1046
38fcbd3f
AF
1047 CPU_FOREACH(cpu) {
1048 cpu->thread_id = qemu_get_thread_id();
1049 cpu->created = true;
626cf8f4 1050 cpu->can_do_io = 1;
38fcbd3f 1051 }
296af7c9
BS
1052 qemu_cond_signal(&qemu_cpu_cond);
1053
fa7d1867 1054 /* wait for initial kick-off after machine start */
c28e399c 1055 while (first_cpu->stopped) {
fa7d1867 1056 qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex);
8e564b4e
JK
1057
1058 /* process any pending work */
bdc44640 1059 CPU_FOREACH(cpu) {
182735ef 1060 qemu_wait_io_event_common(cpu);
8e564b4e 1061 }
0ab07c62 1062 }
296af7c9 1063
21618b3e
PB
1064 /* process any pending work */
1065 exit_request = 1;
1066
296af7c9 1067 while (1) {
bdb7ca67 1068 tcg_exec_all();
ac70aafc
AB
1069
1070 if (use_icount) {
40daca54 1071 int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
ac70aafc
AB
1072
1073 if (deadline == 0) {
40daca54 1074 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
ac70aafc 1075 }
3b2319a3 1076 }
6cabe1f3 1077 qemu_tcg_wait_io_event();
296af7c9
BS
1078 }
1079
1080 return NULL;
1081}
1082
2ff09a40 1083static void qemu_cpu_kick_thread(CPUState *cpu)
cc015e9a
PB
1084{
1085#ifndef _WIN32
1086 int err;
1087
814e612e 1088 err = pthread_kill(cpu->thread->thread, SIG_IPI);
cc015e9a
PB
1089 if (err) {
1090 fprintf(stderr, "qemu:%s: %s", __func__, strerror(err));
1091 exit(1);
1092 }
1093#else /* _WIN32 */
60e82579 1094 if (!qemu_cpu_is_self(cpu)) {
ed9164a3
OH
1095 CONTEXT tcgContext;
1096
1097 if (SuspendThread(cpu->hThread) == (DWORD)-1) {
7f1721df 1098 fprintf(stderr, "qemu:%s: GetLastError:%lu\n", __func__,
ed9164a3
OH
1099 GetLastError());
1100 exit(1);
1101 }
1102
1103 /* On multi-core systems, we are not sure that the thread is actually
1104 * suspended until we can get the context.
1105 */
1106 tcgContext.ContextFlags = CONTEXT_CONTROL;
1107 while (GetThreadContext(cpu->hThread, &tcgContext) != 0) {
1108 continue;
1109 }
1110
cc015e9a 1111 cpu_signal(0);
ed9164a3
OH
1112
1113 if (ResumeThread(cpu->hThread) == (DWORD)-1) {
7f1721df 1114 fprintf(stderr, "qemu:%s: GetLastError:%lu\n", __func__,
ed9164a3
OH
1115 GetLastError());
1116 exit(1);
1117 }
cc015e9a
PB
1118 }
1119#endif
1120}
1121
c08d7424 1122void qemu_cpu_kick(CPUState *cpu)
296af7c9 1123{
f5c121b8 1124 qemu_cond_broadcast(cpu->halt_cond);
216fc9a4 1125 if (!tcg_enabled() && !cpu->thread_kicked) {
2ff09a40 1126 qemu_cpu_kick_thread(cpu);
216fc9a4 1127 cpu->thread_kicked = true;
aa2c364b 1128 }
296af7c9
BS
1129}
1130
46d62fac 1131void qemu_cpu_kick_self(void)
296af7c9 1132{
b55c22c6 1133#ifndef _WIN32
4917cf44 1134 assert(current_cpu);
296af7c9 1135
4917cf44
AF
1136 if (!current_cpu->thread_kicked) {
1137 qemu_cpu_kick_thread(current_cpu);
1138 current_cpu->thread_kicked = true;
296af7c9 1139 }
b55c22c6
PB
1140#else
1141 abort();
1142#endif
296af7c9
BS
1143}
1144
60e82579 1145bool qemu_cpu_is_self(CPUState *cpu)
296af7c9 1146{
814e612e 1147 return qemu_thread_is_self(cpu->thread);
296af7c9
BS
1148}
1149
79e2b9ae 1150bool qemu_in_vcpu_thread(void)
aa723c23 1151{
4917cf44 1152 return current_cpu && qemu_cpu_is_self(current_cpu);
aa723c23
JQ
1153}
1154
afbe7053
PB
1155static __thread bool iothread_locked = false;
1156
1157bool qemu_mutex_iothread_locked(void)
1158{
1159 return iothread_locked;
1160}
1161
296af7c9
BS
1162void qemu_mutex_lock_iothread(void)
1163{
21618b3e 1164 atomic_inc(&iothread_requesting_mutex);
2e7f7a3c
PB
1165 /* In the simple case there is no need to bump the VCPU thread out of
1166 * TCG code execution.
1167 */
1168 if (!tcg_enabled() || qemu_in_vcpu_thread() ||
1169 !first_cpu || !first_cpu->thread) {
296af7c9 1170 qemu_mutex_lock(&qemu_global_mutex);
21618b3e 1171 atomic_dec(&iothread_requesting_mutex);
1a28cac3 1172 } else {
1a28cac3 1173 if (qemu_mutex_trylock(&qemu_global_mutex)) {
182735ef 1174 qemu_cpu_kick_thread(first_cpu);
1a28cac3
MT
1175 qemu_mutex_lock(&qemu_global_mutex);
1176 }
6b49809c 1177 atomic_dec(&iothread_requesting_mutex);
46daff13 1178 qemu_cond_broadcast(&qemu_io_proceeded_cond);
1a28cac3 1179 }
afbe7053 1180 iothread_locked = true;
296af7c9
BS
1181}
1182
1183void qemu_mutex_unlock_iothread(void)
1184{
afbe7053 1185 iothread_locked = false;
296af7c9
BS
1186 qemu_mutex_unlock(&qemu_global_mutex);
1187}
1188
1189static int all_vcpus_paused(void)
1190{
bdc44640 1191 CPUState *cpu;
296af7c9 1192
bdc44640 1193 CPU_FOREACH(cpu) {
182735ef 1194 if (!cpu->stopped) {
296af7c9 1195 return 0;
0ab07c62 1196 }
296af7c9
BS
1197 }
1198
1199 return 1;
1200}
1201
1202void pause_all_vcpus(void)
1203{
bdc44640 1204 CPUState *cpu;
296af7c9 1205
40daca54 1206 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, false);
bdc44640 1207 CPU_FOREACH(cpu) {
182735ef
AF
1208 cpu->stop = true;
1209 qemu_cpu_kick(cpu);
296af7c9
BS
1210 }
1211
aa723c23 1212 if (qemu_in_vcpu_thread()) {
d798e974
JK
1213 cpu_stop_current();
1214 if (!kvm_enabled()) {
bdc44640 1215 CPU_FOREACH(cpu) {
182735ef
AF
1216 cpu->stop = false;
1217 cpu->stopped = true;
d798e974
JK
1218 }
1219 return;
1220 }
1221 }
1222
296af7c9 1223 while (!all_vcpus_paused()) {
be7d6c57 1224 qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex);
bdc44640 1225 CPU_FOREACH(cpu) {
182735ef 1226 qemu_cpu_kick(cpu);
296af7c9
BS
1227 }
1228 }
1229}
1230
2993683b
IM
1231void cpu_resume(CPUState *cpu)
1232{
1233 cpu->stop = false;
1234 cpu->stopped = false;
1235 qemu_cpu_kick(cpu);
1236}
1237
296af7c9
BS
1238void resume_all_vcpus(void)
1239{
bdc44640 1240 CPUState *cpu;
296af7c9 1241
40daca54 1242 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true);
bdc44640 1243 CPU_FOREACH(cpu) {
182735ef 1244 cpu_resume(cpu);
296af7c9
BS
1245 }
1246}
1247
4900116e
DDAG
1248/* For temporary buffers for forming a name */
1249#define VCPU_THREAD_NAME_SIZE 16
1250
e5ab30a2 1251static void qemu_tcg_init_vcpu(CPUState *cpu)
296af7c9 1252{
4900116e
DDAG
1253 char thread_name[VCPU_THREAD_NAME_SIZE];
1254
09daed84
EI
1255 tcg_cpu_address_space_init(cpu, cpu->as);
1256
296af7c9
BS
1257 /* share a single thread for all cpus with TCG */
1258 if (!tcg_cpu_thread) {
814e612e 1259 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1260 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1261 qemu_cond_init(cpu->halt_cond);
1262 tcg_halt_cond = cpu->halt_cond;
4900116e
DDAG
1263 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
1264 cpu->cpu_index);
1265 qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
1266 cpu, QEMU_THREAD_JOINABLE);
1ecf47bf 1267#ifdef _WIN32
814e612e 1268 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1ecf47bf 1269#endif
61a46217 1270 while (!cpu->created) {
18a85728 1271 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
0ab07c62 1272 }
814e612e 1273 tcg_cpu_thread = cpu->thread;
296af7c9 1274 } else {
814e612e 1275 cpu->thread = tcg_cpu_thread;
f5c121b8 1276 cpu->halt_cond = tcg_halt_cond;
296af7c9
BS
1277 }
1278}
1279
48a106bd 1280static void qemu_kvm_start_vcpu(CPUState *cpu)
296af7c9 1281{
4900116e
DDAG
1282 char thread_name[VCPU_THREAD_NAME_SIZE];
1283
814e612e 1284 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1285 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1286 qemu_cond_init(cpu->halt_cond);
4900116e
DDAG
1287 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
1288 cpu->cpu_index);
1289 qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn,
1290 cpu, QEMU_THREAD_JOINABLE);
61a46217 1291 while (!cpu->created) {
18a85728 1292 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
0ab07c62 1293 }
296af7c9
BS
1294}
1295
10a9021d 1296static void qemu_dummy_start_vcpu(CPUState *cpu)
c7f0f3b1 1297{
4900116e
DDAG
1298 char thread_name[VCPU_THREAD_NAME_SIZE];
1299
814e612e 1300 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1301 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1302 qemu_cond_init(cpu->halt_cond);
4900116e
DDAG
1303 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
1304 cpu->cpu_index);
1305 qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, cpu,
c7f0f3b1 1306 QEMU_THREAD_JOINABLE);
61a46217 1307 while (!cpu->created) {
c7f0f3b1
AL
1308 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1309 }
1310}
1311
c643bed9 1312void qemu_init_vcpu(CPUState *cpu)
296af7c9 1313{
ce3960eb
AF
1314 cpu->nr_cores = smp_cores;
1315 cpu->nr_threads = smp_threads;
f324e766 1316 cpu->stopped = true;
0ab07c62 1317 if (kvm_enabled()) {
48a106bd 1318 qemu_kvm_start_vcpu(cpu);
c7f0f3b1 1319 } else if (tcg_enabled()) {
e5ab30a2 1320 qemu_tcg_init_vcpu(cpu);
c7f0f3b1 1321 } else {
10a9021d 1322 qemu_dummy_start_vcpu(cpu);
0ab07c62 1323 }
296af7c9
BS
1324}
1325
b4a3d965 1326void cpu_stop_current(void)
296af7c9 1327{
4917cf44
AF
1328 if (current_cpu) {
1329 current_cpu->stop = false;
1330 current_cpu->stopped = true;
1331 cpu_exit(current_cpu);
67bb172f 1332 qemu_cond_signal(&qemu_pause_cond);
b4a3d965 1333 }
296af7c9
BS
1334}
1335
56983463 1336int vm_stop(RunState state)
296af7c9 1337{
aa723c23 1338 if (qemu_in_vcpu_thread()) {
74892d24 1339 qemu_system_vmstop_request_prepare();
1dfb4dd9 1340 qemu_system_vmstop_request(state);
296af7c9
BS
1341 /*
1342 * FIXME: should not return to device code in case
1343 * vm_stop() has been requested.
1344 */
b4a3d965 1345 cpu_stop_current();
56983463 1346 return 0;
296af7c9 1347 }
56983463
KW
1348
1349 return do_vm_stop(state);
296af7c9
BS
1350}
1351
8a9236f1
LC
1352/* does a state transition even if the VM is already stopped,
1353 current state is forgotten forever */
56983463 1354int vm_stop_force_state(RunState state)
8a9236f1
LC
1355{
1356 if (runstate_is_running()) {
56983463 1357 return vm_stop(state);
8a9236f1
LC
1358 } else {
1359 runstate_set(state);
594a45ce
KW
1360 /* Make sure to return an error if the flush in a previous vm_stop()
1361 * failed. */
1362 return bdrv_flush_all();
8a9236f1
LC
1363 }
1364}
1365
3d57f789 1366static int tcg_cpu_exec(CPUState *cpu)
296af7c9
BS
1367{
1368 int ret;
1369#ifdef CONFIG_PROFILER
1370 int64_t ti;
1371#endif
1372
1373#ifdef CONFIG_PROFILER
1374 ti = profile_getclock();
1375#endif
1376 if (use_icount) {
1377 int64_t count;
ac70aafc 1378 int64_t deadline;
296af7c9 1379 int decr;
c96778bb
FK
1380 timers_state.qemu_icount -= (cpu->icount_decr.u16.low
1381 + cpu->icount_extra);
28ecfd7a 1382 cpu->icount_decr.u16.low = 0;
efee7340 1383 cpu->icount_extra = 0;
40daca54 1384 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
ac70aafc
AB
1385
1386 /* Maintain prior (possibly buggy) behaviour where if no deadline
40daca54 1387 * was set (as there is no QEMU_CLOCK_VIRTUAL timer) or it is more than
ac70aafc
AB
1388 * INT32_MAX nanoseconds ahead, we still use INT32_MAX
1389 * nanoseconds.
1390 */
1391 if ((deadline < 0) || (deadline > INT32_MAX)) {
1392 deadline = INT32_MAX;
1393 }
1394
1395 count = qemu_icount_round(deadline);
c96778bb 1396 timers_state.qemu_icount += count;
296af7c9
BS
1397 decr = (count > 0xffff) ? 0xffff : count;
1398 count -= decr;
28ecfd7a 1399 cpu->icount_decr.u16.low = decr;
efee7340 1400 cpu->icount_extra = count;
296af7c9 1401 }
ea3e9847 1402 ret = cpu_exec(cpu);
296af7c9 1403#ifdef CONFIG_PROFILER
89d5cbdd 1404 tcg_time += profile_getclock() - ti;
296af7c9
BS
1405#endif
1406 if (use_icount) {
1407 /* Fold pending instructions back into the
1408 instruction counter, and clear the interrupt flag. */
c96778bb
FK
1409 timers_state.qemu_icount -= (cpu->icount_decr.u16.low
1410 + cpu->icount_extra);
28ecfd7a 1411 cpu->icount_decr.u32 = 0;
efee7340 1412 cpu->icount_extra = 0;
296af7c9
BS
1413 }
1414 return ret;
1415}
1416
bdb7ca67 1417static void tcg_exec_all(void)
296af7c9 1418{
9a36085b
JK
1419 int r;
1420
40daca54
AB
1421 /* Account partial waits to QEMU_CLOCK_VIRTUAL. */
1422 qemu_clock_warp(QEMU_CLOCK_VIRTUAL);
ab33fcda 1423
0ab07c62 1424 if (next_cpu == NULL) {
296af7c9 1425 next_cpu = first_cpu;
0ab07c62 1426 }
bdc44640 1427 for (; next_cpu != NULL && !exit_request; next_cpu = CPU_NEXT(next_cpu)) {
182735ef 1428 CPUState *cpu = next_cpu;
296af7c9 1429
40daca54 1430 qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
ed2803da 1431 (cpu->singlestep_enabled & SSTEP_NOTIMER) == 0);
296af7c9 1432
a1fcaa73 1433 if (cpu_can_run(cpu)) {
3d57f789 1434 r = tcg_cpu_exec(cpu);
9a36085b 1435 if (r == EXCP_DEBUG) {
91325046 1436 cpu_handle_guest_debug(cpu);
3c638d06
JK
1437 break;
1438 }
f324e766 1439 } else if (cpu->stop || cpu->stopped) {
296af7c9
BS
1440 break;
1441 }
1442 }
c629a4bc 1443 exit_request = 0;
296af7c9
BS
1444}
1445
9a78eead 1446void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg)
262353cb
BS
1447{
1448 /* XXX: implement xxx_cpu_list for targets that still miss it */
e916cbf8
PM
1449#if defined(cpu_list)
1450 cpu_list(f, cpu_fprintf);
262353cb
BS
1451#endif
1452}
de0b36b6
LC
1453
1454CpuInfoList *qmp_query_cpus(Error **errp)
1455{
1456 CpuInfoList *head = NULL, *cur_item = NULL;
182735ef 1457 CPUState *cpu;
de0b36b6 1458
bdc44640 1459 CPU_FOREACH(cpu) {
de0b36b6 1460 CpuInfoList *info;
182735ef
AF
1461#if defined(TARGET_I386)
1462 X86CPU *x86_cpu = X86_CPU(cpu);
1463 CPUX86State *env = &x86_cpu->env;
1464#elif defined(TARGET_PPC)
1465 PowerPCCPU *ppc_cpu = POWERPC_CPU(cpu);
1466 CPUPPCState *env = &ppc_cpu->env;
1467#elif defined(TARGET_SPARC)
1468 SPARCCPU *sparc_cpu = SPARC_CPU(cpu);
1469 CPUSPARCState *env = &sparc_cpu->env;
1470#elif defined(TARGET_MIPS)
1471 MIPSCPU *mips_cpu = MIPS_CPU(cpu);
1472 CPUMIPSState *env = &mips_cpu->env;
48e06fe0
BK
1473#elif defined(TARGET_TRICORE)
1474 TriCoreCPU *tricore_cpu = TRICORE_CPU(cpu);
1475 CPUTriCoreState *env = &tricore_cpu->env;
182735ef 1476#endif
de0b36b6 1477
cb446eca 1478 cpu_synchronize_state(cpu);
de0b36b6
LC
1479
1480 info = g_malloc0(sizeof(*info));
1481 info->value = g_malloc0(sizeof(*info->value));
55e5c285 1482 info->value->CPU = cpu->cpu_index;
182735ef 1483 info->value->current = (cpu == first_cpu);
259186a7 1484 info->value->halted = cpu->halted;
58f88d4b 1485 info->value->qom_path = object_get_canonical_path(OBJECT(cpu));
9f09e18a 1486 info->value->thread_id = cpu->thread_id;
de0b36b6
LC
1487#if defined(TARGET_I386)
1488 info->value->has_pc = true;
1489 info->value->pc = env->eip + env->segs[R_CS].base;
1490#elif defined(TARGET_PPC)
1491 info->value->has_nip = true;
1492 info->value->nip = env->nip;
1493#elif defined(TARGET_SPARC)
1494 info->value->has_pc = true;
1495 info->value->pc = env->pc;
1496 info->value->has_npc = true;
1497 info->value->npc = env->npc;
1498#elif defined(TARGET_MIPS)
1499 info->value->has_PC = true;
1500 info->value->PC = env->active_tc.PC;
48e06fe0
BK
1501#elif defined(TARGET_TRICORE)
1502 info->value->has_PC = true;
1503 info->value->PC = env->PC;
de0b36b6
LC
1504#endif
1505
1506 /* XXX: waiting for the qapi to support GSList */
1507 if (!cur_item) {
1508 head = cur_item = info;
1509 } else {
1510 cur_item->next = info;
1511 cur_item = info;
1512 }
1513 }
1514
1515 return head;
1516}
0cfd6a9a
LC
1517
1518void qmp_memsave(int64_t addr, int64_t size, const char *filename,
1519 bool has_cpu, int64_t cpu_index, Error **errp)
1520{
1521 FILE *f;
1522 uint32_t l;
55e5c285 1523 CPUState *cpu;
0cfd6a9a 1524 uint8_t buf[1024];
0dc9daf0 1525 int64_t orig_addr = addr, orig_size = size;
0cfd6a9a
LC
1526
1527 if (!has_cpu) {
1528 cpu_index = 0;
1529 }
1530
151d1322
AF
1531 cpu = qemu_get_cpu(cpu_index);
1532 if (cpu == NULL) {
c6bd8c70
MA
1533 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
1534 "a CPU number");
0cfd6a9a
LC
1535 return;
1536 }
1537
1538 f = fopen(filename, "wb");
1539 if (!f) {
618da851 1540 error_setg_file_open(errp, errno, filename);
0cfd6a9a
LC
1541 return;
1542 }
1543
1544 while (size != 0) {
1545 l = sizeof(buf);
1546 if (l > size)
1547 l = size;
2f4d0f59 1548 if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
0dc9daf0
BP
1549 error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRId64
1550 " specified", orig_addr, orig_size);
2f4d0f59
AK
1551 goto exit;
1552 }
0cfd6a9a 1553 if (fwrite(buf, 1, l, f) != l) {
c6bd8c70 1554 error_setg(errp, QERR_IO_ERROR);
0cfd6a9a
LC
1555 goto exit;
1556 }
1557 addr += l;
1558 size -= l;
1559 }
1560
1561exit:
1562 fclose(f);
1563}
6d3962bf
LC
1564
1565void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
1566 Error **errp)
1567{
1568 FILE *f;
1569 uint32_t l;
1570 uint8_t buf[1024];
1571
1572 f = fopen(filename, "wb");
1573 if (!f) {
618da851 1574 error_setg_file_open(errp, errno, filename);
6d3962bf
LC
1575 return;
1576 }
1577
1578 while (size != 0) {
1579 l = sizeof(buf);
1580 if (l > size)
1581 l = size;
eb6282f2 1582 cpu_physical_memory_read(addr, buf, l);
6d3962bf 1583 if (fwrite(buf, 1, l, f) != l) {
c6bd8c70 1584 error_setg(errp, QERR_IO_ERROR);
6d3962bf
LC
1585 goto exit;
1586 }
1587 addr += l;
1588 size -= l;
1589 }
1590
1591exit:
1592 fclose(f);
1593}
ab49ab5c
LC
1594
1595void qmp_inject_nmi(Error **errp)
1596{
1597#if defined(TARGET_I386)
182735ef
AF
1598 CPUState *cs;
1599
bdc44640 1600 CPU_FOREACH(cs) {
182735ef 1601 X86CPU *cpu = X86_CPU(cs);
ab49ab5c 1602
02e51483 1603 if (!cpu->apic_state) {
182735ef 1604 cpu_interrupt(cs, CPU_INTERRUPT_NMI);
02c09195 1605 } else {
02e51483 1606 apic_deliver_nmi(cpu->apic_state);
02c09195 1607 }
ab49ab5c
LC
1608 }
1609#else
9cb805fd 1610 nmi_monitor_handle(monitor_get_cpu_index(), errp);
ab49ab5c
LC
1611#endif
1612}
27498bef
ST
1613
1614void dump_drift_info(FILE *f, fprintf_function cpu_fprintf)
1615{
1616 if (!use_icount) {
1617 return;
1618 }
1619
1620 cpu_fprintf(f, "Host - Guest clock %"PRIi64" ms\n",
1621 (cpu_get_clock() - cpu_get_icount())/SCALE_MS);
1622 if (icount_align_option) {
1623 cpu_fprintf(f, "Max guest delay %"PRIi64" ms\n", -max_delay/SCALE_MS);
1624 cpu_fprintf(f, "Max guest advance %"PRIi64" ms\n", max_advance/SCALE_MS);
1625 } else {
1626 cpu_fprintf(f, "Max guest delay NA\n");
1627 cpu_fprintf(f, "Max guest advance NA\n");
1628 }
1629}