]> git.proxmox.com Git - mirror_qemu.git/blame - cpus.c
block: Ignore generated job QAPI files
[mirror_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
7b31bbc2 25#include "qemu/osdep.h"
8d4e9146 26#include "qemu/config-file.h"
33c11879 27#include "cpu.h"
83c9089e 28#include "monitor/monitor.h"
e688df6b 29#include "qapi/error.h"
112ed241 30#include "qapi/qapi-commands-misc.h"
9af23989 31#include "qapi/qapi-events-run-state.h"
a4e15de9 32#include "qapi/qmp/qerror.h"
d49b6836 33#include "qemu/error-report.h"
9c17d615 34#include "sysemu/sysemu.h"
da31d594 35#include "sysemu/block-backend.h"
022c62cb 36#include "exec/gdbstub.h"
9c17d615 37#include "sysemu/dma.h"
b3946626 38#include "sysemu/hw_accel.h"
9c17d615 39#include "sysemu/kvm.h"
b0cb0a66 40#include "sysemu/hax.h"
c97d6d2c 41#include "sysemu/hvf.h"
19306806 42#include "sysemu/whpx.h"
63c91552 43#include "exec/exec-all.h"
296af7c9 44
1de7afc9 45#include "qemu/thread.h"
9c17d615
PB
46#include "sysemu/cpus.h"
47#include "sysemu/qtest.h"
1de7afc9 48#include "qemu/main-loop.h"
922a01a0 49#include "qemu/option.h"
1de7afc9 50#include "qemu/bitmap.h"
cb365646 51#include "qemu/seqlock.h"
8d4e9146 52#include "tcg.h"
9cb805fd 53#include "hw/nmi.h"
8b427044 54#include "sysemu/replay.h"
afed5a5a 55#include "hw/boards.h"
0ff0fc19 56
6d9cb73c
JK
57#ifdef CONFIG_LINUX
58
59#include <sys/prctl.h>
60
c0532a76
MT
61#ifndef PR_MCE_KILL
62#define PR_MCE_KILL 33
63#endif
64
6d9cb73c
JK
65#ifndef PR_MCE_KILL_SET
66#define PR_MCE_KILL_SET 1
67#endif
68
69#ifndef PR_MCE_KILL_EARLY
70#define PR_MCE_KILL_EARLY 1
71#endif
72
73#endif /* CONFIG_LINUX */
74
27498bef
ST
75int64_t max_delay;
76int64_t max_advance;
296af7c9 77
2adcc85d
JH
78/* vcpu throttling controls */
79static QEMUTimer *throttle_timer;
80static unsigned int throttle_percentage;
81
82#define CPU_THROTTLE_PCT_MIN 1
83#define CPU_THROTTLE_PCT_MAX 99
84#define CPU_THROTTLE_TIMESLICE_NS 10000000
85
321bc0b2
TC
86bool cpu_is_stopped(CPUState *cpu)
87{
88 return cpu->stopped || !runstate_is_running();
89}
90
a98ae1d8 91static bool cpu_thread_is_idle(CPUState *cpu)
ac873f1e 92{
c64ca814 93 if (cpu->stop || cpu->queued_work_first) {
ac873f1e
PM
94 return false;
95 }
321bc0b2 96 if (cpu_is_stopped(cpu)) {
ac873f1e
PM
97 return true;
98 }
8c2e1b00 99 if (!cpu->halted || cpu_has_work(cpu) ||
215e79c0 100 kvm_halt_in_kernel()) {
ac873f1e
PM
101 return false;
102 }
103 return true;
104}
105
106static bool all_cpu_threads_idle(void)
107{
182735ef 108 CPUState *cpu;
ac873f1e 109
bdc44640 110 CPU_FOREACH(cpu) {
182735ef 111 if (!cpu_thread_is_idle(cpu)) {
ac873f1e
PM
112 return false;
113 }
114 }
115 return true;
116}
117
946fb27c
PB
118/***********************************************************/
119/* guest cycle counter */
120
a3270e19
PB
121/* Protected by TimersState seqlock */
122
5045e9d9 123static bool icount_sleep = true;
946fb27c
PB
124/* Conversion factor from emulated instructions to virtual clock ticks. */
125static int icount_time_shift;
126/* Arbitrarily pick 1MIPS as the minimum allowable speed. */
127#define MAX_ICOUNT_SHIFT 10
a3270e19 128
946fb27c 129typedef struct TimersState {
cb365646 130 /* Protected by BQL. */
946fb27c
PB
131 int64_t cpu_ticks_prev;
132 int64_t cpu_ticks_offset;
cb365646
LPF
133
134 /* cpu_clock_offset can be read out of BQL, so protect it with
135 * this lock.
136 */
137 QemuSeqLock vm_clock_seqlock;
946fb27c
PB
138 int64_t cpu_clock_offset;
139 int32_t cpu_ticks_enabled;
140 int64_t dummy;
c96778bb
FK
141
142 /* Compensate for varying guest execution speed. */
143 int64_t qemu_icount_bias;
144 /* Only written by TCG thread */
145 int64_t qemu_icount;
b39e3f34
PD
146 /* for adjusting icount */
147 int64_t vm_clock_warp_start;
148 QEMUTimer *icount_rt_timer;
149 QEMUTimer *icount_vm_timer;
150 QEMUTimer *icount_warp_timer;
946fb27c
PB
151} TimersState;
152
d9cd4007 153static TimersState timers_state;
8d4e9146
FK
154bool mttcg_enabled;
155
156/*
157 * We default to false if we know other options have been enabled
158 * which are currently incompatible with MTTCG. Otherwise when each
159 * guest (target) has been updated to support:
160 * - atomic instructions
161 * - memory ordering primitives (barriers)
162 * they can set the appropriate CONFIG flags in ${target}-softmmu.mak
163 *
164 * Once a guest architecture has been converted to the new primitives
165 * there are two remaining limitations to check.
166 *
167 * - The guest can't be oversized (e.g. 64 bit guest on 32 bit host)
168 * - The host must have a stronger memory order than the guest
169 *
170 * It may be possible in future to support strong guests on weak hosts
171 * but that will require tagging all load/stores in a guest with their
172 * implicit memory order requirements which would likely slow things
173 * down a lot.
174 */
175
176static bool check_tcg_memory_orders_compatible(void)
177{
178#if defined(TCG_GUEST_DEFAULT_MO) && defined(TCG_TARGET_DEFAULT_MO)
179 return (TCG_GUEST_DEFAULT_MO & ~TCG_TARGET_DEFAULT_MO) == 0;
180#else
181 return false;
182#endif
183}
184
185static bool default_mttcg_enabled(void)
186{
83fd9629 187 if (use_icount || TCG_OVERSIZED_GUEST) {
8d4e9146
FK
188 return false;
189 } else {
190#ifdef TARGET_SUPPORTS_MTTCG
191 return check_tcg_memory_orders_compatible();
192#else
193 return false;
194#endif
195 }
196}
197
198void qemu_tcg_configure(QemuOpts *opts, Error **errp)
199{
200 const char *t = qemu_opt_get(opts, "thread");
201 if (t) {
202 if (strcmp(t, "multi") == 0) {
203 if (TCG_OVERSIZED_GUEST) {
204 error_setg(errp, "No MTTCG when guest word size > hosts");
83fd9629
AB
205 } else if (use_icount) {
206 error_setg(errp, "No MTTCG when icount is enabled");
8d4e9146 207 } else {
86953503 208#ifndef TARGET_SUPPORTS_MTTCG
c34c7620
AB
209 error_report("Guest not yet converted to MTTCG - "
210 "you may get unexpected results");
211#endif
8d4e9146
FK
212 if (!check_tcg_memory_orders_compatible()) {
213 error_report("Guest expects a stronger memory ordering "
214 "than the host provides");
8cfef892 215 error_printf("This may cause strange/hard to debug errors\n");
8d4e9146
FK
216 }
217 mttcg_enabled = true;
218 }
219 } else if (strcmp(t, "single") == 0) {
220 mttcg_enabled = false;
221 } else {
222 error_setg(errp, "Invalid 'thread' setting %s", t);
223 }
224 } else {
225 mttcg_enabled = default_mttcg_enabled();
226 }
227}
946fb27c 228
e4cd9657
AB
229/* The current number of executed instructions is based on what we
230 * originally budgeted minus the current state of the decrementing
231 * icount counters in extra/u16.low.
232 */
233static int64_t cpu_get_icount_executed(CPUState *cpu)
234{
235 return cpu->icount_budget - (cpu->icount_decr.u16.low + cpu->icount_extra);
236}
237
512d3c80
AB
238/*
239 * Update the global shared timer_state.qemu_icount to take into
240 * account executed instructions. This is done by the TCG vCPU
241 * thread so the main-loop can see time has moved forward.
242 */
243void cpu_update_icount(CPUState *cpu)
244{
245 int64_t executed = cpu_get_icount_executed(cpu);
246 cpu->icount_budget -= executed;
247
248#ifdef CONFIG_ATOMIC64
249 atomic_set__nocheck(&timers_state.qemu_icount,
250 atomic_read__nocheck(&timers_state.qemu_icount) +
251 executed);
252#else /* FIXME: we need 64bit atomics to do this safely */
253 timers_state.qemu_icount += executed;
254#endif
255}
256
2a62914b 257int64_t cpu_get_icount_raw(void)
946fb27c 258{
4917cf44 259 CPUState *cpu = current_cpu;
946fb27c 260
243c5f77 261 if (cpu && cpu->running) {
414b15c9 262 if (!cpu->can_do_io) {
493d89bf 263 error_report("Bad icount read");
2a62914b 264 exit(1);
946fb27c 265 }
e4cd9657 266 /* Take into account what has run */
1d05906b 267 cpu_update_icount(cpu);
946fb27c 268 }
1d05906b
AB
269#ifdef CONFIG_ATOMIC64
270 return atomic_read__nocheck(&timers_state.qemu_icount);
271#else /* FIXME: we need 64bit atomics to do this safely */
272 return timers_state.qemu_icount;
273#endif
2a62914b
PD
274}
275
276/* Return the virtual CPU time, based on the instruction counter. */
277static int64_t cpu_get_icount_locked(void)
278{
279 int64_t icount = cpu_get_icount_raw();
3f031313 280 return timers_state.qemu_icount_bias + cpu_icount_to_ns(icount);
946fb27c
PB
281}
282
17a15f1b
PB
283int64_t cpu_get_icount(void)
284{
285 int64_t icount;
286 unsigned start;
287
288 do {
289 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
290 icount = cpu_get_icount_locked();
291 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
292
293 return icount;
294}
295
3f031313
FK
296int64_t cpu_icount_to_ns(int64_t icount)
297{
298 return icount << icount_time_shift;
299}
300
d90f3cca
C
301/* return the time elapsed in VM between vm_start and vm_stop. Unless
302 * icount is active, cpu_get_ticks() uses units of the host CPU cycle
303 * counter.
304 *
305 * Caller must hold the BQL
306 */
946fb27c
PB
307int64_t cpu_get_ticks(void)
308{
5f3e3101
PB
309 int64_t ticks;
310
946fb27c
PB
311 if (use_icount) {
312 return cpu_get_icount();
313 }
5f3e3101
PB
314
315 ticks = timers_state.cpu_ticks_offset;
316 if (timers_state.cpu_ticks_enabled) {
4a7428c5 317 ticks += cpu_get_host_ticks();
5f3e3101
PB
318 }
319
320 if (timers_state.cpu_ticks_prev > ticks) {
321 /* Note: non increasing ticks may happen if the host uses
322 software suspend */
323 timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
324 ticks = timers_state.cpu_ticks_prev;
946fb27c 325 }
5f3e3101
PB
326
327 timers_state.cpu_ticks_prev = ticks;
328 return ticks;
946fb27c
PB
329}
330
cb365646 331static int64_t cpu_get_clock_locked(void)
946fb27c 332{
1d45cea5 333 int64_t time;
cb365646 334
1d45cea5 335 time = timers_state.cpu_clock_offset;
5f3e3101 336 if (timers_state.cpu_ticks_enabled) {
1d45cea5 337 time += get_clock();
946fb27c 338 }
cb365646 339
1d45cea5 340 return time;
cb365646
LPF
341}
342
d90f3cca 343/* Return the monotonic time elapsed in VM, i.e.,
8212ff86
PM
344 * the time between vm_start and vm_stop
345 */
cb365646
LPF
346int64_t cpu_get_clock(void)
347{
348 int64_t ti;
349 unsigned start;
350
351 do {
352 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
353 ti = cpu_get_clock_locked();
354 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
355
356 return ti;
946fb27c
PB
357}
358
cb365646 359/* enable cpu_get_ticks()
3224e878 360 * Caller must hold BQL which serves as mutex for vm_clock_seqlock.
cb365646 361 */
946fb27c
PB
362void cpu_enable_ticks(void)
363{
cb365646 364 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
03719e44 365 seqlock_write_begin(&timers_state.vm_clock_seqlock);
946fb27c 366 if (!timers_state.cpu_ticks_enabled) {
4a7428c5 367 timers_state.cpu_ticks_offset -= cpu_get_host_ticks();
946fb27c
PB
368 timers_state.cpu_clock_offset -= get_clock();
369 timers_state.cpu_ticks_enabled = 1;
370 }
03719e44 371 seqlock_write_end(&timers_state.vm_clock_seqlock);
946fb27c
PB
372}
373
374/* disable cpu_get_ticks() : the clock is stopped. You must not call
cb365646 375 * cpu_get_ticks() after that.
3224e878 376 * Caller must hold BQL which serves as mutex for vm_clock_seqlock.
cb365646 377 */
946fb27c
PB
378void cpu_disable_ticks(void)
379{
cb365646 380 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
03719e44 381 seqlock_write_begin(&timers_state.vm_clock_seqlock);
946fb27c 382 if (timers_state.cpu_ticks_enabled) {
4a7428c5 383 timers_state.cpu_ticks_offset += cpu_get_host_ticks();
cb365646 384 timers_state.cpu_clock_offset = cpu_get_clock_locked();
946fb27c
PB
385 timers_state.cpu_ticks_enabled = 0;
386 }
03719e44 387 seqlock_write_end(&timers_state.vm_clock_seqlock);
946fb27c
PB
388}
389
390/* Correlation between real and virtual time is always going to be
391 fairly approximate, so ignore small variation.
392 When the guest is idle real and virtual time will be aligned in
393 the IO wait loop. */
73bcb24d 394#define ICOUNT_WOBBLE (NANOSECONDS_PER_SECOND / 10)
946fb27c
PB
395
396static void icount_adjust(void)
397{
398 int64_t cur_time;
399 int64_t cur_icount;
400 int64_t delta;
a3270e19
PB
401
402 /* Protected by TimersState mutex. */
946fb27c 403 static int64_t last_delta;
468cc7cf 404
946fb27c
PB
405 /* If the VM is not running, then do nothing. */
406 if (!runstate_is_running()) {
407 return;
408 }
468cc7cf 409
03719e44 410 seqlock_write_begin(&timers_state.vm_clock_seqlock);
17a15f1b
PB
411 cur_time = cpu_get_clock_locked();
412 cur_icount = cpu_get_icount_locked();
468cc7cf 413
946fb27c
PB
414 delta = cur_icount - cur_time;
415 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
416 if (delta > 0
417 && last_delta + ICOUNT_WOBBLE < delta * 2
418 && icount_time_shift > 0) {
419 /* The guest is getting too far ahead. Slow time down. */
420 icount_time_shift--;
421 }
422 if (delta < 0
423 && last_delta - ICOUNT_WOBBLE > delta * 2
424 && icount_time_shift < MAX_ICOUNT_SHIFT) {
425 /* The guest is getting too far behind. Speed time up. */
426 icount_time_shift++;
427 }
428 last_delta = delta;
c96778bb
FK
429 timers_state.qemu_icount_bias = cur_icount
430 - (timers_state.qemu_icount << icount_time_shift);
03719e44 431 seqlock_write_end(&timers_state.vm_clock_seqlock);
946fb27c
PB
432}
433
434static void icount_adjust_rt(void *opaque)
435{
b39e3f34 436 timer_mod(timers_state.icount_rt_timer,
1979b908 437 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
946fb27c
PB
438 icount_adjust();
439}
440
441static void icount_adjust_vm(void *opaque)
442{
b39e3f34 443 timer_mod(timers_state.icount_vm_timer,
40daca54 444 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
73bcb24d 445 NANOSECONDS_PER_SECOND / 10);
946fb27c
PB
446 icount_adjust();
447}
448
449static int64_t qemu_icount_round(int64_t count)
450{
451 return (count + (1 << icount_time_shift) - 1) >> icount_time_shift;
452}
453
efab87cf 454static void icount_warp_rt(void)
946fb27c 455{
ccffff48
AB
456 unsigned seq;
457 int64_t warp_start;
458
17a15f1b
PB
459 /* The icount_warp_timer is rescheduled soon after vm_clock_warp_start
460 * changes from -1 to another value, so the race here is okay.
461 */
ccffff48
AB
462 do {
463 seq = seqlock_read_begin(&timers_state.vm_clock_seqlock);
b39e3f34 464 warp_start = timers_state.vm_clock_warp_start;
ccffff48
AB
465 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, seq));
466
467 if (warp_start == -1) {
946fb27c
PB
468 return;
469 }
470
03719e44 471 seqlock_write_begin(&timers_state.vm_clock_seqlock);
946fb27c 472 if (runstate_is_running()) {
8eda206e
PD
473 int64_t clock = REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT,
474 cpu_get_clock_locked());
8ed961d9
PB
475 int64_t warp_delta;
476
b39e3f34 477 warp_delta = clock - timers_state.vm_clock_warp_start;
8ed961d9 478 if (use_icount == 2) {
946fb27c 479 /*
40daca54 480 * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
946fb27c
PB
481 * far ahead of real time.
482 */
17a15f1b 483 int64_t cur_icount = cpu_get_icount_locked();
bf2a7ddb 484 int64_t delta = clock - cur_icount;
8ed961d9 485 warp_delta = MIN(warp_delta, delta);
946fb27c 486 }
c96778bb 487 timers_state.qemu_icount_bias += warp_delta;
946fb27c 488 }
b39e3f34 489 timers_state.vm_clock_warp_start = -1;
03719e44 490 seqlock_write_end(&timers_state.vm_clock_seqlock);
8ed961d9
PB
491
492 if (qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) {
493 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
494 }
946fb27c
PB
495}
496
e76d1798 497static void icount_timer_cb(void *opaque)
efab87cf 498{
e76d1798
PD
499 /* No need for a checkpoint because the timer already synchronizes
500 * with CHECKPOINT_CLOCK_VIRTUAL_RT.
501 */
502 icount_warp_rt();
efab87cf
PD
503}
504
8156be56
PB
505void qtest_clock_warp(int64_t dest)
506{
40daca54 507 int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
efef88b3 508 AioContext *aio_context;
8156be56 509 assert(qtest_enabled());
efef88b3 510 aio_context = qemu_get_aio_context();
8156be56 511 while (clock < dest) {
40daca54 512 int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
c9299e2f 513 int64_t warp = qemu_soonest_timeout(dest - clock, deadline);
efef88b3 514
03719e44 515 seqlock_write_begin(&timers_state.vm_clock_seqlock);
c96778bb 516 timers_state.qemu_icount_bias += warp;
03719e44 517 seqlock_write_end(&timers_state.vm_clock_seqlock);
17a15f1b 518
40daca54 519 qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
efef88b3 520 timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]);
40daca54 521 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
8156be56 522 }
40daca54 523 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
8156be56
PB
524}
525
e76d1798 526void qemu_start_warp_timer(void)
946fb27c 527{
ce78d18c 528 int64_t clock;
946fb27c
PB
529 int64_t deadline;
530
e76d1798 531 if (!use_icount) {
946fb27c
PB
532 return;
533 }
534
8bd7f71d
PD
535 /* Nothing to do if the VM is stopped: QEMU_CLOCK_VIRTUAL timers
536 * do not fire, so computing the deadline does not make sense.
537 */
538 if (!runstate_is_running()) {
539 return;
540 }
541
542 /* warp clock deterministically in record/replay mode */
e76d1798 543 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_START)) {
8bd7f71d
PD
544 return;
545 }
546
ce78d18c 547 if (!all_cpu_threads_idle()) {
946fb27c
PB
548 return;
549 }
550
8156be56
PB
551 if (qtest_enabled()) {
552 /* When testing, qtest commands advance icount. */
e76d1798 553 return;
8156be56
PB
554 }
555
ac70aafc 556 /* We want to use the earliest deadline from ALL vm_clocks */
bf2a7ddb 557 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT);
40daca54 558 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
ce78d18c 559 if (deadline < 0) {
d7a0f71d
VC
560 static bool notified;
561 if (!icount_sleep && !notified) {
3dc6f869 562 warn_report("icount sleep disabled and no active timers");
d7a0f71d
VC
563 notified = true;
564 }
ce78d18c 565 return;
ac70aafc
AB
566 }
567
946fb27c
PB
568 if (deadline > 0) {
569 /*
40daca54 570 * Ensure QEMU_CLOCK_VIRTUAL proceeds even when the virtual CPU goes to
946fb27c
PB
571 * sleep. Otherwise, the CPU might be waiting for a future timer
572 * interrupt to wake it up, but the interrupt never comes because
573 * the vCPU isn't running any insns and thus doesn't advance the
40daca54 574 * QEMU_CLOCK_VIRTUAL.
946fb27c 575 */
5045e9d9
VC
576 if (!icount_sleep) {
577 /*
578 * We never let VCPUs sleep in no sleep icount mode.
579 * If there is a pending QEMU_CLOCK_VIRTUAL timer we just advance
580 * to the next QEMU_CLOCK_VIRTUAL event and notify it.
581 * It is useful when we want a deterministic execution time,
582 * isolated from host latencies.
583 */
03719e44 584 seqlock_write_begin(&timers_state.vm_clock_seqlock);
5045e9d9 585 timers_state.qemu_icount_bias += deadline;
03719e44 586 seqlock_write_end(&timers_state.vm_clock_seqlock);
5045e9d9
VC
587 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
588 } else {
589 /*
590 * We do stop VCPUs and only advance QEMU_CLOCK_VIRTUAL after some
591 * "real" time, (related to the time left until the next event) has
592 * passed. The QEMU_CLOCK_VIRTUAL_RT clock will do this.
593 * This avoids that the warps are visible externally; for example,
594 * you will not be sending network packets continuously instead of
595 * every 100ms.
596 */
03719e44 597 seqlock_write_begin(&timers_state.vm_clock_seqlock);
b39e3f34
PD
598 if (timers_state.vm_clock_warp_start == -1
599 || timers_state.vm_clock_warp_start > clock) {
600 timers_state.vm_clock_warp_start = clock;
5045e9d9 601 }
03719e44 602 seqlock_write_end(&timers_state.vm_clock_seqlock);
b39e3f34
PD
603 timer_mod_anticipate(timers_state.icount_warp_timer,
604 clock + deadline);
ce78d18c 605 }
ac70aafc 606 } else if (deadline == 0) {
40daca54 607 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
946fb27c
PB
608 }
609}
610
e76d1798
PD
611static void qemu_account_warp_timer(void)
612{
613 if (!use_icount || !icount_sleep) {
614 return;
615 }
616
617 /* Nothing to do if the VM is stopped: QEMU_CLOCK_VIRTUAL timers
618 * do not fire, so computing the deadline does not make sense.
619 */
620 if (!runstate_is_running()) {
621 return;
622 }
623
624 /* warp clock deterministically in record/replay mode */
625 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_ACCOUNT)) {
626 return;
627 }
628
b39e3f34 629 timer_del(timers_state.icount_warp_timer);
e76d1798
PD
630 icount_warp_rt();
631}
632
d09eae37
FK
633static bool icount_state_needed(void *opaque)
634{
635 return use_icount;
636}
637
b39e3f34
PD
638static bool warp_timer_state_needed(void *opaque)
639{
640 TimersState *s = opaque;
641 return s->icount_warp_timer != NULL;
642}
643
644static bool adjust_timers_state_needed(void *opaque)
645{
646 TimersState *s = opaque;
647 return s->icount_rt_timer != NULL;
648}
649
650/*
651 * Subsection for warp timer migration is optional, because may not be created
652 */
653static const VMStateDescription icount_vmstate_warp_timer = {
654 .name = "timer/icount/warp_timer",
655 .version_id = 1,
656 .minimum_version_id = 1,
657 .needed = warp_timer_state_needed,
658 .fields = (VMStateField[]) {
659 VMSTATE_INT64(vm_clock_warp_start, TimersState),
660 VMSTATE_TIMER_PTR(icount_warp_timer, TimersState),
661 VMSTATE_END_OF_LIST()
662 }
663};
664
665static const VMStateDescription icount_vmstate_adjust_timers = {
666 .name = "timer/icount/timers",
667 .version_id = 1,
668 .minimum_version_id = 1,
669 .needed = adjust_timers_state_needed,
670 .fields = (VMStateField[]) {
671 VMSTATE_TIMER_PTR(icount_rt_timer, TimersState),
672 VMSTATE_TIMER_PTR(icount_vm_timer, TimersState),
673 VMSTATE_END_OF_LIST()
674 }
675};
676
d09eae37
FK
677/*
678 * This is a subsection for icount migration.
679 */
680static const VMStateDescription icount_vmstate_timers = {
681 .name = "timer/icount",
682 .version_id = 1,
683 .minimum_version_id = 1,
5cd8cada 684 .needed = icount_state_needed,
d09eae37
FK
685 .fields = (VMStateField[]) {
686 VMSTATE_INT64(qemu_icount_bias, TimersState),
687 VMSTATE_INT64(qemu_icount, TimersState),
688 VMSTATE_END_OF_LIST()
b39e3f34
PD
689 },
690 .subsections = (const VMStateDescription*[]) {
691 &icount_vmstate_warp_timer,
692 &icount_vmstate_adjust_timers,
693 NULL
d09eae37
FK
694 }
695};
696
946fb27c
PB
697static const VMStateDescription vmstate_timers = {
698 .name = "timer",
699 .version_id = 2,
700 .minimum_version_id = 1,
35d08458 701 .fields = (VMStateField[]) {
946fb27c
PB
702 VMSTATE_INT64(cpu_ticks_offset, TimersState),
703 VMSTATE_INT64(dummy, TimersState),
704 VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
705 VMSTATE_END_OF_LIST()
d09eae37 706 },
5cd8cada
JQ
707 .subsections = (const VMStateDescription*[]) {
708 &icount_vmstate_timers,
709 NULL
946fb27c
PB
710 }
711};
712
14e6fe12 713static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
2adcc85d 714{
2adcc85d
JH
715 double pct;
716 double throttle_ratio;
717 long sleeptime_ns;
718
719 if (!cpu_throttle_get_percentage()) {
720 return;
721 }
722
723 pct = (double)cpu_throttle_get_percentage()/100;
724 throttle_ratio = pct / (1 - pct);
725 sleeptime_ns = (long)(throttle_ratio * CPU_THROTTLE_TIMESLICE_NS);
726
727 qemu_mutex_unlock_iothread();
2adcc85d
JH
728 g_usleep(sleeptime_ns / 1000); /* Convert ns to us for usleep call */
729 qemu_mutex_lock_iothread();
90bb0c04 730 atomic_set(&cpu->throttle_thread_scheduled, 0);
2adcc85d
JH
731}
732
733static void cpu_throttle_timer_tick(void *opaque)
734{
735 CPUState *cpu;
736 double pct;
737
738 /* Stop the timer if needed */
739 if (!cpu_throttle_get_percentage()) {
740 return;
741 }
742 CPU_FOREACH(cpu) {
743 if (!atomic_xchg(&cpu->throttle_thread_scheduled, 1)) {
14e6fe12
PB
744 async_run_on_cpu(cpu, cpu_throttle_thread,
745 RUN_ON_CPU_NULL);
2adcc85d
JH
746 }
747 }
748
749 pct = (double)cpu_throttle_get_percentage()/100;
750 timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
751 CPU_THROTTLE_TIMESLICE_NS / (1-pct));
752}
753
754void cpu_throttle_set(int new_throttle_pct)
755{
756 /* Ensure throttle percentage is within valid range */
757 new_throttle_pct = MIN(new_throttle_pct, CPU_THROTTLE_PCT_MAX);
758 new_throttle_pct = MAX(new_throttle_pct, CPU_THROTTLE_PCT_MIN);
759
760 atomic_set(&throttle_percentage, new_throttle_pct);
761
762 timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
763 CPU_THROTTLE_TIMESLICE_NS);
764}
765
766void cpu_throttle_stop(void)
767{
768 atomic_set(&throttle_percentage, 0);
769}
770
771bool cpu_throttle_active(void)
772{
773 return (cpu_throttle_get_percentage() != 0);
774}
775
776int cpu_throttle_get_percentage(void)
777{
778 return atomic_read(&throttle_percentage);
779}
780
4603ea01
PD
781void cpu_ticks_init(void)
782{
ccdb3c1f 783 seqlock_init(&timers_state.vm_clock_seqlock);
4603ea01 784 vmstate_register(NULL, 0, &vmstate_timers, &timers_state);
2adcc85d
JH
785 throttle_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
786 cpu_throttle_timer_tick, NULL);
4603ea01
PD
787}
788
1ad9580b 789void configure_icount(QemuOpts *opts, Error **errp)
946fb27c 790{
1ad9580b 791 const char *option;
a8bfac37 792 char *rem_str = NULL;
1ad9580b 793
1ad9580b 794 option = qemu_opt_get(opts, "shift");
946fb27c 795 if (!option) {
a8bfac37
ST
796 if (qemu_opt_get(opts, "align") != NULL) {
797 error_setg(errp, "Please specify shift option when using align");
798 }
946fb27c
PB
799 return;
800 }
f1f4b57e
VC
801
802 icount_sleep = qemu_opt_get_bool(opts, "sleep", true);
5045e9d9 803 if (icount_sleep) {
b39e3f34 804 timers_state.icount_warp_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
e76d1798 805 icount_timer_cb, NULL);
5045e9d9 806 }
f1f4b57e 807
a8bfac37 808 icount_align_option = qemu_opt_get_bool(opts, "align", false);
f1f4b57e
VC
809
810 if (icount_align_option && !icount_sleep) {
778d9f9b 811 error_setg(errp, "align=on and sleep=off are incompatible");
f1f4b57e 812 }
946fb27c 813 if (strcmp(option, "auto") != 0) {
a8bfac37
ST
814 errno = 0;
815 icount_time_shift = strtol(option, &rem_str, 0);
816 if (errno != 0 || *rem_str != '\0' || !strlen(option)) {
817 error_setg(errp, "icount: Invalid shift value");
818 }
946fb27c
PB
819 use_icount = 1;
820 return;
a8bfac37
ST
821 } else if (icount_align_option) {
822 error_setg(errp, "shift=auto and align=on are incompatible");
f1f4b57e 823 } else if (!icount_sleep) {
778d9f9b 824 error_setg(errp, "shift=auto and sleep=off are incompatible");
946fb27c
PB
825 }
826
827 use_icount = 2;
828
829 /* 125MIPS seems a reasonable initial guess at the guest speed.
830 It will be corrected fairly quickly anyway. */
831 icount_time_shift = 3;
832
833 /* Have both realtime and virtual time triggers for speed adjustment.
834 The realtime trigger catches emulated time passing too slowly,
835 the virtual time trigger catches emulated time passing too fast.
836 Realtime triggers occur even when idle, so use them less frequently
837 than VM triggers. */
b39e3f34
PD
838 timers_state.vm_clock_warp_start = -1;
839 timers_state.icount_rt_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL_RT,
bf2a7ddb 840 icount_adjust_rt, NULL);
b39e3f34 841 timer_mod(timers_state.icount_rt_timer,
bf2a7ddb 842 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
b39e3f34 843 timers_state.icount_vm_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
40daca54 844 icount_adjust_vm, NULL);
b39e3f34 845 timer_mod(timers_state.icount_vm_timer,
40daca54 846 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
73bcb24d 847 NANOSECONDS_PER_SECOND / 10);
946fb27c
PB
848}
849
6546706d
AB
850/***********************************************************/
851/* TCG vCPU kick timer
852 *
853 * The kick timer is responsible for moving single threaded vCPU
854 * emulation on to the next vCPU. If more than one vCPU is running a
855 * timer event with force a cpu->exit so the next vCPU can get
856 * scheduled.
857 *
858 * The timer is removed if all vCPUs are idle and restarted again once
859 * idleness is complete.
860 */
861
862static QEMUTimer *tcg_kick_vcpu_timer;
791158d9 863static CPUState *tcg_current_rr_cpu;
6546706d
AB
864
865#define TCG_KICK_PERIOD (NANOSECONDS_PER_SECOND / 10)
866
867static inline int64_t qemu_tcg_next_kick(void)
868{
869 return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + TCG_KICK_PERIOD;
870}
871
791158d9
AB
872/* Kick the currently round-robin scheduled vCPU */
873static void qemu_cpu_kick_rr_cpu(void)
874{
875 CPUState *cpu;
791158d9
AB
876 do {
877 cpu = atomic_mb_read(&tcg_current_rr_cpu);
878 if (cpu) {
879 cpu_exit(cpu);
880 }
881 } while (cpu != atomic_mb_read(&tcg_current_rr_cpu));
882}
883
6b8f0187
PB
884static void do_nothing(CPUState *cpu, run_on_cpu_data unused)
885{
886}
887
3f53bc61
PB
888void qemu_timer_notify_cb(void *opaque, QEMUClockType type)
889{
6b8f0187
PB
890 if (!use_icount || type != QEMU_CLOCK_VIRTUAL) {
891 qemu_notify_event();
892 return;
893 }
894
c52e7132
PM
895 if (qemu_in_vcpu_thread()) {
896 /* A CPU is currently running; kick it back out to the
897 * tcg_cpu_exec() loop so it will recalculate its
898 * icount deadline immediately.
899 */
900 qemu_cpu_kick(current_cpu);
901 } else if (first_cpu) {
6b8f0187
PB
902 /* qemu_cpu_kick is not enough to kick a halted CPU out of
903 * qemu_tcg_wait_io_event. async_run_on_cpu, instead,
904 * causes cpu_thread_is_idle to return false. This way,
905 * handle_icount_deadline can run.
c52e7132
PM
906 * If we have no CPUs at all for some reason, we don't
907 * need to do anything.
6b8f0187
PB
908 */
909 async_run_on_cpu(first_cpu, do_nothing, RUN_ON_CPU_NULL);
910 }
3f53bc61
PB
911}
912
6546706d
AB
913static void kick_tcg_thread(void *opaque)
914{
915 timer_mod(tcg_kick_vcpu_timer, qemu_tcg_next_kick());
791158d9 916 qemu_cpu_kick_rr_cpu();
6546706d
AB
917}
918
919static void start_tcg_kick_timer(void)
920{
db08b687
PB
921 assert(!mttcg_enabled);
922 if (!tcg_kick_vcpu_timer && CPU_NEXT(first_cpu)) {
6546706d
AB
923 tcg_kick_vcpu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
924 kick_tcg_thread, NULL);
925 timer_mod(tcg_kick_vcpu_timer, qemu_tcg_next_kick());
926 }
927}
928
929static void stop_tcg_kick_timer(void)
930{
db08b687 931 assert(!mttcg_enabled);
6546706d
AB
932 if (tcg_kick_vcpu_timer) {
933 timer_del(tcg_kick_vcpu_timer);
934 tcg_kick_vcpu_timer = NULL;
935 }
936}
937
296af7c9
BS
938/***********************************************************/
939void hw_error(const char *fmt, ...)
940{
941 va_list ap;
55e5c285 942 CPUState *cpu;
296af7c9
BS
943
944 va_start(ap, fmt);
945 fprintf(stderr, "qemu: hardware error: ");
946 vfprintf(stderr, fmt, ap);
947 fprintf(stderr, "\n");
bdc44640 948 CPU_FOREACH(cpu) {
55e5c285 949 fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
878096ee 950 cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU);
296af7c9
BS
951 }
952 va_end(ap);
953 abort();
954}
955
956void cpu_synchronize_all_states(void)
957{
182735ef 958 CPUState *cpu;
296af7c9 959
bdc44640 960 CPU_FOREACH(cpu) {
182735ef 961 cpu_synchronize_state(cpu);
c97d6d2c
SAGDR
962 /* TODO: move to cpu_synchronize_state() */
963 if (hvf_enabled()) {
964 hvf_cpu_synchronize_state(cpu);
965 }
296af7c9
BS
966 }
967}
968
969void cpu_synchronize_all_post_reset(void)
970{
182735ef 971 CPUState *cpu;
296af7c9 972
bdc44640 973 CPU_FOREACH(cpu) {
182735ef 974 cpu_synchronize_post_reset(cpu);
c97d6d2c
SAGDR
975 /* TODO: move to cpu_synchronize_post_reset() */
976 if (hvf_enabled()) {
977 hvf_cpu_synchronize_post_reset(cpu);
978 }
296af7c9
BS
979 }
980}
981
982void cpu_synchronize_all_post_init(void)
983{
182735ef 984 CPUState *cpu;
296af7c9 985
bdc44640 986 CPU_FOREACH(cpu) {
182735ef 987 cpu_synchronize_post_init(cpu);
c97d6d2c
SAGDR
988 /* TODO: move to cpu_synchronize_post_init() */
989 if (hvf_enabled()) {
990 hvf_cpu_synchronize_post_init(cpu);
991 }
296af7c9
BS
992 }
993}
994
75e972da
DG
995void cpu_synchronize_all_pre_loadvm(void)
996{
997 CPUState *cpu;
998
999 CPU_FOREACH(cpu) {
1000 cpu_synchronize_pre_loadvm(cpu);
1001 }
1002}
1003
4486e89c 1004static int do_vm_stop(RunState state, bool send_stop)
296af7c9 1005{
56983463
KW
1006 int ret = 0;
1007
1354869c 1008 if (runstate_is_running()) {
296af7c9 1009 cpu_disable_ticks();
296af7c9 1010 pause_all_vcpus();
f5bbfba1 1011 runstate_set(state);
1dfb4dd9 1012 vm_state_notify(0, state);
4486e89c
SH
1013 if (send_stop) {
1014 qapi_event_send_stop(&error_abort);
1015 }
296af7c9 1016 }
56983463 1017
594a45ce 1018 bdrv_drain_all();
6d0ceb80 1019 replay_disable_events();
22af08ea 1020 ret = bdrv_flush_all();
594a45ce 1021
56983463 1022 return ret;
296af7c9
BS
1023}
1024
4486e89c
SH
1025/* Special vm_stop() variant for terminating the process. Historically clients
1026 * did not expect a QMP STOP event and so we need to retain compatibility.
1027 */
1028int vm_shutdown(void)
1029{
1030 return do_vm_stop(RUN_STATE_SHUTDOWN, false);
1031}
1032
a1fcaa73 1033static bool cpu_can_run(CPUState *cpu)
296af7c9 1034{
4fdeee7c 1035 if (cpu->stop) {
a1fcaa73 1036 return false;
0ab07c62 1037 }
321bc0b2 1038 if (cpu_is_stopped(cpu)) {
a1fcaa73 1039 return false;
0ab07c62 1040 }
a1fcaa73 1041 return true;
296af7c9
BS
1042}
1043
91325046 1044static void cpu_handle_guest_debug(CPUState *cpu)
83f338f7 1045{
64f6b346 1046 gdb_set_stop_cpu(cpu);
8cf71710 1047 qemu_system_debug_request();
f324e766 1048 cpu->stopped = true;
3c638d06
JK
1049}
1050
6d9cb73c
JK
1051#ifdef CONFIG_LINUX
1052static void sigbus_reraise(void)
1053{
1054 sigset_t set;
1055 struct sigaction action;
1056
1057 memset(&action, 0, sizeof(action));
1058 action.sa_handler = SIG_DFL;
1059 if (!sigaction(SIGBUS, &action, NULL)) {
1060 raise(SIGBUS);
1061 sigemptyset(&set);
1062 sigaddset(&set, SIGBUS);
a2d1761d 1063 pthread_sigmask(SIG_UNBLOCK, &set, NULL);
6d9cb73c
JK
1064 }
1065 perror("Failed to re-raise SIGBUS!\n");
1066 abort();
1067}
1068
d98d4072 1069static void sigbus_handler(int n, siginfo_t *siginfo, void *ctx)
6d9cb73c 1070{
a16fc07e
PB
1071 if (siginfo->si_code != BUS_MCEERR_AO && siginfo->si_code != BUS_MCEERR_AR) {
1072 sigbus_reraise();
1073 }
1074
2ae41db2
PB
1075 if (current_cpu) {
1076 /* Called asynchronously in VCPU thread. */
1077 if (kvm_on_sigbus_vcpu(current_cpu, siginfo->si_code, siginfo->si_addr)) {
1078 sigbus_reraise();
1079 }
1080 } else {
1081 /* Called synchronously (via signalfd) in main thread. */
1082 if (kvm_on_sigbus(siginfo->si_code, siginfo->si_addr)) {
1083 sigbus_reraise();
1084 }
6d9cb73c
JK
1085 }
1086}
1087
1088static void qemu_init_sigbus(void)
1089{
1090 struct sigaction action;
1091
1092 memset(&action, 0, sizeof(action));
1093 action.sa_flags = SA_SIGINFO;
d98d4072 1094 action.sa_sigaction = sigbus_handler;
6d9cb73c
JK
1095 sigaction(SIGBUS, &action, NULL);
1096
1097 prctl(PR_MCE_KILL, PR_MCE_KILL_SET, PR_MCE_KILL_EARLY, 0, 0);
1098}
6d9cb73c 1099#else /* !CONFIG_LINUX */
6d9cb73c
JK
1100static void qemu_init_sigbus(void)
1101{
1102}
a16fc07e 1103#endif /* !CONFIG_LINUX */
ff48eb5f 1104
b2532d88 1105static QemuMutex qemu_global_mutex;
296af7c9
BS
1106
1107static QemuThread io_thread;
1108
296af7c9
BS
1109/* cpu creation */
1110static QemuCond qemu_cpu_cond;
1111/* system init */
296af7c9
BS
1112static QemuCond qemu_pause_cond;
1113
d3b12f5d 1114void qemu_init_cpu_loop(void)
296af7c9 1115{
6d9cb73c 1116 qemu_init_sigbus();
ed94592b 1117 qemu_cond_init(&qemu_cpu_cond);
ed94592b 1118 qemu_cond_init(&qemu_pause_cond);
296af7c9 1119 qemu_mutex_init(&qemu_global_mutex);
296af7c9 1120
b7680cb6 1121 qemu_thread_get_self(&io_thread);
296af7c9
BS
1122}
1123
14e6fe12 1124void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data)
e82bcec2 1125{
d148d90e 1126 do_run_on_cpu(cpu, func, data, &qemu_global_mutex);
3c02270d
CV
1127}
1128
4c055ab5
GZ
1129static void qemu_kvm_destroy_vcpu(CPUState *cpu)
1130{
1131 if (kvm_destroy_vcpu(cpu) < 0) {
1132 error_report("kvm_destroy_vcpu failed");
1133 exit(EXIT_FAILURE);
1134 }
1135}
1136
1137static void qemu_tcg_destroy_vcpu(CPUState *cpu)
1138{
1139}
1140
ebd05fea
DH
1141static void qemu_cpu_stop(CPUState *cpu, bool exit)
1142{
1143 g_assert(qemu_cpu_is_self(cpu));
1144 cpu->stop = false;
1145 cpu->stopped = true;
1146 if (exit) {
1147 cpu_exit(cpu);
1148 }
1149 qemu_cond_broadcast(&qemu_pause_cond);
1150}
1151
509a0d78 1152static void qemu_wait_io_event_common(CPUState *cpu)
296af7c9 1153{
37257942 1154 atomic_mb_set(&cpu->thread_kicked, false);
4fdeee7c 1155 if (cpu->stop) {
ebd05fea 1156 qemu_cpu_stop(cpu, false);
296af7c9 1157 }
a5403c69 1158 process_queued_cpu_work(cpu);
37257942
AB
1159}
1160
db08b687 1161static void qemu_tcg_rr_wait_io_event(CPUState *cpu)
37257942 1162{
db08b687 1163 while (all_cpu_threads_idle()) {
6546706d 1164 stop_tcg_kick_timer();
d5f8d613 1165 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
16400322 1166 }
296af7c9 1167
6546706d
AB
1168 start_tcg_kick_timer();
1169
37257942 1170 qemu_wait_io_event_common(cpu);
296af7c9
BS
1171}
1172
db08b687 1173static void qemu_wait_io_event(CPUState *cpu)
296af7c9 1174{
a98ae1d8 1175 while (cpu_thread_is_idle(cpu)) {
f5c121b8 1176 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
16400322 1177 }
296af7c9 1178
db08b687
PB
1179#ifdef _WIN32
1180 /* Eat dummy APC queued by qemu_cpu_kick_thread. */
1181 if (!tcg_enabled()) {
1182 SleepEx(0, TRUE);
c97d6d2c 1183 }
db08b687 1184#endif
c97d6d2c
SAGDR
1185 qemu_wait_io_event_common(cpu);
1186}
1187
7e97cd88 1188static void *qemu_kvm_cpu_thread_fn(void *arg)
296af7c9 1189{
48a106bd 1190 CPUState *cpu = arg;
84b4915d 1191 int r;
296af7c9 1192
ab28bd23
PB
1193 rcu_register_thread();
1194
2e7f7a3c 1195 qemu_mutex_lock_iothread();
814e612e 1196 qemu_thread_get_self(cpu->thread);
9f09e18a 1197 cpu->thread_id = qemu_get_thread_id();
626cf8f4 1198 cpu->can_do_io = 1;
4917cf44 1199 current_cpu = cpu;
296af7c9 1200
504134d2 1201 r = kvm_init_vcpu(cpu);
84b4915d 1202 if (r < 0) {
493d89bf 1203 error_report("kvm_init_vcpu failed: %s", strerror(-r));
84b4915d
JK
1204 exit(1);
1205 }
296af7c9 1206
18268b60 1207 kvm_init_cpu_signals(cpu);
296af7c9
BS
1208
1209 /* signal CPU creation */
61a46217 1210 cpu->created = true;
296af7c9
BS
1211 qemu_cond_signal(&qemu_cpu_cond);
1212
4c055ab5 1213 do {
a1fcaa73 1214 if (cpu_can_run(cpu)) {
1458c363 1215 r = kvm_cpu_exec(cpu);
83f338f7 1216 if (r == EXCP_DEBUG) {
91325046 1217 cpu_handle_guest_debug(cpu);
83f338f7 1218 }
0ab07c62 1219 }
db08b687 1220 qemu_wait_io_event(cpu);
4c055ab5 1221 } while (!cpu->unplug || cpu_can_run(cpu));
296af7c9 1222
4c055ab5 1223 qemu_kvm_destroy_vcpu(cpu);
2c579042
BR
1224 cpu->created = false;
1225 qemu_cond_signal(&qemu_cpu_cond);
4c055ab5 1226 qemu_mutex_unlock_iothread();
57615ed5 1227 rcu_unregister_thread();
296af7c9
BS
1228 return NULL;
1229}
1230
c7f0f3b1
AL
1231static void *qemu_dummy_cpu_thread_fn(void *arg)
1232{
1233#ifdef _WIN32
493d89bf 1234 error_report("qtest is not supported under Windows");
c7f0f3b1
AL
1235 exit(1);
1236#else
10a9021d 1237 CPUState *cpu = arg;
c7f0f3b1
AL
1238 sigset_t waitset;
1239 int r;
1240
ab28bd23
PB
1241 rcu_register_thread();
1242
c7f0f3b1 1243 qemu_mutex_lock_iothread();
814e612e 1244 qemu_thread_get_self(cpu->thread);
9f09e18a 1245 cpu->thread_id = qemu_get_thread_id();
626cf8f4 1246 cpu->can_do_io = 1;
37257942 1247 current_cpu = cpu;
c7f0f3b1
AL
1248
1249 sigemptyset(&waitset);
1250 sigaddset(&waitset, SIG_IPI);
1251
1252 /* signal CPU creation */
61a46217 1253 cpu->created = true;
c7f0f3b1
AL
1254 qemu_cond_signal(&qemu_cpu_cond);
1255
d2831ab0 1256 do {
c7f0f3b1
AL
1257 qemu_mutex_unlock_iothread();
1258 do {
1259 int sig;
1260 r = sigwait(&waitset, &sig);
1261 } while (r == -1 && (errno == EAGAIN || errno == EINTR));
1262 if (r == -1) {
1263 perror("sigwait");
1264 exit(1);
1265 }
1266 qemu_mutex_lock_iothread();
db08b687 1267 qemu_wait_io_event(cpu);
d2831ab0 1268 } while (!cpu->unplug);
c7f0f3b1 1269
d2831ab0 1270 rcu_unregister_thread();
c7f0f3b1
AL
1271 return NULL;
1272#endif
1273}
1274
1be7fcb8
AB
1275static int64_t tcg_get_icount_limit(void)
1276{
1277 int64_t deadline;
1278
1279 if (replay_mode != REPLAY_MODE_PLAY) {
1280 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
1281
1282 /* Maintain prior (possibly buggy) behaviour where if no deadline
1283 * was set (as there is no QEMU_CLOCK_VIRTUAL timer) or it is more than
1284 * INT32_MAX nanoseconds ahead, we still use INT32_MAX
1285 * nanoseconds.
1286 */
1287 if ((deadline < 0) || (deadline > INT32_MAX)) {
1288 deadline = INT32_MAX;
1289 }
1290
1291 return qemu_icount_round(deadline);
1292 } else {
1293 return replay_get_instructions();
1294 }
1295}
1296
12e9700d
AB
1297static void handle_icount_deadline(void)
1298{
6b8f0187 1299 assert(qemu_in_vcpu_thread());
12e9700d
AB
1300 if (use_icount) {
1301 int64_t deadline =
1302 qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
1303
1304 if (deadline == 0) {
6b8f0187 1305 /* Wake up other AioContexts. */
12e9700d 1306 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
6b8f0187 1307 qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
12e9700d
AB
1308 }
1309 }
1310}
1311
05248382 1312static void prepare_icount_for_run(CPUState *cpu)
1be7fcb8 1313{
1be7fcb8 1314 if (use_icount) {
eda5f7c6 1315 int insns_left;
05248382
AB
1316
1317 /* These should always be cleared by process_icount_data after
1318 * each vCPU execution. However u16.high can be raised
1319 * asynchronously by cpu_exit/cpu_interrupt/tcg_handle_interrupt
1320 */
1321 g_assert(cpu->icount_decr.u16.low == 0);
1322 g_assert(cpu->icount_extra == 0);
1323
eda5f7c6
AB
1324 cpu->icount_budget = tcg_get_icount_limit();
1325 insns_left = MIN(0xffff, cpu->icount_budget);
1326 cpu->icount_decr.u16.low = insns_left;
1327 cpu->icount_extra = cpu->icount_budget - insns_left;
d759c951
AB
1328
1329 replay_mutex_lock();
1be7fcb8 1330 }
05248382
AB
1331}
1332
1333static void process_icount_data(CPUState *cpu)
1334{
1be7fcb8 1335 if (use_icount) {
e4cd9657 1336 /* Account for executed instructions */
512d3c80 1337 cpu_update_icount(cpu);
05248382
AB
1338
1339 /* Reset the counters */
1340 cpu->icount_decr.u16.low = 0;
1be7fcb8 1341 cpu->icount_extra = 0;
e4cd9657
AB
1342 cpu->icount_budget = 0;
1343
1be7fcb8 1344 replay_account_executed_instructions();
d759c951
AB
1345
1346 replay_mutex_unlock();
1be7fcb8 1347 }
05248382
AB
1348}
1349
1350
1351static int tcg_cpu_exec(CPUState *cpu)
1352{
1353 int ret;
1354#ifdef CONFIG_PROFILER
1355 int64_t ti;
1356#endif
1357
1358#ifdef CONFIG_PROFILER
1359 ti = profile_getclock();
1360#endif
05248382
AB
1361 cpu_exec_start(cpu);
1362 ret = cpu_exec(cpu);
1363 cpu_exec_end(cpu);
05248382
AB
1364#ifdef CONFIG_PROFILER
1365 tcg_time += profile_getclock() - ti;
1366#endif
1be7fcb8
AB
1367 return ret;
1368}
1369
c93bbbef
AB
1370/* Destroy any remaining vCPUs which have been unplugged and have
1371 * finished running
1372 */
1373static void deal_with_unplugged_cpus(void)
1be7fcb8 1374{
c93bbbef 1375 CPUState *cpu;
1be7fcb8 1376
c93bbbef
AB
1377 CPU_FOREACH(cpu) {
1378 if (cpu->unplug && !cpu_can_run(cpu)) {
1379 qemu_tcg_destroy_vcpu(cpu);
1380 cpu->created = false;
1381 qemu_cond_signal(&qemu_cpu_cond);
1be7fcb8
AB
1382 break;
1383 }
1384 }
1be7fcb8 1385}
bdb7ca67 1386
6546706d
AB
1387/* Single-threaded TCG
1388 *
1389 * In the single-threaded case each vCPU is simulated in turn. If
1390 * there is more than a single vCPU we create a simple timer to kick
1391 * the vCPU and ensure we don't get stuck in a tight loop in one vCPU.
1392 * This is done explicitly rather than relying on side-effects
1393 * elsewhere.
1394 */
1395
37257942 1396static void *qemu_tcg_rr_cpu_thread_fn(void *arg)
296af7c9 1397{
c3586ba7 1398 CPUState *cpu = arg;
296af7c9 1399
ab28bd23 1400 rcu_register_thread();
3468b59e 1401 tcg_register_thread();
ab28bd23 1402
2e7f7a3c 1403 qemu_mutex_lock_iothread();
814e612e 1404 qemu_thread_get_self(cpu->thread);
296af7c9 1405
5a9c973b
DH
1406 cpu->thread_id = qemu_get_thread_id();
1407 cpu->created = true;
1408 cpu->can_do_io = 1;
296af7c9
BS
1409 qemu_cond_signal(&qemu_cpu_cond);
1410
fa7d1867 1411 /* wait for initial kick-off after machine start */
c28e399c 1412 while (first_cpu->stopped) {
d5f8d613 1413 qemu_cond_wait(first_cpu->halt_cond, &qemu_global_mutex);
8e564b4e
JK
1414
1415 /* process any pending work */
bdc44640 1416 CPU_FOREACH(cpu) {
37257942 1417 current_cpu = cpu;
182735ef 1418 qemu_wait_io_event_common(cpu);
8e564b4e 1419 }
0ab07c62 1420 }
296af7c9 1421
6546706d
AB
1422 start_tcg_kick_timer();
1423
c93bbbef
AB
1424 cpu = first_cpu;
1425
e5143e30
AB
1426 /* process any pending work */
1427 cpu->exit_request = 1;
1428
296af7c9 1429 while (1) {
d759c951
AB
1430 qemu_mutex_unlock_iothread();
1431 replay_mutex_lock();
1432 qemu_mutex_lock_iothread();
c93bbbef
AB
1433 /* Account partial waits to QEMU_CLOCK_VIRTUAL. */
1434 qemu_account_warp_timer();
1435
6b8f0187
PB
1436 /* Run the timers here. This is much more efficient than
1437 * waking up the I/O thread and waiting for completion.
1438 */
1439 handle_icount_deadline();
1440
d759c951
AB
1441 replay_mutex_unlock();
1442
c93bbbef
AB
1443 if (!cpu) {
1444 cpu = first_cpu;
1445 }
1446
e5143e30
AB
1447 while (cpu && !cpu->queued_work_first && !cpu->exit_request) {
1448
791158d9 1449 atomic_mb_set(&tcg_current_rr_cpu, cpu);
37257942 1450 current_cpu = cpu;
c93bbbef
AB
1451
1452 qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
1453 (cpu->singlestep_enabled & SSTEP_NOTIMER) == 0);
1454
1455 if (cpu_can_run(cpu)) {
1456 int r;
05248382 1457
d759c951 1458 qemu_mutex_unlock_iothread();
05248382
AB
1459 prepare_icount_for_run(cpu);
1460
c93bbbef 1461 r = tcg_cpu_exec(cpu);
05248382
AB
1462
1463 process_icount_data(cpu);
d759c951 1464 qemu_mutex_lock_iothread();
05248382 1465
c93bbbef
AB
1466 if (r == EXCP_DEBUG) {
1467 cpu_handle_guest_debug(cpu);
1468 break;
08e73c48
PK
1469 } else if (r == EXCP_ATOMIC) {
1470 qemu_mutex_unlock_iothread();
1471 cpu_exec_step_atomic(cpu);
1472 qemu_mutex_lock_iothread();
1473 break;
c93bbbef 1474 }
37257942 1475 } else if (cpu->stop) {
c93bbbef
AB
1476 if (cpu->unplug) {
1477 cpu = CPU_NEXT(cpu);
1478 }
1479 break;
1480 }
1481
e5143e30
AB
1482 cpu = CPU_NEXT(cpu);
1483 } /* while (cpu && !cpu->exit_request).. */
1484
791158d9
AB
1485 /* Does not need atomic_mb_set because a spurious wakeup is okay. */
1486 atomic_set(&tcg_current_rr_cpu, NULL);
c93bbbef 1487
e5143e30
AB
1488 if (cpu && cpu->exit_request) {
1489 atomic_mb_set(&cpu->exit_request, 0);
1490 }
ac70aafc 1491
db08b687 1492 qemu_tcg_rr_wait_io_event(cpu ? cpu : QTAILQ_FIRST(&cpus));
c93bbbef 1493 deal_with_unplugged_cpus();
296af7c9
BS
1494 }
1495
9b0605f9 1496 rcu_unregister_thread();
296af7c9
BS
1497 return NULL;
1498}
1499
b0cb0a66
VP
1500static void *qemu_hax_cpu_thread_fn(void *arg)
1501{
1502 CPUState *cpu = arg;
1503 int r;
b3d3a426 1504
9857c2d2 1505 rcu_register_thread();
b3d3a426 1506 qemu_mutex_lock_iothread();
b0cb0a66 1507 qemu_thread_get_self(cpu->thread);
b0cb0a66
VP
1508
1509 cpu->thread_id = qemu_get_thread_id();
1510 cpu->created = true;
1511 cpu->halted = 0;
1512 current_cpu = cpu;
1513
1514 hax_init_vcpu(cpu);
1515 qemu_cond_signal(&qemu_cpu_cond);
1516
9857c2d2 1517 do {
b0cb0a66
VP
1518 if (cpu_can_run(cpu)) {
1519 r = hax_smp_cpu_exec(cpu);
1520 if (r == EXCP_DEBUG) {
1521 cpu_handle_guest_debug(cpu);
1522 }
1523 }
1524
db08b687 1525 qemu_wait_io_event(cpu);
9857c2d2
PB
1526 } while (!cpu->unplug || cpu_can_run(cpu));
1527 rcu_unregister_thread();
b0cb0a66
VP
1528 return NULL;
1529}
1530
c97d6d2c
SAGDR
1531/* The HVF-specific vCPU thread function. This one should only run when the host
1532 * CPU supports the VMX "unrestricted guest" feature. */
1533static void *qemu_hvf_cpu_thread_fn(void *arg)
1534{
1535 CPUState *cpu = arg;
1536
1537 int r;
1538
1539 assert(hvf_enabled());
1540
1541 rcu_register_thread();
1542
1543 qemu_mutex_lock_iothread();
1544 qemu_thread_get_self(cpu->thread);
1545
1546 cpu->thread_id = qemu_get_thread_id();
1547 cpu->can_do_io = 1;
1548 current_cpu = cpu;
1549
1550 hvf_init_vcpu(cpu);
1551
1552 /* signal CPU creation */
1553 cpu->created = true;
1554 qemu_cond_signal(&qemu_cpu_cond);
1555
1556 do {
1557 if (cpu_can_run(cpu)) {
1558 r = hvf_vcpu_exec(cpu);
1559 if (r == EXCP_DEBUG) {
1560 cpu_handle_guest_debug(cpu);
1561 }
1562 }
db08b687 1563 qemu_wait_io_event(cpu);
c97d6d2c
SAGDR
1564 } while (!cpu->unplug || cpu_can_run(cpu));
1565
1566 hvf_vcpu_destroy(cpu);
1567 cpu->created = false;
1568 qemu_cond_signal(&qemu_cpu_cond);
1569 qemu_mutex_unlock_iothread();
8178e637 1570 rcu_unregister_thread();
c97d6d2c
SAGDR
1571 return NULL;
1572}
1573
19306806
JTV
1574static void *qemu_whpx_cpu_thread_fn(void *arg)
1575{
1576 CPUState *cpu = arg;
1577 int r;
1578
1579 rcu_register_thread();
1580
1581 qemu_mutex_lock_iothread();
1582 qemu_thread_get_self(cpu->thread);
1583 cpu->thread_id = qemu_get_thread_id();
1584 current_cpu = cpu;
1585
1586 r = whpx_init_vcpu(cpu);
1587 if (r < 0) {
1588 fprintf(stderr, "whpx_init_vcpu failed: %s\n", strerror(-r));
1589 exit(1);
1590 }
1591
1592 /* signal CPU creation */
1593 cpu->created = true;
1594 qemu_cond_signal(&qemu_cpu_cond);
1595
1596 do {
1597 if (cpu_can_run(cpu)) {
1598 r = whpx_vcpu_exec(cpu);
1599 if (r == EXCP_DEBUG) {
1600 cpu_handle_guest_debug(cpu);
1601 }
1602 }
1603 while (cpu_thread_is_idle(cpu)) {
1604 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
1605 }
1606 qemu_wait_io_event_common(cpu);
1607 } while (!cpu->unplug || cpu_can_run(cpu));
1608
1609 whpx_destroy_vcpu(cpu);
1610 cpu->created = false;
1611 qemu_cond_signal(&qemu_cpu_cond);
1612 qemu_mutex_unlock_iothread();
1613 rcu_unregister_thread();
c97d6d2c
SAGDR
1614 return NULL;
1615}
1616
b0cb0a66
VP
1617#ifdef _WIN32
1618static void CALLBACK dummy_apc_func(ULONG_PTR unused)
1619{
1620}
1621#endif
1622
37257942
AB
1623/* Multi-threaded TCG
1624 *
1625 * In the multi-threaded case each vCPU has its own thread. The TLS
1626 * variable current_cpu can be used deep in the code to find the
1627 * current CPUState for a given thread.
1628 */
1629
1630static void *qemu_tcg_cpu_thread_fn(void *arg)
1631{
1632 CPUState *cpu = arg;
1633
bf51c720
AB
1634 g_assert(!use_icount);
1635
37257942 1636 rcu_register_thread();
3468b59e 1637 tcg_register_thread();
37257942
AB
1638
1639 qemu_mutex_lock_iothread();
1640 qemu_thread_get_self(cpu->thread);
1641
1642 cpu->thread_id = qemu_get_thread_id();
1643 cpu->created = true;
1644 cpu->can_do_io = 1;
1645 current_cpu = cpu;
1646 qemu_cond_signal(&qemu_cpu_cond);
1647
1648 /* process any pending work */
1649 cpu->exit_request = 1;
1650
54961aac 1651 do {
37257942
AB
1652 if (cpu_can_run(cpu)) {
1653 int r;
d759c951 1654 qemu_mutex_unlock_iothread();
37257942 1655 r = tcg_cpu_exec(cpu);
d759c951 1656 qemu_mutex_lock_iothread();
37257942
AB
1657 switch (r) {
1658 case EXCP_DEBUG:
1659 cpu_handle_guest_debug(cpu);
1660 break;
1661 case EXCP_HALTED:
1662 /* during start-up the vCPU is reset and the thread is
1663 * kicked several times. If we don't ensure we go back
1664 * to sleep in the halted state we won't cleanly
1665 * start-up when the vCPU is enabled.
1666 *
1667 * cpu->halted should ensure we sleep in wait_io_event
1668 */
1669 g_assert(cpu->halted);
1670 break;
08e73c48
PK
1671 case EXCP_ATOMIC:
1672 qemu_mutex_unlock_iothread();
1673 cpu_exec_step_atomic(cpu);
1674 qemu_mutex_lock_iothread();
37257942
AB
1675 default:
1676 /* Ignore everything else? */
1677 break;
1678 }
1679 }
1680
37257942 1681 atomic_mb_set(&cpu->exit_request, 0);
db08b687 1682 qemu_wait_io_event(cpu);
9b0605f9 1683 } while (!cpu->unplug || cpu_can_run(cpu));
37257942 1684
9b0605f9
PB
1685 qemu_tcg_destroy_vcpu(cpu);
1686 cpu->created = false;
1687 qemu_cond_signal(&qemu_cpu_cond);
1688 qemu_mutex_unlock_iothread();
1689 rcu_unregister_thread();
37257942
AB
1690 return NULL;
1691}
1692
2ff09a40 1693static void qemu_cpu_kick_thread(CPUState *cpu)
cc015e9a
PB
1694{
1695#ifndef _WIN32
1696 int err;
1697
e0c38211
PB
1698 if (cpu->thread_kicked) {
1699 return;
9102deda 1700 }
e0c38211 1701 cpu->thread_kicked = true;
814e612e 1702 err = pthread_kill(cpu->thread->thread, SIG_IPI);
cc015e9a
PB
1703 if (err) {
1704 fprintf(stderr, "qemu:%s: %s", __func__, strerror(err));
1705 exit(1);
1706 }
1707#else /* _WIN32 */
b0cb0a66 1708 if (!qemu_cpu_is_self(cpu)) {
19306806
JTV
1709 if (whpx_enabled()) {
1710 whpx_vcpu_kick(cpu);
1711 } else if (!QueueUserAPC(dummy_apc_func, cpu->hThread, 0)) {
b0cb0a66
VP
1712 fprintf(stderr, "%s: QueueUserAPC failed with error %lu\n",
1713 __func__, GetLastError());
1714 exit(1);
1715 }
1716 }
e0c38211
PB
1717#endif
1718}
ed9164a3 1719
c08d7424 1720void qemu_cpu_kick(CPUState *cpu)
296af7c9 1721{
f5c121b8 1722 qemu_cond_broadcast(cpu->halt_cond);
e0c38211 1723 if (tcg_enabled()) {
791158d9 1724 cpu_exit(cpu);
37257942 1725 /* NOP unless doing single-thread RR */
791158d9 1726 qemu_cpu_kick_rr_cpu();
e0c38211 1727 } else {
b0cb0a66
VP
1728 if (hax_enabled()) {
1729 /*
1730 * FIXME: race condition with the exit_request check in
1731 * hax_vcpu_hax_exec
1732 */
1733 cpu->exit_request = 1;
1734 }
e0c38211
PB
1735 qemu_cpu_kick_thread(cpu);
1736 }
296af7c9
BS
1737}
1738
46d62fac 1739void qemu_cpu_kick_self(void)
296af7c9 1740{
4917cf44 1741 assert(current_cpu);
9102deda 1742 qemu_cpu_kick_thread(current_cpu);
296af7c9
BS
1743}
1744
60e82579 1745bool qemu_cpu_is_self(CPUState *cpu)
296af7c9 1746{
814e612e 1747 return qemu_thread_is_self(cpu->thread);
296af7c9
BS
1748}
1749
79e2b9ae 1750bool qemu_in_vcpu_thread(void)
aa723c23 1751{
4917cf44 1752 return current_cpu && qemu_cpu_is_self(current_cpu);
aa723c23
JQ
1753}
1754
afbe7053
PB
1755static __thread bool iothread_locked = false;
1756
1757bool qemu_mutex_iothread_locked(void)
1758{
1759 return iothread_locked;
1760}
1761
296af7c9
BS
1762void qemu_mutex_lock_iothread(void)
1763{
8d04fb55
JK
1764 g_assert(!qemu_mutex_iothread_locked());
1765 qemu_mutex_lock(&qemu_global_mutex);
afbe7053 1766 iothread_locked = true;
296af7c9
BS
1767}
1768
1769void qemu_mutex_unlock_iothread(void)
1770{
8d04fb55 1771 g_assert(qemu_mutex_iothread_locked());
afbe7053 1772 iothread_locked = false;
296af7c9
BS
1773 qemu_mutex_unlock(&qemu_global_mutex);
1774}
1775
e8faee06 1776static bool all_vcpus_paused(void)
296af7c9 1777{
bdc44640 1778 CPUState *cpu;
296af7c9 1779
bdc44640 1780 CPU_FOREACH(cpu) {
182735ef 1781 if (!cpu->stopped) {
e8faee06 1782 return false;
0ab07c62 1783 }
296af7c9
BS
1784 }
1785
e8faee06 1786 return true;
296af7c9
BS
1787}
1788
1789void pause_all_vcpus(void)
1790{
bdc44640 1791 CPUState *cpu;
296af7c9 1792
40daca54 1793 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, false);
bdc44640 1794 CPU_FOREACH(cpu) {
ebd05fea
DH
1795 if (qemu_cpu_is_self(cpu)) {
1796 qemu_cpu_stop(cpu, true);
1797 } else {
1798 cpu->stop = true;
1799 qemu_cpu_kick(cpu);
1800 }
d798e974
JK
1801 }
1802
d759c951
AB
1803 /* We need to drop the replay_lock so any vCPU threads woken up
1804 * can finish their replay tasks
1805 */
1806 replay_mutex_unlock();
1807
296af7c9 1808 while (!all_vcpus_paused()) {
be7d6c57 1809 qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex);
bdc44640 1810 CPU_FOREACH(cpu) {
182735ef 1811 qemu_cpu_kick(cpu);
296af7c9
BS
1812 }
1813 }
d759c951
AB
1814
1815 qemu_mutex_unlock_iothread();
1816 replay_mutex_lock();
1817 qemu_mutex_lock_iothread();
296af7c9
BS
1818}
1819
2993683b
IM
1820void cpu_resume(CPUState *cpu)
1821{
1822 cpu->stop = false;
1823 cpu->stopped = false;
1824 qemu_cpu_kick(cpu);
1825}
1826
296af7c9
BS
1827void resume_all_vcpus(void)
1828{
bdc44640 1829 CPUState *cpu;
296af7c9 1830
40daca54 1831 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true);
bdc44640 1832 CPU_FOREACH(cpu) {
182735ef 1833 cpu_resume(cpu);
296af7c9
BS
1834 }
1835}
1836
dbadee4f 1837void cpu_remove_sync(CPUState *cpu)
4c055ab5
GZ
1838{
1839 cpu->stop = true;
1840 cpu->unplug = true;
1841 qemu_cpu_kick(cpu);
dbadee4f
PB
1842 qemu_mutex_unlock_iothread();
1843 qemu_thread_join(cpu->thread);
1844 qemu_mutex_lock_iothread();
2c579042
BR
1845}
1846
4900116e
DDAG
1847/* For temporary buffers for forming a name */
1848#define VCPU_THREAD_NAME_SIZE 16
1849
e5ab30a2 1850static void qemu_tcg_init_vcpu(CPUState *cpu)
296af7c9 1851{
4900116e 1852 char thread_name[VCPU_THREAD_NAME_SIZE];
37257942
AB
1853 static QemuCond *single_tcg_halt_cond;
1854 static QemuThread *single_tcg_cpu_thread;
e8feb96f
EC
1855 static int tcg_region_inited;
1856
1857 /*
1858 * Initialize TCG regions--once. Now is a good time, because:
1859 * (1) TCG's init context, prologue and target globals have been set up.
1860 * (2) qemu_tcg_mttcg_enabled() works now (TCG init code runs before the
1861 * -accel flag is processed, so the check doesn't work then).
1862 */
1863 if (!tcg_region_inited) {
1864 tcg_region_inited = 1;
1865 tcg_region_init();
1866 }
4900116e 1867
37257942 1868 if (qemu_tcg_mttcg_enabled() || !single_tcg_cpu_thread) {
814e612e 1869 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1870 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1871 qemu_cond_init(cpu->halt_cond);
37257942
AB
1872
1873 if (qemu_tcg_mttcg_enabled()) {
1874 /* create a thread per vCPU with TCG (MTTCG) */
1875 parallel_cpus = true;
1876 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
4900116e 1877 cpu->cpu_index);
37257942
AB
1878
1879 qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
1880 cpu, QEMU_THREAD_JOINABLE);
1881
1882 } else {
1883 /* share a single thread for all cpus with TCG */
1884 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "ALL CPUs/TCG");
1885 qemu_thread_create(cpu->thread, thread_name,
1886 qemu_tcg_rr_cpu_thread_fn,
1887 cpu, QEMU_THREAD_JOINABLE);
1888
1889 single_tcg_halt_cond = cpu->halt_cond;
1890 single_tcg_cpu_thread = cpu->thread;
1891 }
1ecf47bf 1892#ifdef _WIN32
814e612e 1893 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1ecf47bf 1894#endif
296af7c9 1895 } else {
37257942
AB
1896 /* For non-MTTCG cases we share the thread */
1897 cpu->thread = single_tcg_cpu_thread;
1898 cpu->halt_cond = single_tcg_halt_cond;
a342173a
DH
1899 cpu->thread_id = first_cpu->thread_id;
1900 cpu->can_do_io = 1;
1901 cpu->created = true;
296af7c9
BS
1902 }
1903}
1904
b0cb0a66
VP
1905static void qemu_hax_start_vcpu(CPUState *cpu)
1906{
1907 char thread_name[VCPU_THREAD_NAME_SIZE];
1908
1909 cpu->thread = g_malloc0(sizeof(QemuThread));
1910 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1911 qemu_cond_init(cpu->halt_cond);
1912
1913 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HAX",
1914 cpu->cpu_index);
1915 qemu_thread_create(cpu->thread, thread_name, qemu_hax_cpu_thread_fn,
1916 cpu, QEMU_THREAD_JOINABLE);
1917#ifdef _WIN32
1918 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1919#endif
b0cb0a66
VP
1920}
1921
48a106bd 1922static void qemu_kvm_start_vcpu(CPUState *cpu)
296af7c9 1923{
4900116e
DDAG
1924 char thread_name[VCPU_THREAD_NAME_SIZE];
1925
814e612e 1926 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1927 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1928 qemu_cond_init(cpu->halt_cond);
4900116e
DDAG
1929 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
1930 cpu->cpu_index);
1931 qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn,
1932 cpu, QEMU_THREAD_JOINABLE);
296af7c9
BS
1933}
1934
c97d6d2c
SAGDR
1935static void qemu_hvf_start_vcpu(CPUState *cpu)
1936{
1937 char thread_name[VCPU_THREAD_NAME_SIZE];
1938
1939 /* HVF currently does not support TCG, and only runs in
1940 * unrestricted-guest mode. */
1941 assert(hvf_enabled());
1942
1943 cpu->thread = g_malloc0(sizeof(QemuThread));
1944 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1945 qemu_cond_init(cpu->halt_cond);
1946
1947 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HVF",
1948 cpu->cpu_index);
1949 qemu_thread_create(cpu->thread, thread_name, qemu_hvf_cpu_thread_fn,
1950 cpu, QEMU_THREAD_JOINABLE);
c97d6d2c
SAGDR
1951}
1952
19306806
JTV
1953static void qemu_whpx_start_vcpu(CPUState *cpu)
1954{
1955 char thread_name[VCPU_THREAD_NAME_SIZE];
1956
1957 cpu->thread = g_malloc0(sizeof(QemuThread));
1958 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1959 qemu_cond_init(cpu->halt_cond);
1960 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/WHPX",
1961 cpu->cpu_index);
1962 qemu_thread_create(cpu->thread, thread_name, qemu_whpx_cpu_thread_fn,
1963 cpu, QEMU_THREAD_JOINABLE);
1964#ifdef _WIN32
1965 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1966#endif
19306806
JTV
1967}
1968
10a9021d 1969static void qemu_dummy_start_vcpu(CPUState *cpu)
c7f0f3b1 1970{
4900116e
DDAG
1971 char thread_name[VCPU_THREAD_NAME_SIZE];
1972
814e612e 1973 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1974 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1975 qemu_cond_init(cpu->halt_cond);
4900116e
DDAG
1976 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
1977 cpu->cpu_index);
1978 qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, cpu,
c7f0f3b1 1979 QEMU_THREAD_JOINABLE);
c7f0f3b1
AL
1980}
1981
c643bed9 1982void qemu_init_vcpu(CPUState *cpu)
296af7c9 1983{
ce3960eb
AF
1984 cpu->nr_cores = smp_cores;
1985 cpu->nr_threads = smp_threads;
f324e766 1986 cpu->stopped = true;
56943e8c
PM
1987
1988 if (!cpu->as) {
1989 /* If the target cpu hasn't set up any address spaces itself,
1990 * give it the default one.
1991 */
12ebc9a7 1992 cpu->num_ases = 1;
80ceb07a 1993 cpu_address_space_init(cpu, 0, "cpu-memory", cpu->memory);
56943e8c
PM
1994 }
1995
0ab07c62 1996 if (kvm_enabled()) {
48a106bd 1997 qemu_kvm_start_vcpu(cpu);
b0cb0a66
VP
1998 } else if (hax_enabled()) {
1999 qemu_hax_start_vcpu(cpu);
c97d6d2c
SAGDR
2000 } else if (hvf_enabled()) {
2001 qemu_hvf_start_vcpu(cpu);
c7f0f3b1 2002 } else if (tcg_enabled()) {
e5ab30a2 2003 qemu_tcg_init_vcpu(cpu);
19306806
JTV
2004 } else if (whpx_enabled()) {
2005 qemu_whpx_start_vcpu(cpu);
c7f0f3b1 2006 } else {
10a9021d 2007 qemu_dummy_start_vcpu(cpu);
0ab07c62 2008 }
81e96311
DH
2009
2010 while (!cpu->created) {
2011 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
2012 }
296af7c9
BS
2013}
2014
b4a3d965 2015void cpu_stop_current(void)
296af7c9 2016{
4917cf44 2017 if (current_cpu) {
ebd05fea 2018 qemu_cpu_stop(current_cpu, true);
b4a3d965 2019 }
296af7c9
BS
2020}
2021
56983463 2022int vm_stop(RunState state)
296af7c9 2023{
aa723c23 2024 if (qemu_in_vcpu_thread()) {
74892d24 2025 qemu_system_vmstop_request_prepare();
1dfb4dd9 2026 qemu_system_vmstop_request(state);
296af7c9
BS
2027 /*
2028 * FIXME: should not return to device code in case
2029 * vm_stop() has been requested.
2030 */
b4a3d965 2031 cpu_stop_current();
56983463 2032 return 0;
296af7c9 2033 }
56983463 2034
4486e89c 2035 return do_vm_stop(state, true);
296af7c9
BS
2036}
2037
2d76e823
CI
2038/**
2039 * Prepare for (re)starting the VM.
2040 * Returns -1 if the vCPUs are not to be restarted (e.g. if they are already
2041 * running or in case of an error condition), 0 otherwise.
2042 */
2043int vm_prepare_start(void)
2044{
2045 RunState requested;
2d76e823
CI
2046
2047 qemu_vmstop_requested(&requested);
2048 if (runstate_is_running() && requested == RUN_STATE__MAX) {
2049 return -1;
2050 }
2051
2052 /* Ensure that a STOP/RESUME pair of events is emitted if a
2053 * vmstop request was pending. The BLOCK_IO_ERROR event, for
2054 * example, according to documentation is always followed by
2055 * the STOP event.
2056 */
2057 if (runstate_is_running()) {
2058 qapi_event_send_stop(&error_abort);
f056158d
MA
2059 qapi_event_send_resume(&error_abort);
2060 return -1;
2d76e823
CI
2061 }
2062
2063 /* We are sending this now, but the CPUs will be resumed shortly later */
2064 qapi_event_send_resume(&error_abort);
f056158d
MA
2065
2066 replay_enable_events();
2067 cpu_enable_ticks();
2068 runstate_set(RUN_STATE_RUNNING);
2069 vm_state_notify(1, RUN_STATE_RUNNING);
2070 return 0;
2d76e823
CI
2071}
2072
2073void vm_start(void)
2074{
2075 if (!vm_prepare_start()) {
2076 resume_all_vcpus();
2077 }
2078}
2079
8a9236f1
LC
2080/* does a state transition even if the VM is already stopped,
2081 current state is forgotten forever */
56983463 2082int vm_stop_force_state(RunState state)
8a9236f1
LC
2083{
2084 if (runstate_is_running()) {
56983463 2085 return vm_stop(state);
8a9236f1
LC
2086 } else {
2087 runstate_set(state);
b2780d32
WC
2088
2089 bdrv_drain_all();
594a45ce
KW
2090 /* Make sure to return an error if the flush in a previous vm_stop()
2091 * failed. */
22af08ea 2092 return bdrv_flush_all();
8a9236f1
LC
2093 }
2094}
2095
9a78eead 2096void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg)
262353cb
BS
2097{
2098 /* XXX: implement xxx_cpu_list for targets that still miss it */
e916cbf8
PM
2099#if defined(cpu_list)
2100 cpu_list(f, cpu_fprintf);
262353cb
BS
2101#endif
2102}
de0b36b6
LC
2103
2104CpuInfoList *qmp_query_cpus(Error **errp)
2105{
afed5a5a
IM
2106 MachineState *ms = MACHINE(qdev_get_machine());
2107 MachineClass *mc = MACHINE_GET_CLASS(ms);
de0b36b6 2108 CpuInfoList *head = NULL, *cur_item = NULL;
182735ef 2109 CPUState *cpu;
de0b36b6 2110
bdc44640 2111 CPU_FOREACH(cpu) {
de0b36b6 2112 CpuInfoList *info;
182735ef
AF
2113#if defined(TARGET_I386)
2114 X86CPU *x86_cpu = X86_CPU(cpu);
2115 CPUX86State *env = &x86_cpu->env;
2116#elif defined(TARGET_PPC)
2117 PowerPCCPU *ppc_cpu = POWERPC_CPU(cpu);
2118 CPUPPCState *env = &ppc_cpu->env;
2119#elif defined(TARGET_SPARC)
2120 SPARCCPU *sparc_cpu = SPARC_CPU(cpu);
2121 CPUSPARCState *env = &sparc_cpu->env;
25fa194b
MC
2122#elif defined(TARGET_RISCV)
2123 RISCVCPU *riscv_cpu = RISCV_CPU(cpu);
2124 CPURISCVState *env = &riscv_cpu->env;
182735ef
AF
2125#elif defined(TARGET_MIPS)
2126 MIPSCPU *mips_cpu = MIPS_CPU(cpu);
2127 CPUMIPSState *env = &mips_cpu->env;
48e06fe0
BK
2128#elif defined(TARGET_TRICORE)
2129 TriCoreCPU *tricore_cpu = TRICORE_CPU(cpu);
2130 CPUTriCoreState *env = &tricore_cpu->env;
9d0306df
VM
2131#elif defined(TARGET_S390X)
2132 S390CPU *s390_cpu = S390_CPU(cpu);
2133 CPUS390XState *env = &s390_cpu->env;
182735ef 2134#endif
de0b36b6 2135
cb446eca 2136 cpu_synchronize_state(cpu);
de0b36b6
LC
2137
2138 info = g_malloc0(sizeof(*info));
2139 info->value = g_malloc0(sizeof(*info->value));
55e5c285 2140 info->value->CPU = cpu->cpu_index;
182735ef 2141 info->value->current = (cpu == first_cpu);
259186a7 2142 info->value->halted = cpu->halted;
58f88d4b 2143 info->value->qom_path = object_get_canonical_path(OBJECT(cpu));
9f09e18a 2144 info->value->thread_id = cpu->thread_id;
de0b36b6 2145#if defined(TARGET_I386)
86f4b687 2146 info->value->arch = CPU_INFO_ARCH_X86;
544a3731 2147 info->value->u.x86.pc = env->eip + env->segs[R_CS].base;
de0b36b6 2148#elif defined(TARGET_PPC)
86f4b687 2149 info->value->arch = CPU_INFO_ARCH_PPC;
544a3731 2150 info->value->u.ppc.nip = env->nip;
de0b36b6 2151#elif defined(TARGET_SPARC)
86f4b687 2152 info->value->arch = CPU_INFO_ARCH_SPARC;
544a3731
EB
2153 info->value->u.q_sparc.pc = env->pc;
2154 info->value->u.q_sparc.npc = env->npc;
de0b36b6 2155#elif defined(TARGET_MIPS)
86f4b687 2156 info->value->arch = CPU_INFO_ARCH_MIPS;
544a3731 2157 info->value->u.q_mips.PC = env->active_tc.PC;
48e06fe0 2158#elif defined(TARGET_TRICORE)
86f4b687 2159 info->value->arch = CPU_INFO_ARCH_TRICORE;
544a3731 2160 info->value->u.tricore.PC = env->PC;
9d0306df
VM
2161#elif defined(TARGET_S390X)
2162 info->value->arch = CPU_INFO_ARCH_S390;
2163 info->value->u.s390.cpu_state = env->cpu_state;
25fa194b
MC
2164#elif defined(TARGET_RISCV)
2165 info->value->arch = CPU_INFO_ARCH_RISCV;
2166 info->value->u.riscv.pc = env->pc;
86f4b687
EB
2167#else
2168 info->value->arch = CPU_INFO_ARCH_OTHER;
de0b36b6 2169#endif
afed5a5a
IM
2170 info->value->has_props = !!mc->cpu_index_to_instance_props;
2171 if (info->value->has_props) {
2172 CpuInstanceProperties *props;
2173 props = g_malloc0(sizeof(*props));
2174 *props = mc->cpu_index_to_instance_props(ms, cpu->cpu_index);
2175 info->value->props = props;
2176 }
de0b36b6
LC
2177
2178 /* XXX: waiting for the qapi to support GSList */
2179 if (!cur_item) {
2180 head = cur_item = info;
2181 } else {
2182 cur_item->next = info;
2183 cur_item = info;
2184 }
2185 }
2186
2187 return head;
2188}
0cfd6a9a 2189
daa9d2bc
LE
2190static CpuInfoArch sysemu_target_to_cpuinfo_arch(SysEmuTarget target)
2191{
2192 /*
2193 * The @SysEmuTarget -> @CpuInfoArch mapping below is based on the
2194 * TARGET_ARCH -> TARGET_BASE_ARCH mapping in the "configure" script.
2195 */
2196 switch (target) {
2197 case SYS_EMU_TARGET_I386:
2198 case SYS_EMU_TARGET_X86_64:
2199 return CPU_INFO_ARCH_X86;
2200
2201 case SYS_EMU_TARGET_PPC:
2202 case SYS_EMU_TARGET_PPCEMB:
2203 case SYS_EMU_TARGET_PPC64:
2204 return CPU_INFO_ARCH_PPC;
2205
2206 case SYS_EMU_TARGET_SPARC:
2207 case SYS_EMU_TARGET_SPARC64:
2208 return CPU_INFO_ARCH_SPARC;
2209
2210 case SYS_EMU_TARGET_MIPS:
2211 case SYS_EMU_TARGET_MIPSEL:
2212 case SYS_EMU_TARGET_MIPS64:
2213 case SYS_EMU_TARGET_MIPS64EL:
2214 return CPU_INFO_ARCH_MIPS;
2215
2216 case SYS_EMU_TARGET_TRICORE:
2217 return CPU_INFO_ARCH_TRICORE;
2218
2219 case SYS_EMU_TARGET_S390X:
2220 return CPU_INFO_ARCH_S390;
2221
2222 case SYS_EMU_TARGET_RISCV32:
2223 case SYS_EMU_TARGET_RISCV64:
2224 return CPU_INFO_ARCH_RISCV;
2225
2226 default:
2227 return CPU_INFO_ARCH_OTHER;
2228 }
2229}
2230
2231static void cpustate_to_cpuinfo_s390(CpuInfoS390 *info, const CPUState *cpu)
2232{
2233#ifdef TARGET_S390X
2234 S390CPU *s390_cpu = S390_CPU(cpu);
2235 CPUS390XState *env = &s390_cpu->env;
2236
2237 info->cpu_state = env->cpu_state;
2238#else
2239 abort();
2240#endif
2241}
2242
ce74ee3d
LC
2243/*
2244 * fast means: we NEVER interrupt vCPU threads to retrieve
2245 * information from KVM.
2246 */
2247CpuInfoFastList *qmp_query_cpus_fast(Error **errp)
2248{
2249 MachineState *ms = MACHINE(qdev_get_machine());
2250 MachineClass *mc = MACHINE_GET_CLASS(ms);
2251 CpuInfoFastList *head = NULL, *cur_item = NULL;
daa9d2bc
LE
2252 SysEmuTarget target = qapi_enum_parse(&SysEmuTarget_lookup, TARGET_NAME,
2253 -1, &error_abort);
ce74ee3d
LC
2254 CPUState *cpu;
2255
2256 CPU_FOREACH(cpu) {
2257 CpuInfoFastList *info = g_malloc0(sizeof(*info));
2258 info->value = g_malloc0(sizeof(*info->value));
2259
2260 info->value->cpu_index = cpu->cpu_index;
2261 info->value->qom_path = object_get_canonical_path(OBJECT(cpu));
2262 info->value->thread_id = cpu->thread_id;
2263
2264 info->value->has_props = !!mc->cpu_index_to_instance_props;
2265 if (info->value->has_props) {
2266 CpuInstanceProperties *props;
2267 props = g_malloc0(sizeof(*props));
2268 *props = mc->cpu_index_to_instance_props(ms, cpu->cpu_index);
2269 info->value->props = props;
2270 }
2271
daa9d2bc
LE
2272 info->value->arch = sysemu_target_to_cpuinfo_arch(target);
2273 info->value->target = target;
2274 if (target == SYS_EMU_TARGET_S390X) {
2275 cpustate_to_cpuinfo_s390(&info->value->u.s390x, cpu);
2276 } else {
2277 /* do nothing for @CpuInfoOther */
2278 }
2279
ce74ee3d
LC
2280 if (!cur_item) {
2281 head = cur_item = info;
2282 } else {
2283 cur_item->next = info;
2284 cur_item = info;
2285 }
2286 }
2287
2288 return head;
2289}
2290
0cfd6a9a
LC
2291void qmp_memsave(int64_t addr, int64_t size, const char *filename,
2292 bool has_cpu, int64_t cpu_index, Error **errp)
2293{
2294 FILE *f;
2295 uint32_t l;
55e5c285 2296 CPUState *cpu;
0cfd6a9a 2297 uint8_t buf[1024];
0dc9daf0 2298 int64_t orig_addr = addr, orig_size = size;
0cfd6a9a
LC
2299
2300 if (!has_cpu) {
2301 cpu_index = 0;
2302 }
2303
151d1322
AF
2304 cpu = qemu_get_cpu(cpu_index);
2305 if (cpu == NULL) {
c6bd8c70
MA
2306 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
2307 "a CPU number");
0cfd6a9a
LC
2308 return;
2309 }
2310
2311 f = fopen(filename, "wb");
2312 if (!f) {
618da851 2313 error_setg_file_open(errp, errno, filename);
0cfd6a9a
LC
2314 return;
2315 }
2316
2317 while (size != 0) {
2318 l = sizeof(buf);
2319 if (l > size)
2320 l = size;
2f4d0f59 2321 if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
0dc9daf0
BP
2322 error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRId64
2323 " specified", orig_addr, orig_size);
2f4d0f59
AK
2324 goto exit;
2325 }
0cfd6a9a 2326 if (fwrite(buf, 1, l, f) != l) {
c6bd8c70 2327 error_setg(errp, QERR_IO_ERROR);
0cfd6a9a
LC
2328 goto exit;
2329 }
2330 addr += l;
2331 size -= l;
2332 }
2333
2334exit:
2335 fclose(f);
2336}
6d3962bf
LC
2337
2338void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
2339 Error **errp)
2340{
2341 FILE *f;
2342 uint32_t l;
2343 uint8_t buf[1024];
2344
2345 f = fopen(filename, "wb");
2346 if (!f) {
618da851 2347 error_setg_file_open(errp, errno, filename);
6d3962bf
LC
2348 return;
2349 }
2350
2351 while (size != 0) {
2352 l = sizeof(buf);
2353 if (l > size)
2354 l = size;
eb6282f2 2355 cpu_physical_memory_read(addr, buf, l);
6d3962bf 2356 if (fwrite(buf, 1, l, f) != l) {
c6bd8c70 2357 error_setg(errp, QERR_IO_ERROR);
6d3962bf
LC
2358 goto exit;
2359 }
2360 addr += l;
2361 size -= l;
2362 }
2363
2364exit:
2365 fclose(f);
2366}
ab49ab5c
LC
2367
2368void qmp_inject_nmi(Error **errp)
2369{
9cb805fd 2370 nmi_monitor_handle(monitor_get_cpu_index(), errp);
ab49ab5c 2371}
27498bef
ST
2372
2373void dump_drift_info(FILE *f, fprintf_function cpu_fprintf)
2374{
2375 if (!use_icount) {
2376 return;
2377 }
2378
2379 cpu_fprintf(f, "Host - Guest clock %"PRIi64" ms\n",
2380 (cpu_get_clock() - cpu_get_icount())/SCALE_MS);
2381 if (icount_align_option) {
2382 cpu_fprintf(f, "Max guest delay %"PRIi64" ms\n", -max_delay/SCALE_MS);
2383 cpu_fprintf(f, "Max guest advance %"PRIi64" ms\n", max_advance/SCALE_MS);
2384 } else {
2385 cpu_fprintf(f, "Max guest delay NA\n");
2386 cpu_fprintf(f, "Max guest advance NA\n");
2387 }
2388}