]> git.ipfire.org Git - thirdparty/qemu.git/blame - cpus.c
tcg: rename tcg_current_cpu to tcg_current_rr_cpu
[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. */
7b31bbc2 26#include "qemu/osdep.h"
33c11879 27#include "qemu-common.h"
8d4e9146 28#include "qemu/config-file.h"
33c11879 29#include "cpu.h"
83c9089e 30#include "monitor/monitor.h"
a4e15de9 31#include "qapi/qmp/qerror.h"
d49b6836 32#include "qemu/error-report.h"
9c17d615 33#include "sysemu/sysemu.h"
da31d594 34#include "sysemu/block-backend.h"
022c62cb 35#include "exec/gdbstub.h"
9c17d615 36#include "sysemu/dma.h"
b3946626 37#include "sysemu/hw_accel.h"
9c17d615 38#include "sysemu/kvm.h"
b0cb0a66 39#include "sysemu/hax.h"
de0b36b6 40#include "qmp-commands.h"
63c91552 41#include "exec/exec-all.h"
296af7c9 42
1de7afc9 43#include "qemu/thread.h"
9c17d615
PB
44#include "sysemu/cpus.h"
45#include "sysemu/qtest.h"
1de7afc9
PB
46#include "qemu/main-loop.h"
47#include "qemu/bitmap.h"
cb365646 48#include "qemu/seqlock.h"
8d4e9146 49#include "tcg.h"
a4e15de9 50#include "qapi-event.h"
9cb805fd 51#include "hw/nmi.h"
8b427044 52#include "sysemu/replay.h"
0ff0fc19
JK
53
54#ifndef _WIN32
1de7afc9 55#include "qemu/compatfd.h"
0ff0fc19 56#endif
296af7c9 57
6d9cb73c
JK
58#ifdef CONFIG_LINUX
59
60#include <sys/prctl.h>
61
c0532a76
MT
62#ifndef PR_MCE_KILL
63#define PR_MCE_KILL 33
64#endif
65
6d9cb73c
JK
66#ifndef PR_MCE_KILL_SET
67#define PR_MCE_KILL_SET 1
68#endif
69
70#ifndef PR_MCE_KILL_EARLY
71#define PR_MCE_KILL_EARLY 1
72#endif
73
74#endif /* CONFIG_LINUX */
75
27498bef
ST
76int64_t max_delay;
77int64_t max_advance;
296af7c9 78
2adcc85d
JH
79/* vcpu throttling controls */
80static QEMUTimer *throttle_timer;
81static unsigned int throttle_percentage;
82
83#define CPU_THROTTLE_PCT_MIN 1
84#define CPU_THROTTLE_PCT_MAX 99
85#define CPU_THROTTLE_TIMESLICE_NS 10000000
86
321bc0b2
TC
87bool cpu_is_stopped(CPUState *cpu)
88{
89 return cpu->stopped || !runstate_is_running();
90}
91
a98ae1d8 92static bool cpu_thread_is_idle(CPUState *cpu)
ac873f1e 93{
c64ca814 94 if (cpu->stop || cpu->queued_work_first) {
ac873f1e
PM
95 return false;
96 }
321bc0b2 97 if (cpu_is_stopped(cpu)) {
ac873f1e
PM
98 return true;
99 }
8c2e1b00 100 if (!cpu->halted || cpu_has_work(cpu) ||
215e79c0 101 kvm_halt_in_kernel()) {
ac873f1e
PM
102 return false;
103 }
104 return true;
105}
106
107static bool all_cpu_threads_idle(void)
108{
182735ef 109 CPUState *cpu;
ac873f1e 110
bdc44640 111 CPU_FOREACH(cpu) {
182735ef 112 if (!cpu_thread_is_idle(cpu)) {
ac873f1e
PM
113 return false;
114 }
115 }
116 return true;
117}
118
946fb27c
PB
119/***********************************************************/
120/* guest cycle counter */
121
a3270e19
PB
122/* Protected by TimersState seqlock */
123
5045e9d9 124static bool icount_sleep = true;
71468395 125static int64_t vm_clock_warp_start = -1;
946fb27c
PB
126/* Conversion factor from emulated instructions to virtual clock ticks. */
127static int icount_time_shift;
128/* Arbitrarily pick 1MIPS as the minimum allowable speed. */
129#define MAX_ICOUNT_SHIFT 10
a3270e19 130
946fb27c
PB
131static QEMUTimer *icount_rt_timer;
132static QEMUTimer *icount_vm_timer;
133static QEMUTimer *icount_warp_timer;
946fb27c
PB
134
135typedef struct TimersState {
cb365646 136 /* Protected by BQL. */
946fb27c
PB
137 int64_t cpu_ticks_prev;
138 int64_t cpu_ticks_offset;
cb365646
LPF
139
140 /* cpu_clock_offset can be read out of BQL, so protect it with
141 * this lock.
142 */
143 QemuSeqLock vm_clock_seqlock;
946fb27c
PB
144 int64_t cpu_clock_offset;
145 int32_t cpu_ticks_enabled;
146 int64_t dummy;
c96778bb
FK
147
148 /* Compensate for varying guest execution speed. */
149 int64_t qemu_icount_bias;
150 /* Only written by TCG thread */
151 int64_t qemu_icount;
946fb27c
PB
152} TimersState;
153
d9cd4007 154static TimersState timers_state;
8d4e9146
FK
155bool mttcg_enabled;
156
157/*
158 * We default to false if we know other options have been enabled
159 * which are currently incompatible with MTTCG. Otherwise when each
160 * guest (target) has been updated to support:
161 * - atomic instructions
162 * - memory ordering primitives (barriers)
163 * they can set the appropriate CONFIG flags in ${target}-softmmu.mak
164 *
165 * Once a guest architecture has been converted to the new primitives
166 * there are two remaining limitations to check.
167 *
168 * - The guest can't be oversized (e.g. 64 bit guest on 32 bit host)
169 * - The host must have a stronger memory order than the guest
170 *
171 * It may be possible in future to support strong guests on weak hosts
172 * but that will require tagging all load/stores in a guest with their
173 * implicit memory order requirements which would likely slow things
174 * down a lot.
175 */
176
177static bool check_tcg_memory_orders_compatible(void)
178{
179#if defined(TCG_GUEST_DEFAULT_MO) && defined(TCG_TARGET_DEFAULT_MO)
180 return (TCG_GUEST_DEFAULT_MO & ~TCG_TARGET_DEFAULT_MO) == 0;
181#else
182 return false;
183#endif
184}
185
186static bool default_mttcg_enabled(void)
187{
188 QemuOpts *icount_opts = qemu_find_opts_singleton("icount");
189 const char *rr = qemu_opt_get(icount_opts, "rr");
190
191 if (rr || TCG_OVERSIZED_GUEST) {
192 return false;
193 } else {
194#ifdef TARGET_SUPPORTS_MTTCG
195 return check_tcg_memory_orders_compatible();
196#else
197 return false;
198#endif
199 }
200}
201
202void qemu_tcg_configure(QemuOpts *opts, Error **errp)
203{
204 const char *t = qemu_opt_get(opts, "thread");
205 if (t) {
206 if (strcmp(t, "multi") == 0) {
207 if (TCG_OVERSIZED_GUEST) {
208 error_setg(errp, "No MTTCG when guest word size > hosts");
209 } else {
210 if (!check_tcg_memory_orders_compatible()) {
211 error_report("Guest expects a stronger memory ordering "
212 "than the host provides");
213 error_printf("This may cause strange/hard to debug errors");
214 }
215 mttcg_enabled = true;
216 }
217 } else if (strcmp(t, "single") == 0) {
218 mttcg_enabled = false;
219 } else {
220 error_setg(errp, "Invalid 'thread' setting %s", t);
221 }
222 } else {
223 mttcg_enabled = default_mttcg_enabled();
224 }
225}
946fb27c 226
2a62914b 227int64_t cpu_get_icount_raw(void)
946fb27c
PB
228{
229 int64_t icount;
4917cf44 230 CPUState *cpu = current_cpu;
946fb27c 231
c96778bb 232 icount = timers_state.qemu_icount;
4917cf44 233 if (cpu) {
414b15c9 234 if (!cpu->can_do_io) {
2a62914b
PD
235 fprintf(stderr, "Bad icount read\n");
236 exit(1);
946fb27c 237 }
28ecfd7a 238 icount -= (cpu->icount_decr.u16.low + cpu->icount_extra);
946fb27c 239 }
2a62914b
PD
240 return icount;
241}
242
243/* Return the virtual CPU time, based on the instruction counter. */
244static int64_t cpu_get_icount_locked(void)
245{
246 int64_t icount = cpu_get_icount_raw();
3f031313 247 return timers_state.qemu_icount_bias + cpu_icount_to_ns(icount);
946fb27c
PB
248}
249
17a15f1b
PB
250int64_t cpu_get_icount(void)
251{
252 int64_t icount;
253 unsigned start;
254
255 do {
256 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
257 icount = cpu_get_icount_locked();
258 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
259
260 return icount;
261}
262
3f031313
FK
263int64_t cpu_icount_to_ns(int64_t icount)
264{
265 return icount << icount_time_shift;
266}
267
d90f3cca
C
268/* return the time elapsed in VM between vm_start and vm_stop. Unless
269 * icount is active, cpu_get_ticks() uses units of the host CPU cycle
270 * counter.
271 *
272 * Caller must hold the BQL
273 */
946fb27c
PB
274int64_t cpu_get_ticks(void)
275{
5f3e3101
PB
276 int64_t ticks;
277
946fb27c
PB
278 if (use_icount) {
279 return cpu_get_icount();
280 }
5f3e3101
PB
281
282 ticks = timers_state.cpu_ticks_offset;
283 if (timers_state.cpu_ticks_enabled) {
4a7428c5 284 ticks += cpu_get_host_ticks();
5f3e3101
PB
285 }
286
287 if (timers_state.cpu_ticks_prev > ticks) {
288 /* Note: non increasing ticks may happen if the host uses
289 software suspend */
290 timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
291 ticks = timers_state.cpu_ticks_prev;
946fb27c 292 }
5f3e3101
PB
293
294 timers_state.cpu_ticks_prev = ticks;
295 return ticks;
946fb27c
PB
296}
297
cb365646 298static int64_t cpu_get_clock_locked(void)
946fb27c 299{
1d45cea5 300 int64_t time;
cb365646 301
1d45cea5 302 time = timers_state.cpu_clock_offset;
5f3e3101 303 if (timers_state.cpu_ticks_enabled) {
1d45cea5 304 time += get_clock();
946fb27c 305 }
cb365646 306
1d45cea5 307 return time;
cb365646
LPF
308}
309
d90f3cca 310/* Return the monotonic time elapsed in VM, i.e.,
8212ff86
PM
311 * the time between vm_start and vm_stop
312 */
cb365646
LPF
313int64_t cpu_get_clock(void)
314{
315 int64_t ti;
316 unsigned start;
317
318 do {
319 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
320 ti = cpu_get_clock_locked();
321 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
322
323 return ti;
946fb27c
PB
324}
325
cb365646 326/* enable cpu_get_ticks()
3224e878 327 * Caller must hold BQL which serves as mutex for vm_clock_seqlock.
cb365646 328 */
946fb27c
PB
329void cpu_enable_ticks(void)
330{
cb365646 331 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
03719e44 332 seqlock_write_begin(&timers_state.vm_clock_seqlock);
946fb27c 333 if (!timers_state.cpu_ticks_enabled) {
4a7428c5 334 timers_state.cpu_ticks_offset -= cpu_get_host_ticks();
946fb27c
PB
335 timers_state.cpu_clock_offset -= get_clock();
336 timers_state.cpu_ticks_enabled = 1;
337 }
03719e44 338 seqlock_write_end(&timers_state.vm_clock_seqlock);
946fb27c
PB
339}
340
341/* disable cpu_get_ticks() : the clock is stopped. You must not call
cb365646 342 * cpu_get_ticks() after that.
3224e878 343 * Caller must hold BQL which serves as mutex for vm_clock_seqlock.
cb365646 344 */
946fb27c
PB
345void cpu_disable_ticks(void)
346{
cb365646 347 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
03719e44 348 seqlock_write_begin(&timers_state.vm_clock_seqlock);
946fb27c 349 if (timers_state.cpu_ticks_enabled) {
4a7428c5 350 timers_state.cpu_ticks_offset += cpu_get_host_ticks();
cb365646 351 timers_state.cpu_clock_offset = cpu_get_clock_locked();
946fb27c
PB
352 timers_state.cpu_ticks_enabled = 0;
353 }
03719e44 354 seqlock_write_end(&timers_state.vm_clock_seqlock);
946fb27c
PB
355}
356
357/* Correlation between real and virtual time is always going to be
358 fairly approximate, so ignore small variation.
359 When the guest is idle real and virtual time will be aligned in
360 the IO wait loop. */
73bcb24d 361#define ICOUNT_WOBBLE (NANOSECONDS_PER_SECOND / 10)
946fb27c
PB
362
363static void icount_adjust(void)
364{
365 int64_t cur_time;
366 int64_t cur_icount;
367 int64_t delta;
a3270e19
PB
368
369 /* Protected by TimersState mutex. */
946fb27c 370 static int64_t last_delta;
468cc7cf 371
946fb27c
PB
372 /* If the VM is not running, then do nothing. */
373 if (!runstate_is_running()) {
374 return;
375 }
468cc7cf 376
03719e44 377 seqlock_write_begin(&timers_state.vm_clock_seqlock);
17a15f1b
PB
378 cur_time = cpu_get_clock_locked();
379 cur_icount = cpu_get_icount_locked();
468cc7cf 380
946fb27c
PB
381 delta = cur_icount - cur_time;
382 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
383 if (delta > 0
384 && last_delta + ICOUNT_WOBBLE < delta * 2
385 && icount_time_shift > 0) {
386 /* The guest is getting too far ahead. Slow time down. */
387 icount_time_shift--;
388 }
389 if (delta < 0
390 && last_delta - ICOUNT_WOBBLE > delta * 2
391 && icount_time_shift < MAX_ICOUNT_SHIFT) {
392 /* The guest is getting too far behind. Speed time up. */
393 icount_time_shift++;
394 }
395 last_delta = delta;
c96778bb
FK
396 timers_state.qemu_icount_bias = cur_icount
397 - (timers_state.qemu_icount << icount_time_shift);
03719e44 398 seqlock_write_end(&timers_state.vm_clock_seqlock);
946fb27c
PB
399}
400
401static void icount_adjust_rt(void *opaque)
402{
40daca54 403 timer_mod(icount_rt_timer,
1979b908 404 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
946fb27c
PB
405 icount_adjust();
406}
407
408static void icount_adjust_vm(void *opaque)
409{
40daca54
AB
410 timer_mod(icount_vm_timer,
411 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
73bcb24d 412 NANOSECONDS_PER_SECOND / 10);
946fb27c
PB
413 icount_adjust();
414}
415
416static int64_t qemu_icount_round(int64_t count)
417{
418 return (count + (1 << icount_time_shift) - 1) >> icount_time_shift;
419}
420
efab87cf 421static void icount_warp_rt(void)
946fb27c 422{
ccffff48
AB
423 unsigned seq;
424 int64_t warp_start;
425
17a15f1b
PB
426 /* The icount_warp_timer is rescheduled soon after vm_clock_warp_start
427 * changes from -1 to another value, so the race here is okay.
428 */
ccffff48
AB
429 do {
430 seq = seqlock_read_begin(&timers_state.vm_clock_seqlock);
431 warp_start = vm_clock_warp_start;
432 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, seq));
433
434 if (warp_start == -1) {
946fb27c
PB
435 return;
436 }
437
03719e44 438 seqlock_write_begin(&timers_state.vm_clock_seqlock);
946fb27c 439 if (runstate_is_running()) {
8eda206e
PD
440 int64_t clock = REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT,
441 cpu_get_clock_locked());
8ed961d9
PB
442 int64_t warp_delta;
443
444 warp_delta = clock - vm_clock_warp_start;
445 if (use_icount == 2) {
946fb27c 446 /*
40daca54 447 * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
946fb27c
PB
448 * far ahead of real time.
449 */
17a15f1b 450 int64_t cur_icount = cpu_get_icount_locked();
bf2a7ddb 451 int64_t delta = clock - cur_icount;
8ed961d9 452 warp_delta = MIN(warp_delta, delta);
946fb27c 453 }
c96778bb 454 timers_state.qemu_icount_bias += warp_delta;
946fb27c
PB
455 }
456 vm_clock_warp_start = -1;
03719e44 457 seqlock_write_end(&timers_state.vm_clock_seqlock);
8ed961d9
PB
458
459 if (qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) {
460 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
461 }
946fb27c
PB
462}
463
e76d1798 464static void icount_timer_cb(void *opaque)
efab87cf 465{
e76d1798
PD
466 /* No need for a checkpoint because the timer already synchronizes
467 * with CHECKPOINT_CLOCK_VIRTUAL_RT.
468 */
469 icount_warp_rt();
efab87cf
PD
470}
471
8156be56
PB
472void qtest_clock_warp(int64_t dest)
473{
40daca54 474 int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
efef88b3 475 AioContext *aio_context;
8156be56 476 assert(qtest_enabled());
efef88b3 477 aio_context = qemu_get_aio_context();
8156be56 478 while (clock < dest) {
40daca54 479 int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
c9299e2f 480 int64_t warp = qemu_soonest_timeout(dest - clock, deadline);
efef88b3 481
03719e44 482 seqlock_write_begin(&timers_state.vm_clock_seqlock);
c96778bb 483 timers_state.qemu_icount_bias += warp;
03719e44 484 seqlock_write_end(&timers_state.vm_clock_seqlock);
17a15f1b 485
40daca54 486 qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
efef88b3 487 timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]);
40daca54 488 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
8156be56 489 }
40daca54 490 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
8156be56
PB
491}
492
e76d1798 493void qemu_start_warp_timer(void)
946fb27c 494{
ce78d18c 495 int64_t clock;
946fb27c
PB
496 int64_t deadline;
497
e76d1798 498 if (!use_icount) {
946fb27c
PB
499 return;
500 }
501
8bd7f71d
PD
502 /* Nothing to do if the VM is stopped: QEMU_CLOCK_VIRTUAL timers
503 * do not fire, so computing the deadline does not make sense.
504 */
505 if (!runstate_is_running()) {
506 return;
507 }
508
509 /* warp clock deterministically in record/replay mode */
e76d1798 510 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_START)) {
8bd7f71d
PD
511 return;
512 }
513
ce78d18c 514 if (!all_cpu_threads_idle()) {
946fb27c
PB
515 return;
516 }
517
8156be56
PB
518 if (qtest_enabled()) {
519 /* When testing, qtest commands advance icount. */
e76d1798 520 return;
8156be56
PB
521 }
522
ac70aafc 523 /* We want to use the earliest deadline from ALL vm_clocks */
bf2a7ddb 524 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT);
40daca54 525 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
ce78d18c 526 if (deadline < 0) {
d7a0f71d
VC
527 static bool notified;
528 if (!icount_sleep && !notified) {
529 error_report("WARNING: icount sleep disabled and no active timers");
530 notified = true;
531 }
ce78d18c 532 return;
ac70aafc
AB
533 }
534
946fb27c
PB
535 if (deadline > 0) {
536 /*
40daca54 537 * Ensure QEMU_CLOCK_VIRTUAL proceeds even when the virtual CPU goes to
946fb27c
PB
538 * sleep. Otherwise, the CPU might be waiting for a future timer
539 * interrupt to wake it up, but the interrupt never comes because
540 * the vCPU isn't running any insns and thus doesn't advance the
40daca54 541 * QEMU_CLOCK_VIRTUAL.
946fb27c 542 */
5045e9d9
VC
543 if (!icount_sleep) {
544 /*
545 * We never let VCPUs sleep in no sleep icount mode.
546 * If there is a pending QEMU_CLOCK_VIRTUAL timer we just advance
547 * to the next QEMU_CLOCK_VIRTUAL event and notify it.
548 * It is useful when we want a deterministic execution time,
549 * isolated from host latencies.
550 */
03719e44 551 seqlock_write_begin(&timers_state.vm_clock_seqlock);
5045e9d9 552 timers_state.qemu_icount_bias += deadline;
03719e44 553 seqlock_write_end(&timers_state.vm_clock_seqlock);
5045e9d9
VC
554 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
555 } else {
556 /*
557 * We do stop VCPUs and only advance QEMU_CLOCK_VIRTUAL after some
558 * "real" time, (related to the time left until the next event) has
559 * passed. The QEMU_CLOCK_VIRTUAL_RT clock will do this.
560 * This avoids that the warps are visible externally; for example,
561 * you will not be sending network packets continuously instead of
562 * every 100ms.
563 */
03719e44 564 seqlock_write_begin(&timers_state.vm_clock_seqlock);
5045e9d9
VC
565 if (vm_clock_warp_start == -1 || vm_clock_warp_start > clock) {
566 vm_clock_warp_start = clock;
567 }
03719e44 568 seqlock_write_end(&timers_state.vm_clock_seqlock);
5045e9d9 569 timer_mod_anticipate(icount_warp_timer, clock + deadline);
ce78d18c 570 }
ac70aafc 571 } else if (deadline == 0) {
40daca54 572 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
946fb27c
PB
573 }
574}
575
e76d1798
PD
576static void qemu_account_warp_timer(void)
577{
578 if (!use_icount || !icount_sleep) {
579 return;
580 }
581
582 /* Nothing to do if the VM is stopped: QEMU_CLOCK_VIRTUAL timers
583 * do not fire, so computing the deadline does not make sense.
584 */
585 if (!runstate_is_running()) {
586 return;
587 }
588
589 /* warp clock deterministically in record/replay mode */
590 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_ACCOUNT)) {
591 return;
592 }
593
594 timer_del(icount_warp_timer);
595 icount_warp_rt();
596}
597
d09eae37
FK
598static bool icount_state_needed(void *opaque)
599{
600 return use_icount;
601}
602
603/*
604 * This is a subsection for icount migration.
605 */
606static const VMStateDescription icount_vmstate_timers = {
607 .name = "timer/icount",
608 .version_id = 1,
609 .minimum_version_id = 1,
5cd8cada 610 .needed = icount_state_needed,
d09eae37
FK
611 .fields = (VMStateField[]) {
612 VMSTATE_INT64(qemu_icount_bias, TimersState),
613 VMSTATE_INT64(qemu_icount, TimersState),
614 VMSTATE_END_OF_LIST()
615 }
616};
617
946fb27c
PB
618static const VMStateDescription vmstate_timers = {
619 .name = "timer",
620 .version_id = 2,
621 .minimum_version_id = 1,
35d08458 622 .fields = (VMStateField[]) {
946fb27c
PB
623 VMSTATE_INT64(cpu_ticks_offset, TimersState),
624 VMSTATE_INT64(dummy, TimersState),
625 VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
626 VMSTATE_END_OF_LIST()
d09eae37 627 },
5cd8cada
JQ
628 .subsections = (const VMStateDescription*[]) {
629 &icount_vmstate_timers,
630 NULL
946fb27c
PB
631 }
632};
633
14e6fe12 634static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
2adcc85d 635{
2adcc85d
JH
636 double pct;
637 double throttle_ratio;
638 long sleeptime_ns;
639
640 if (!cpu_throttle_get_percentage()) {
641 return;
642 }
643
644 pct = (double)cpu_throttle_get_percentage()/100;
645 throttle_ratio = pct / (1 - pct);
646 sleeptime_ns = (long)(throttle_ratio * CPU_THROTTLE_TIMESLICE_NS);
647
648 qemu_mutex_unlock_iothread();
649 atomic_set(&cpu->throttle_thread_scheduled, 0);
650 g_usleep(sleeptime_ns / 1000); /* Convert ns to us for usleep call */
651 qemu_mutex_lock_iothread();
652}
653
654static void cpu_throttle_timer_tick(void *opaque)
655{
656 CPUState *cpu;
657 double pct;
658
659 /* Stop the timer if needed */
660 if (!cpu_throttle_get_percentage()) {
661 return;
662 }
663 CPU_FOREACH(cpu) {
664 if (!atomic_xchg(&cpu->throttle_thread_scheduled, 1)) {
14e6fe12
PB
665 async_run_on_cpu(cpu, cpu_throttle_thread,
666 RUN_ON_CPU_NULL);
2adcc85d
JH
667 }
668 }
669
670 pct = (double)cpu_throttle_get_percentage()/100;
671 timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
672 CPU_THROTTLE_TIMESLICE_NS / (1-pct));
673}
674
675void cpu_throttle_set(int new_throttle_pct)
676{
677 /* Ensure throttle percentage is within valid range */
678 new_throttle_pct = MIN(new_throttle_pct, CPU_THROTTLE_PCT_MAX);
679 new_throttle_pct = MAX(new_throttle_pct, CPU_THROTTLE_PCT_MIN);
680
681 atomic_set(&throttle_percentage, new_throttle_pct);
682
683 timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
684 CPU_THROTTLE_TIMESLICE_NS);
685}
686
687void cpu_throttle_stop(void)
688{
689 atomic_set(&throttle_percentage, 0);
690}
691
692bool cpu_throttle_active(void)
693{
694 return (cpu_throttle_get_percentage() != 0);
695}
696
697int cpu_throttle_get_percentage(void)
698{
699 return atomic_read(&throttle_percentage);
700}
701
4603ea01
PD
702void cpu_ticks_init(void)
703{
ccdb3c1f 704 seqlock_init(&timers_state.vm_clock_seqlock);
4603ea01 705 vmstate_register(NULL, 0, &vmstate_timers, &timers_state);
2adcc85d
JH
706 throttle_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
707 cpu_throttle_timer_tick, NULL);
4603ea01
PD
708}
709
1ad9580b 710void configure_icount(QemuOpts *opts, Error **errp)
946fb27c 711{
1ad9580b 712 const char *option;
a8bfac37 713 char *rem_str = NULL;
1ad9580b 714
1ad9580b 715 option = qemu_opt_get(opts, "shift");
946fb27c 716 if (!option) {
a8bfac37
ST
717 if (qemu_opt_get(opts, "align") != NULL) {
718 error_setg(errp, "Please specify shift option when using align");
719 }
946fb27c
PB
720 return;
721 }
f1f4b57e
VC
722
723 icount_sleep = qemu_opt_get_bool(opts, "sleep", true);
5045e9d9
VC
724 if (icount_sleep) {
725 icount_warp_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
e76d1798 726 icount_timer_cb, NULL);
5045e9d9 727 }
f1f4b57e 728
a8bfac37 729 icount_align_option = qemu_opt_get_bool(opts, "align", false);
f1f4b57e
VC
730
731 if (icount_align_option && !icount_sleep) {
778d9f9b 732 error_setg(errp, "align=on and sleep=off are incompatible");
f1f4b57e 733 }
946fb27c 734 if (strcmp(option, "auto") != 0) {
a8bfac37
ST
735 errno = 0;
736 icount_time_shift = strtol(option, &rem_str, 0);
737 if (errno != 0 || *rem_str != '\0' || !strlen(option)) {
738 error_setg(errp, "icount: Invalid shift value");
739 }
946fb27c
PB
740 use_icount = 1;
741 return;
a8bfac37
ST
742 } else if (icount_align_option) {
743 error_setg(errp, "shift=auto and align=on are incompatible");
f1f4b57e 744 } else if (!icount_sleep) {
778d9f9b 745 error_setg(errp, "shift=auto and sleep=off are incompatible");
946fb27c
PB
746 }
747
748 use_icount = 2;
749
750 /* 125MIPS seems a reasonable initial guess at the guest speed.
751 It will be corrected fairly quickly anyway. */
752 icount_time_shift = 3;
753
754 /* Have both realtime and virtual time triggers for speed adjustment.
755 The realtime trigger catches emulated time passing too slowly,
756 the virtual time trigger catches emulated time passing too fast.
757 Realtime triggers occur even when idle, so use them less frequently
758 than VM triggers. */
bf2a7ddb
PD
759 icount_rt_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL_RT,
760 icount_adjust_rt, NULL);
40daca54 761 timer_mod(icount_rt_timer,
bf2a7ddb 762 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
40daca54
AB
763 icount_vm_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
764 icount_adjust_vm, NULL);
765 timer_mod(icount_vm_timer,
766 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
73bcb24d 767 NANOSECONDS_PER_SECOND / 10);
946fb27c
PB
768}
769
6546706d
AB
770/***********************************************************/
771/* TCG vCPU kick timer
772 *
773 * The kick timer is responsible for moving single threaded vCPU
774 * emulation on to the next vCPU. If more than one vCPU is running a
775 * timer event with force a cpu->exit so the next vCPU can get
776 * scheduled.
777 *
778 * The timer is removed if all vCPUs are idle and restarted again once
779 * idleness is complete.
780 */
781
782static QEMUTimer *tcg_kick_vcpu_timer;
791158d9 783static CPUState *tcg_current_rr_cpu;
6546706d
AB
784
785#define TCG_KICK_PERIOD (NANOSECONDS_PER_SECOND / 10)
786
787static inline int64_t qemu_tcg_next_kick(void)
788{
789 return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + TCG_KICK_PERIOD;
790}
791
791158d9
AB
792/* Kick the currently round-robin scheduled vCPU */
793static void qemu_cpu_kick_rr_cpu(void)
794{
795 CPUState *cpu;
796 atomic_mb_set(&exit_request, 1);
797 do {
798 cpu = atomic_mb_read(&tcg_current_rr_cpu);
799 if (cpu) {
800 cpu_exit(cpu);
801 }
802 } while (cpu != atomic_mb_read(&tcg_current_rr_cpu));
803}
804
6546706d
AB
805static void kick_tcg_thread(void *opaque)
806{
807 timer_mod(tcg_kick_vcpu_timer, qemu_tcg_next_kick());
791158d9 808 qemu_cpu_kick_rr_cpu();
6546706d
AB
809}
810
811static void start_tcg_kick_timer(void)
812{
813 if (!tcg_kick_vcpu_timer && CPU_NEXT(first_cpu)) {
814 tcg_kick_vcpu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
815 kick_tcg_thread, NULL);
816 timer_mod(tcg_kick_vcpu_timer, qemu_tcg_next_kick());
817 }
818}
819
820static void stop_tcg_kick_timer(void)
821{
822 if (tcg_kick_vcpu_timer) {
823 timer_del(tcg_kick_vcpu_timer);
824 tcg_kick_vcpu_timer = NULL;
825 }
826}
827
296af7c9
BS
828/***********************************************************/
829void hw_error(const char *fmt, ...)
830{
831 va_list ap;
55e5c285 832 CPUState *cpu;
296af7c9
BS
833
834 va_start(ap, fmt);
835 fprintf(stderr, "qemu: hardware error: ");
836 vfprintf(stderr, fmt, ap);
837 fprintf(stderr, "\n");
bdc44640 838 CPU_FOREACH(cpu) {
55e5c285 839 fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
878096ee 840 cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU);
296af7c9
BS
841 }
842 va_end(ap);
843 abort();
844}
845
846void cpu_synchronize_all_states(void)
847{
182735ef 848 CPUState *cpu;
296af7c9 849
bdc44640 850 CPU_FOREACH(cpu) {
182735ef 851 cpu_synchronize_state(cpu);
296af7c9
BS
852 }
853}
854
855void cpu_synchronize_all_post_reset(void)
856{
182735ef 857 CPUState *cpu;
296af7c9 858
bdc44640 859 CPU_FOREACH(cpu) {
182735ef 860 cpu_synchronize_post_reset(cpu);
296af7c9
BS
861 }
862}
863
864void cpu_synchronize_all_post_init(void)
865{
182735ef 866 CPUState *cpu;
296af7c9 867
bdc44640 868 CPU_FOREACH(cpu) {
182735ef 869 cpu_synchronize_post_init(cpu);
296af7c9
BS
870 }
871}
872
56983463 873static int do_vm_stop(RunState state)
296af7c9 874{
56983463
KW
875 int ret = 0;
876
1354869c 877 if (runstate_is_running()) {
296af7c9 878 cpu_disable_ticks();
296af7c9 879 pause_all_vcpus();
f5bbfba1 880 runstate_set(state);
1dfb4dd9 881 vm_state_notify(0, state);
a4e15de9 882 qapi_event_send_stop(&error_abort);
296af7c9 883 }
56983463 884
594a45ce 885 bdrv_drain_all();
6d0ceb80 886 replay_disable_events();
22af08ea 887 ret = bdrv_flush_all();
594a45ce 888
56983463 889 return ret;
296af7c9
BS
890}
891
a1fcaa73 892static bool cpu_can_run(CPUState *cpu)
296af7c9 893{
4fdeee7c 894 if (cpu->stop) {
a1fcaa73 895 return false;
0ab07c62 896 }
321bc0b2 897 if (cpu_is_stopped(cpu)) {
a1fcaa73 898 return false;
0ab07c62 899 }
a1fcaa73 900 return true;
296af7c9
BS
901}
902
91325046 903static void cpu_handle_guest_debug(CPUState *cpu)
83f338f7 904{
64f6b346 905 gdb_set_stop_cpu(cpu);
8cf71710 906 qemu_system_debug_request();
f324e766 907 cpu->stopped = true;
3c638d06
JK
908}
909
6d9cb73c
JK
910#ifdef CONFIG_LINUX
911static void sigbus_reraise(void)
912{
913 sigset_t set;
914 struct sigaction action;
915
916 memset(&action, 0, sizeof(action));
917 action.sa_handler = SIG_DFL;
918 if (!sigaction(SIGBUS, &action, NULL)) {
919 raise(SIGBUS);
920 sigemptyset(&set);
921 sigaddset(&set, SIGBUS);
a2d1761d 922 pthread_sigmask(SIG_UNBLOCK, &set, NULL);
6d9cb73c
JK
923 }
924 perror("Failed to re-raise SIGBUS!\n");
925 abort();
926}
927
928static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo,
929 void *ctx)
930{
931 if (kvm_on_sigbus(siginfo->ssi_code,
932 (void *)(intptr_t)siginfo->ssi_addr)) {
933 sigbus_reraise();
934 }
935}
936
937static void qemu_init_sigbus(void)
938{
939 struct sigaction action;
940
941 memset(&action, 0, sizeof(action));
942 action.sa_flags = SA_SIGINFO;
943 action.sa_sigaction = (void (*)(int, siginfo_t*, void*))sigbus_handler;
944 sigaction(SIGBUS, &action, NULL);
945
946 prctl(PR_MCE_KILL, PR_MCE_KILL_SET, PR_MCE_KILL_EARLY, 0, 0);
947}
948
290adf38 949static void qemu_kvm_eat_signals(CPUState *cpu)
1ab3c6c0
JK
950{
951 struct timespec ts = { 0, 0 };
952 siginfo_t siginfo;
953 sigset_t waitset;
954 sigset_t chkset;
955 int r;
956
957 sigemptyset(&waitset);
958 sigaddset(&waitset, SIG_IPI);
959 sigaddset(&waitset, SIGBUS);
960
961 do {
962 r = sigtimedwait(&waitset, &siginfo, &ts);
963 if (r == -1 && !(errno == EAGAIN || errno == EINTR)) {
964 perror("sigtimedwait");
965 exit(1);
966 }
967
968 switch (r) {
969 case SIGBUS:
290adf38 970 if (kvm_on_sigbus_vcpu(cpu, siginfo.si_code, siginfo.si_addr)) {
1ab3c6c0
JK
971 sigbus_reraise();
972 }
973 break;
974 default:
975 break;
976 }
977
978 r = sigpending(&chkset);
979 if (r == -1) {
980 perror("sigpending");
981 exit(1);
982 }
983 } while (sigismember(&chkset, SIG_IPI) || sigismember(&chkset, SIGBUS));
1ab3c6c0
JK
984}
985
6d9cb73c
JK
986#else /* !CONFIG_LINUX */
987
988static void qemu_init_sigbus(void)
989{
990}
1ab3c6c0 991
290adf38 992static void qemu_kvm_eat_signals(CPUState *cpu)
1ab3c6c0
JK
993{
994}
6d9cb73c
JK
995#endif /* !CONFIG_LINUX */
996
296af7c9 997#ifndef _WIN32
55f8d6ac
JK
998static void dummy_signal(int sig)
999{
1000}
55f8d6ac 1001
13618e05 1002static void qemu_kvm_init_cpu_signals(CPUState *cpu)
714bd040
PB
1003{
1004 int r;
1005 sigset_t set;
1006 struct sigaction sigact;
1007
1008 memset(&sigact, 0, sizeof(sigact));
1009 sigact.sa_handler = dummy_signal;
1010 sigaction(SIG_IPI, &sigact, NULL);
1011
714bd040
PB
1012 pthread_sigmask(SIG_BLOCK, NULL, &set);
1013 sigdelset(&set, SIG_IPI);
714bd040 1014 sigdelset(&set, SIGBUS);
491d6e80 1015 r = kvm_set_signal_mask(cpu, &set);
714bd040
PB
1016 if (r) {
1017 fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
1018 exit(1);
1019 }
1020}
1021
55f8d6ac 1022#else /* _WIN32 */
13618e05 1023static void qemu_kvm_init_cpu_signals(CPUState *cpu)
ff48eb5f 1024{
714bd040
PB
1025 abort();
1026}
714bd040 1027#endif /* _WIN32 */
ff48eb5f 1028
b2532d88 1029static QemuMutex qemu_global_mutex;
46daff13 1030static QemuCond qemu_io_proceeded_cond;
6b49809c 1031static unsigned iothread_requesting_mutex;
296af7c9
BS
1032
1033static QemuThread io_thread;
1034
296af7c9
BS
1035/* cpu creation */
1036static QemuCond qemu_cpu_cond;
1037/* system init */
296af7c9
BS
1038static QemuCond qemu_pause_cond;
1039
d3b12f5d 1040void qemu_init_cpu_loop(void)
296af7c9 1041{
6d9cb73c 1042 qemu_init_sigbus();
ed94592b 1043 qemu_cond_init(&qemu_cpu_cond);
ed94592b 1044 qemu_cond_init(&qemu_pause_cond);
46daff13 1045 qemu_cond_init(&qemu_io_proceeded_cond);
296af7c9 1046 qemu_mutex_init(&qemu_global_mutex);
296af7c9 1047
b7680cb6 1048 qemu_thread_get_self(&io_thread);
296af7c9
BS
1049}
1050
14e6fe12 1051void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data)
e82bcec2 1052{
d148d90e 1053 do_run_on_cpu(cpu, func, data, &qemu_global_mutex);
3c02270d
CV
1054}
1055
4c055ab5
GZ
1056static void qemu_kvm_destroy_vcpu(CPUState *cpu)
1057{
1058 if (kvm_destroy_vcpu(cpu) < 0) {
1059 error_report("kvm_destroy_vcpu failed");
1060 exit(EXIT_FAILURE);
1061 }
1062}
1063
1064static void qemu_tcg_destroy_vcpu(CPUState *cpu)
1065{
1066}
1067
509a0d78 1068static void qemu_wait_io_event_common(CPUState *cpu)
296af7c9 1069{
4fdeee7c
AF
1070 if (cpu->stop) {
1071 cpu->stop = false;
f324e766 1072 cpu->stopped = true;
96bce683 1073 qemu_cond_broadcast(&qemu_pause_cond);
296af7c9 1074 }
a5403c69 1075 process_queued_cpu_work(cpu);
216fc9a4 1076 cpu->thread_kicked = false;
296af7c9
BS
1077}
1078
d5f8d613 1079static void qemu_tcg_wait_io_event(CPUState *cpu)
296af7c9 1080{
16400322 1081 while (all_cpu_threads_idle()) {
6546706d 1082 stop_tcg_kick_timer();
d5f8d613 1083 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
16400322 1084 }
296af7c9 1085
6546706d
AB
1086 start_tcg_kick_timer();
1087
46daff13
PB
1088 while (iothread_requesting_mutex) {
1089 qemu_cond_wait(&qemu_io_proceeded_cond, &qemu_global_mutex);
1090 }
6cabe1f3 1091
bdc44640 1092 CPU_FOREACH(cpu) {
182735ef 1093 qemu_wait_io_event_common(cpu);
6cabe1f3 1094 }
296af7c9
BS
1095}
1096
fd529e8f 1097static void qemu_kvm_wait_io_event(CPUState *cpu)
296af7c9 1098{
a98ae1d8 1099 while (cpu_thread_is_idle(cpu)) {
f5c121b8 1100 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
16400322 1101 }
296af7c9 1102
290adf38 1103 qemu_kvm_eat_signals(cpu);
509a0d78 1104 qemu_wait_io_event_common(cpu);
296af7c9
BS
1105}
1106
7e97cd88 1107static void *qemu_kvm_cpu_thread_fn(void *arg)
296af7c9 1108{
48a106bd 1109 CPUState *cpu = arg;
84b4915d 1110 int r;
296af7c9 1111
ab28bd23
PB
1112 rcu_register_thread();
1113
2e7f7a3c 1114 qemu_mutex_lock_iothread();
814e612e 1115 qemu_thread_get_self(cpu->thread);
9f09e18a 1116 cpu->thread_id = qemu_get_thread_id();
626cf8f4 1117 cpu->can_do_io = 1;
4917cf44 1118 current_cpu = cpu;
296af7c9 1119
504134d2 1120 r = kvm_init_vcpu(cpu);
84b4915d
JK
1121 if (r < 0) {
1122 fprintf(stderr, "kvm_init_vcpu failed: %s\n", strerror(-r));
1123 exit(1);
1124 }
296af7c9 1125
13618e05 1126 qemu_kvm_init_cpu_signals(cpu);
296af7c9
BS
1127
1128 /* signal CPU creation */
61a46217 1129 cpu->created = true;
296af7c9
BS
1130 qemu_cond_signal(&qemu_cpu_cond);
1131
4c055ab5 1132 do {
a1fcaa73 1133 if (cpu_can_run(cpu)) {
1458c363 1134 r = kvm_cpu_exec(cpu);
83f338f7 1135 if (r == EXCP_DEBUG) {
91325046 1136 cpu_handle_guest_debug(cpu);
83f338f7 1137 }
0ab07c62 1138 }
fd529e8f 1139 qemu_kvm_wait_io_event(cpu);
4c055ab5 1140 } while (!cpu->unplug || cpu_can_run(cpu));
296af7c9 1141
4c055ab5 1142 qemu_kvm_destroy_vcpu(cpu);
2c579042
BR
1143 cpu->created = false;
1144 qemu_cond_signal(&qemu_cpu_cond);
4c055ab5 1145 qemu_mutex_unlock_iothread();
296af7c9
BS
1146 return NULL;
1147}
1148
c7f0f3b1
AL
1149static void *qemu_dummy_cpu_thread_fn(void *arg)
1150{
1151#ifdef _WIN32
1152 fprintf(stderr, "qtest is not supported under Windows\n");
1153 exit(1);
1154#else
10a9021d 1155 CPUState *cpu = arg;
c7f0f3b1
AL
1156 sigset_t waitset;
1157 int r;
1158
ab28bd23
PB
1159 rcu_register_thread();
1160
c7f0f3b1 1161 qemu_mutex_lock_iothread();
814e612e 1162 qemu_thread_get_self(cpu->thread);
9f09e18a 1163 cpu->thread_id = qemu_get_thread_id();
626cf8f4 1164 cpu->can_do_io = 1;
c7f0f3b1
AL
1165
1166 sigemptyset(&waitset);
1167 sigaddset(&waitset, SIG_IPI);
1168
1169 /* signal CPU creation */
61a46217 1170 cpu->created = true;
c7f0f3b1
AL
1171 qemu_cond_signal(&qemu_cpu_cond);
1172
4917cf44 1173 current_cpu = cpu;
c7f0f3b1 1174 while (1) {
4917cf44 1175 current_cpu = NULL;
c7f0f3b1
AL
1176 qemu_mutex_unlock_iothread();
1177 do {
1178 int sig;
1179 r = sigwait(&waitset, &sig);
1180 } while (r == -1 && (errno == EAGAIN || errno == EINTR));
1181 if (r == -1) {
1182 perror("sigwait");
1183 exit(1);
1184 }
1185 qemu_mutex_lock_iothread();
4917cf44 1186 current_cpu = cpu;
509a0d78 1187 qemu_wait_io_event_common(cpu);
c7f0f3b1
AL
1188 }
1189
1190 return NULL;
1191#endif
1192}
1193
1be7fcb8
AB
1194static int64_t tcg_get_icount_limit(void)
1195{
1196 int64_t deadline;
1197
1198 if (replay_mode != REPLAY_MODE_PLAY) {
1199 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
1200
1201 /* Maintain prior (possibly buggy) behaviour where if no deadline
1202 * was set (as there is no QEMU_CLOCK_VIRTUAL timer) or it is more than
1203 * INT32_MAX nanoseconds ahead, we still use INT32_MAX
1204 * nanoseconds.
1205 */
1206 if ((deadline < 0) || (deadline > INT32_MAX)) {
1207 deadline = INT32_MAX;
1208 }
1209
1210 return qemu_icount_round(deadline);
1211 } else {
1212 return replay_get_instructions();
1213 }
1214}
1215
12e9700d
AB
1216static void handle_icount_deadline(void)
1217{
1218 if (use_icount) {
1219 int64_t deadline =
1220 qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
1221
1222 if (deadline == 0) {
1223 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
1224 }
1225 }
1226}
1227
1be7fcb8
AB
1228static int tcg_cpu_exec(CPUState *cpu)
1229{
1230 int ret;
1231#ifdef CONFIG_PROFILER
1232 int64_t ti;
1233#endif
1234
1235#ifdef CONFIG_PROFILER
1236 ti = profile_getclock();
1237#endif
1238 if (use_icount) {
1239 int64_t count;
1240 int decr;
1241 timers_state.qemu_icount -= (cpu->icount_decr.u16.low
1242 + cpu->icount_extra);
1243 cpu->icount_decr.u16.low = 0;
1244 cpu->icount_extra = 0;
1245 count = tcg_get_icount_limit();
1246 timers_state.qemu_icount += count;
1247 decr = (count > 0xffff) ? 0xffff : count;
1248 count -= decr;
1249 cpu->icount_decr.u16.low = decr;
1250 cpu->icount_extra = count;
1251 }
1252 cpu_exec_start(cpu);
1253 ret = cpu_exec(cpu);
1254 cpu_exec_end(cpu);
1255#ifdef CONFIG_PROFILER
1256 tcg_time += profile_getclock() - ti;
1257#endif
1258 if (use_icount) {
1259 /* Fold pending instructions back into the
1260 instruction counter, and clear the interrupt flag. */
1261 timers_state.qemu_icount -= (cpu->icount_decr.u16.low
1262 + cpu->icount_extra);
1263 cpu->icount_decr.u32 = 0;
1264 cpu->icount_extra = 0;
1265 replay_account_executed_instructions();
1266 }
1267 return ret;
1268}
1269
c93bbbef
AB
1270/* Destroy any remaining vCPUs which have been unplugged and have
1271 * finished running
1272 */
1273static void deal_with_unplugged_cpus(void)
1be7fcb8 1274{
c93bbbef 1275 CPUState *cpu;
1be7fcb8 1276
c93bbbef
AB
1277 CPU_FOREACH(cpu) {
1278 if (cpu->unplug && !cpu_can_run(cpu)) {
1279 qemu_tcg_destroy_vcpu(cpu);
1280 cpu->created = false;
1281 qemu_cond_signal(&qemu_cpu_cond);
1be7fcb8
AB
1282 break;
1283 }
1284 }
1be7fcb8 1285}
bdb7ca67 1286
6546706d
AB
1287/* Single-threaded TCG
1288 *
1289 * In the single-threaded case each vCPU is simulated in turn. If
1290 * there is more than a single vCPU we create a simple timer to kick
1291 * the vCPU and ensure we don't get stuck in a tight loop in one vCPU.
1292 * This is done explicitly rather than relying on side-effects
1293 * elsewhere.
1294 */
1295
7e97cd88 1296static void *qemu_tcg_cpu_thread_fn(void *arg)
296af7c9 1297{
c3586ba7 1298 CPUState *cpu = arg;
296af7c9 1299
ab28bd23
PB
1300 rcu_register_thread();
1301
2e7f7a3c 1302 qemu_mutex_lock_iothread();
814e612e 1303 qemu_thread_get_self(cpu->thread);
296af7c9 1304
38fcbd3f
AF
1305 CPU_FOREACH(cpu) {
1306 cpu->thread_id = qemu_get_thread_id();
1307 cpu->created = true;
626cf8f4 1308 cpu->can_do_io = 1;
38fcbd3f 1309 }
296af7c9
BS
1310 qemu_cond_signal(&qemu_cpu_cond);
1311
fa7d1867 1312 /* wait for initial kick-off after machine start */
c28e399c 1313 while (first_cpu->stopped) {
d5f8d613 1314 qemu_cond_wait(first_cpu->halt_cond, &qemu_global_mutex);
8e564b4e
JK
1315
1316 /* process any pending work */
bdc44640 1317 CPU_FOREACH(cpu) {
182735ef 1318 qemu_wait_io_event_common(cpu);
8e564b4e 1319 }
0ab07c62 1320 }
296af7c9 1321
6546706d
AB
1322 start_tcg_kick_timer();
1323
21618b3e 1324 /* process any pending work */
aed807c8 1325 atomic_mb_set(&exit_request, 1);
21618b3e 1326
c93bbbef
AB
1327 cpu = first_cpu;
1328
296af7c9 1329 while (1) {
c93bbbef
AB
1330 /* Account partial waits to QEMU_CLOCK_VIRTUAL. */
1331 qemu_account_warp_timer();
1332
1333 if (!cpu) {
1334 cpu = first_cpu;
1335 }
1336
1337 for (; cpu != NULL && !exit_request; cpu = CPU_NEXT(cpu)) {
791158d9 1338 atomic_mb_set(&tcg_current_rr_cpu, cpu);
c93bbbef
AB
1339
1340 qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
1341 (cpu->singlestep_enabled & SSTEP_NOTIMER) == 0);
1342
1343 if (cpu_can_run(cpu)) {
1344 int r;
1345 r = tcg_cpu_exec(cpu);
1346 if (r == EXCP_DEBUG) {
1347 cpu_handle_guest_debug(cpu);
1348 break;
1349 }
1350 } else if (cpu->stop || cpu->stopped) {
1351 if (cpu->unplug) {
1352 cpu = CPU_NEXT(cpu);
1353 }
1354 break;
1355 }
1356
1357 } /* for cpu.. */
791158d9
AB
1358 /* Does not need atomic_mb_set because a spurious wakeup is okay. */
1359 atomic_set(&tcg_current_rr_cpu, NULL);
c93bbbef
AB
1360
1361 /* Pairs with smp_wmb in qemu_cpu_kick. */
1362 atomic_mb_set(&exit_request, 0);
ac70aafc 1363
12e9700d 1364 handle_icount_deadline();
ac70aafc 1365
d5f8d613 1366 qemu_tcg_wait_io_event(QTAILQ_FIRST(&cpus));
c93bbbef 1367 deal_with_unplugged_cpus();
296af7c9
BS
1368 }
1369
1370 return NULL;
1371}
1372
b0cb0a66
VP
1373static void *qemu_hax_cpu_thread_fn(void *arg)
1374{
1375 CPUState *cpu = arg;
1376 int r;
1377 qemu_thread_get_self(cpu->thread);
1378 qemu_mutex_lock(&qemu_global_mutex);
1379
1380 cpu->thread_id = qemu_get_thread_id();
1381 cpu->created = true;
1382 cpu->halted = 0;
1383 current_cpu = cpu;
1384
1385 hax_init_vcpu(cpu);
1386 qemu_cond_signal(&qemu_cpu_cond);
1387
1388 while (1) {
1389 if (cpu_can_run(cpu)) {
1390 r = hax_smp_cpu_exec(cpu);
1391 if (r == EXCP_DEBUG) {
1392 cpu_handle_guest_debug(cpu);
1393 }
1394 }
1395
1396 while (cpu_thread_is_idle(cpu)) {
1397 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
1398 }
1399#ifdef _WIN32
1400 SleepEx(0, TRUE);
1401#endif
1402 qemu_wait_io_event_common(cpu);
1403 }
1404 return NULL;
1405}
1406
1407#ifdef _WIN32
1408static void CALLBACK dummy_apc_func(ULONG_PTR unused)
1409{
1410}
1411#endif
1412
2ff09a40 1413static void qemu_cpu_kick_thread(CPUState *cpu)
cc015e9a
PB
1414{
1415#ifndef _WIN32
1416 int err;
1417
e0c38211
PB
1418 if (cpu->thread_kicked) {
1419 return;
9102deda 1420 }
e0c38211 1421 cpu->thread_kicked = true;
814e612e 1422 err = pthread_kill(cpu->thread->thread, SIG_IPI);
cc015e9a
PB
1423 if (err) {
1424 fprintf(stderr, "qemu:%s: %s", __func__, strerror(err));
1425 exit(1);
1426 }
1427#else /* _WIN32 */
b0cb0a66
VP
1428 if (!qemu_cpu_is_self(cpu)) {
1429 if (!QueueUserAPC(dummy_apc_func, cpu->hThread, 0)) {
1430 fprintf(stderr, "%s: QueueUserAPC failed with error %lu\n",
1431 __func__, GetLastError());
1432 exit(1);
1433 }
1434 }
e0c38211
PB
1435#endif
1436}
ed9164a3 1437
c08d7424 1438void qemu_cpu_kick(CPUState *cpu)
296af7c9 1439{
f5c121b8 1440 qemu_cond_broadcast(cpu->halt_cond);
e0c38211 1441 if (tcg_enabled()) {
791158d9
AB
1442 cpu_exit(cpu);
1443 /* Also ensure current RR cpu is kicked */
1444 qemu_cpu_kick_rr_cpu();
e0c38211 1445 } else {
b0cb0a66
VP
1446 if (hax_enabled()) {
1447 /*
1448 * FIXME: race condition with the exit_request check in
1449 * hax_vcpu_hax_exec
1450 */
1451 cpu->exit_request = 1;
1452 }
e0c38211
PB
1453 qemu_cpu_kick_thread(cpu);
1454 }
296af7c9
BS
1455}
1456
46d62fac 1457void qemu_cpu_kick_self(void)
296af7c9 1458{
4917cf44 1459 assert(current_cpu);
9102deda 1460 qemu_cpu_kick_thread(current_cpu);
296af7c9
BS
1461}
1462
60e82579 1463bool qemu_cpu_is_self(CPUState *cpu)
296af7c9 1464{
814e612e 1465 return qemu_thread_is_self(cpu->thread);
296af7c9
BS
1466}
1467
79e2b9ae 1468bool qemu_in_vcpu_thread(void)
aa723c23 1469{
4917cf44 1470 return current_cpu && qemu_cpu_is_self(current_cpu);
aa723c23
JQ
1471}
1472
afbe7053
PB
1473static __thread bool iothread_locked = false;
1474
1475bool qemu_mutex_iothread_locked(void)
1476{
1477 return iothread_locked;
1478}
1479
296af7c9
BS
1480void qemu_mutex_lock_iothread(void)
1481{
21618b3e 1482 atomic_inc(&iothread_requesting_mutex);
2e7f7a3c
PB
1483 /* In the simple case there is no need to bump the VCPU thread out of
1484 * TCG code execution.
1485 */
1486 if (!tcg_enabled() || qemu_in_vcpu_thread() ||
46036b24 1487 !first_cpu || !first_cpu->created) {
296af7c9 1488 qemu_mutex_lock(&qemu_global_mutex);
21618b3e 1489 atomic_dec(&iothread_requesting_mutex);
1a28cac3 1490 } else {
1a28cac3 1491 if (qemu_mutex_trylock(&qemu_global_mutex)) {
791158d9 1492 qemu_cpu_kick_rr_cpu();
1a28cac3
MT
1493 qemu_mutex_lock(&qemu_global_mutex);
1494 }
6b49809c 1495 atomic_dec(&iothread_requesting_mutex);
46daff13 1496 qemu_cond_broadcast(&qemu_io_proceeded_cond);
1a28cac3 1497 }
afbe7053 1498 iothread_locked = true;
296af7c9
BS
1499}
1500
1501void qemu_mutex_unlock_iothread(void)
1502{
afbe7053 1503 iothread_locked = false;
296af7c9
BS
1504 qemu_mutex_unlock(&qemu_global_mutex);
1505}
1506
e8faee06 1507static bool all_vcpus_paused(void)
296af7c9 1508{
bdc44640 1509 CPUState *cpu;
296af7c9 1510
bdc44640 1511 CPU_FOREACH(cpu) {
182735ef 1512 if (!cpu->stopped) {
e8faee06 1513 return false;
0ab07c62 1514 }
296af7c9
BS
1515 }
1516
e8faee06 1517 return true;
296af7c9
BS
1518}
1519
1520void pause_all_vcpus(void)
1521{
bdc44640 1522 CPUState *cpu;
296af7c9 1523
40daca54 1524 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, false);
bdc44640 1525 CPU_FOREACH(cpu) {
182735ef
AF
1526 cpu->stop = true;
1527 qemu_cpu_kick(cpu);
296af7c9
BS
1528 }
1529
aa723c23 1530 if (qemu_in_vcpu_thread()) {
d798e974
JK
1531 cpu_stop_current();
1532 if (!kvm_enabled()) {
bdc44640 1533 CPU_FOREACH(cpu) {
182735ef
AF
1534 cpu->stop = false;
1535 cpu->stopped = true;
d798e974
JK
1536 }
1537 return;
1538 }
1539 }
1540
296af7c9 1541 while (!all_vcpus_paused()) {
be7d6c57 1542 qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex);
bdc44640 1543 CPU_FOREACH(cpu) {
182735ef 1544 qemu_cpu_kick(cpu);
296af7c9
BS
1545 }
1546 }
1547}
1548
2993683b
IM
1549void cpu_resume(CPUState *cpu)
1550{
1551 cpu->stop = false;
1552 cpu->stopped = false;
1553 qemu_cpu_kick(cpu);
1554}
1555
296af7c9
BS
1556void resume_all_vcpus(void)
1557{
bdc44640 1558 CPUState *cpu;
296af7c9 1559
40daca54 1560 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true);
bdc44640 1561 CPU_FOREACH(cpu) {
182735ef 1562 cpu_resume(cpu);
296af7c9
BS
1563 }
1564}
1565
4c055ab5
GZ
1566void cpu_remove(CPUState *cpu)
1567{
1568 cpu->stop = true;
1569 cpu->unplug = true;
1570 qemu_cpu_kick(cpu);
1571}
1572
2c579042
BR
1573void cpu_remove_sync(CPUState *cpu)
1574{
1575 cpu_remove(cpu);
1576 while (cpu->created) {
1577 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1578 }
1579}
1580
4900116e
DDAG
1581/* For temporary buffers for forming a name */
1582#define VCPU_THREAD_NAME_SIZE 16
1583
e5ab30a2 1584static void qemu_tcg_init_vcpu(CPUState *cpu)
296af7c9 1585{
4900116e 1586 char thread_name[VCPU_THREAD_NAME_SIZE];
d5f8d613
FK
1587 static QemuCond *tcg_halt_cond;
1588 static QemuThread *tcg_cpu_thread;
4900116e 1589
296af7c9
BS
1590 /* share a single thread for all cpus with TCG */
1591 if (!tcg_cpu_thread) {
814e612e 1592 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1593 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1594 qemu_cond_init(cpu->halt_cond);
1595 tcg_halt_cond = cpu->halt_cond;
4900116e
DDAG
1596 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
1597 cpu->cpu_index);
1598 qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
1599 cpu, QEMU_THREAD_JOINABLE);
1ecf47bf 1600#ifdef _WIN32
814e612e 1601 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1ecf47bf 1602#endif
61a46217 1603 while (!cpu->created) {
18a85728 1604 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
0ab07c62 1605 }
814e612e 1606 tcg_cpu_thread = cpu->thread;
296af7c9 1607 } else {
814e612e 1608 cpu->thread = tcg_cpu_thread;
f5c121b8 1609 cpu->halt_cond = tcg_halt_cond;
296af7c9
BS
1610 }
1611}
1612
b0cb0a66
VP
1613static void qemu_hax_start_vcpu(CPUState *cpu)
1614{
1615 char thread_name[VCPU_THREAD_NAME_SIZE];
1616
1617 cpu->thread = g_malloc0(sizeof(QemuThread));
1618 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1619 qemu_cond_init(cpu->halt_cond);
1620
1621 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HAX",
1622 cpu->cpu_index);
1623 qemu_thread_create(cpu->thread, thread_name, qemu_hax_cpu_thread_fn,
1624 cpu, QEMU_THREAD_JOINABLE);
1625#ifdef _WIN32
1626 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1627#endif
1628 while (!cpu->created) {
1629 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1630 }
1631}
1632
48a106bd 1633static void qemu_kvm_start_vcpu(CPUState *cpu)
296af7c9 1634{
4900116e
DDAG
1635 char thread_name[VCPU_THREAD_NAME_SIZE];
1636
814e612e 1637 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1638 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1639 qemu_cond_init(cpu->halt_cond);
4900116e
DDAG
1640 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
1641 cpu->cpu_index);
1642 qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn,
1643 cpu, QEMU_THREAD_JOINABLE);
61a46217 1644 while (!cpu->created) {
18a85728 1645 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
0ab07c62 1646 }
296af7c9
BS
1647}
1648
10a9021d 1649static void qemu_dummy_start_vcpu(CPUState *cpu)
c7f0f3b1 1650{
4900116e
DDAG
1651 char thread_name[VCPU_THREAD_NAME_SIZE];
1652
814e612e 1653 cpu->thread = g_malloc0(sizeof(QemuThread));
f5c121b8
AF
1654 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1655 qemu_cond_init(cpu->halt_cond);
4900116e
DDAG
1656 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
1657 cpu->cpu_index);
1658 qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, cpu,
c7f0f3b1 1659 QEMU_THREAD_JOINABLE);
61a46217 1660 while (!cpu->created) {
c7f0f3b1
AL
1661 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1662 }
1663}
1664
c643bed9 1665void qemu_init_vcpu(CPUState *cpu)
296af7c9 1666{
ce3960eb
AF
1667 cpu->nr_cores = smp_cores;
1668 cpu->nr_threads = smp_threads;
f324e766 1669 cpu->stopped = true;
56943e8c
PM
1670
1671 if (!cpu->as) {
1672 /* If the target cpu hasn't set up any address spaces itself,
1673 * give it the default one.
1674 */
6731d864
PC
1675 AddressSpace *as = address_space_init_shareable(cpu->memory,
1676 "cpu-memory");
12ebc9a7 1677 cpu->num_ases = 1;
6731d864 1678 cpu_address_space_init(cpu, as, 0);
56943e8c
PM
1679 }
1680
0ab07c62 1681 if (kvm_enabled()) {
48a106bd 1682 qemu_kvm_start_vcpu(cpu);
b0cb0a66
VP
1683 } else if (hax_enabled()) {
1684 qemu_hax_start_vcpu(cpu);
c7f0f3b1 1685 } else if (tcg_enabled()) {
e5ab30a2 1686 qemu_tcg_init_vcpu(cpu);
c7f0f3b1 1687 } else {
10a9021d 1688 qemu_dummy_start_vcpu(cpu);
0ab07c62 1689 }
296af7c9
BS
1690}
1691
b4a3d965 1692void cpu_stop_current(void)
296af7c9 1693{
4917cf44
AF
1694 if (current_cpu) {
1695 current_cpu->stop = false;
1696 current_cpu->stopped = true;
1697 cpu_exit(current_cpu);
96bce683 1698 qemu_cond_broadcast(&qemu_pause_cond);
b4a3d965 1699 }
296af7c9
BS
1700}
1701
56983463 1702int vm_stop(RunState state)
296af7c9 1703{
aa723c23 1704 if (qemu_in_vcpu_thread()) {
74892d24 1705 qemu_system_vmstop_request_prepare();
1dfb4dd9 1706 qemu_system_vmstop_request(state);
296af7c9
BS
1707 /*
1708 * FIXME: should not return to device code in case
1709 * vm_stop() has been requested.
1710 */
b4a3d965 1711 cpu_stop_current();
56983463 1712 return 0;
296af7c9 1713 }
56983463
KW
1714
1715 return do_vm_stop(state);
296af7c9
BS
1716}
1717
2d76e823
CI
1718/**
1719 * Prepare for (re)starting the VM.
1720 * Returns -1 if the vCPUs are not to be restarted (e.g. if they are already
1721 * running or in case of an error condition), 0 otherwise.
1722 */
1723int vm_prepare_start(void)
1724{
1725 RunState requested;
1726 int res = 0;
1727
1728 qemu_vmstop_requested(&requested);
1729 if (runstate_is_running() && requested == RUN_STATE__MAX) {
1730 return -1;
1731 }
1732
1733 /* Ensure that a STOP/RESUME pair of events is emitted if a
1734 * vmstop request was pending. The BLOCK_IO_ERROR event, for
1735 * example, according to documentation is always followed by
1736 * the STOP event.
1737 */
1738 if (runstate_is_running()) {
1739 qapi_event_send_stop(&error_abort);
1740 res = -1;
1741 } else {
1742 replay_enable_events();
1743 cpu_enable_ticks();
1744 runstate_set(RUN_STATE_RUNNING);
1745 vm_state_notify(1, RUN_STATE_RUNNING);
1746 }
1747
1748 /* We are sending this now, but the CPUs will be resumed shortly later */
1749 qapi_event_send_resume(&error_abort);
1750 return res;
1751}
1752
1753void vm_start(void)
1754{
1755 if (!vm_prepare_start()) {
1756 resume_all_vcpus();
1757 }
1758}
1759
8a9236f1
LC
1760/* does a state transition even if the VM is already stopped,
1761 current state is forgotten forever */
56983463 1762int vm_stop_force_state(RunState state)
8a9236f1
LC
1763{
1764 if (runstate_is_running()) {
56983463 1765 return vm_stop(state);
8a9236f1
LC
1766 } else {
1767 runstate_set(state);
b2780d32
WC
1768
1769 bdrv_drain_all();
594a45ce
KW
1770 /* Make sure to return an error if the flush in a previous vm_stop()
1771 * failed. */
22af08ea 1772 return bdrv_flush_all();
8a9236f1
LC
1773 }
1774}
1775
9a78eead 1776void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg)
262353cb
BS
1777{
1778 /* XXX: implement xxx_cpu_list for targets that still miss it */
e916cbf8
PM
1779#if defined(cpu_list)
1780 cpu_list(f, cpu_fprintf);
262353cb
BS
1781#endif
1782}
de0b36b6
LC
1783
1784CpuInfoList *qmp_query_cpus(Error **errp)
1785{
1786 CpuInfoList *head = NULL, *cur_item = NULL;
182735ef 1787 CPUState *cpu;
de0b36b6 1788
bdc44640 1789 CPU_FOREACH(cpu) {
de0b36b6 1790 CpuInfoList *info;
182735ef
AF
1791#if defined(TARGET_I386)
1792 X86CPU *x86_cpu = X86_CPU(cpu);
1793 CPUX86State *env = &x86_cpu->env;
1794#elif defined(TARGET_PPC)
1795 PowerPCCPU *ppc_cpu = POWERPC_CPU(cpu);
1796 CPUPPCState *env = &ppc_cpu->env;
1797#elif defined(TARGET_SPARC)
1798 SPARCCPU *sparc_cpu = SPARC_CPU(cpu);
1799 CPUSPARCState *env = &sparc_cpu->env;
1800#elif defined(TARGET_MIPS)
1801 MIPSCPU *mips_cpu = MIPS_CPU(cpu);
1802 CPUMIPSState *env = &mips_cpu->env;
48e06fe0
BK
1803#elif defined(TARGET_TRICORE)
1804 TriCoreCPU *tricore_cpu = TRICORE_CPU(cpu);
1805 CPUTriCoreState *env = &tricore_cpu->env;
182735ef 1806#endif
de0b36b6 1807
cb446eca 1808 cpu_synchronize_state(cpu);
de0b36b6
LC
1809
1810 info = g_malloc0(sizeof(*info));
1811 info->value = g_malloc0(sizeof(*info->value));
55e5c285 1812 info->value->CPU = cpu->cpu_index;
182735ef 1813 info->value->current = (cpu == first_cpu);
259186a7 1814 info->value->halted = cpu->halted;
58f88d4b 1815 info->value->qom_path = object_get_canonical_path(OBJECT(cpu));
9f09e18a 1816 info->value->thread_id = cpu->thread_id;
de0b36b6 1817#if defined(TARGET_I386)
86f4b687 1818 info->value->arch = CPU_INFO_ARCH_X86;
544a3731 1819 info->value->u.x86.pc = env->eip + env->segs[R_CS].base;
de0b36b6 1820#elif defined(TARGET_PPC)
86f4b687 1821 info->value->arch = CPU_INFO_ARCH_PPC;
544a3731 1822 info->value->u.ppc.nip = env->nip;
de0b36b6 1823#elif defined(TARGET_SPARC)
86f4b687 1824 info->value->arch = CPU_INFO_ARCH_SPARC;
544a3731
EB
1825 info->value->u.q_sparc.pc = env->pc;
1826 info->value->u.q_sparc.npc = env->npc;
de0b36b6 1827#elif defined(TARGET_MIPS)
86f4b687 1828 info->value->arch = CPU_INFO_ARCH_MIPS;
544a3731 1829 info->value->u.q_mips.PC = env->active_tc.PC;
48e06fe0 1830#elif defined(TARGET_TRICORE)
86f4b687 1831 info->value->arch = CPU_INFO_ARCH_TRICORE;
544a3731 1832 info->value->u.tricore.PC = env->PC;
86f4b687
EB
1833#else
1834 info->value->arch = CPU_INFO_ARCH_OTHER;
de0b36b6
LC
1835#endif
1836
1837 /* XXX: waiting for the qapi to support GSList */
1838 if (!cur_item) {
1839 head = cur_item = info;
1840 } else {
1841 cur_item->next = info;
1842 cur_item = info;
1843 }
1844 }
1845
1846 return head;
1847}
0cfd6a9a
LC
1848
1849void qmp_memsave(int64_t addr, int64_t size, const char *filename,
1850 bool has_cpu, int64_t cpu_index, Error **errp)
1851{
1852 FILE *f;
1853 uint32_t l;
55e5c285 1854 CPUState *cpu;
0cfd6a9a 1855 uint8_t buf[1024];
0dc9daf0 1856 int64_t orig_addr = addr, orig_size = size;
0cfd6a9a
LC
1857
1858 if (!has_cpu) {
1859 cpu_index = 0;
1860 }
1861
151d1322
AF
1862 cpu = qemu_get_cpu(cpu_index);
1863 if (cpu == NULL) {
c6bd8c70
MA
1864 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
1865 "a CPU number");
0cfd6a9a
LC
1866 return;
1867 }
1868
1869 f = fopen(filename, "wb");
1870 if (!f) {
618da851 1871 error_setg_file_open(errp, errno, filename);
0cfd6a9a
LC
1872 return;
1873 }
1874
1875 while (size != 0) {
1876 l = sizeof(buf);
1877 if (l > size)
1878 l = size;
2f4d0f59 1879 if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
0dc9daf0
BP
1880 error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRId64
1881 " specified", orig_addr, orig_size);
2f4d0f59
AK
1882 goto exit;
1883 }
0cfd6a9a 1884 if (fwrite(buf, 1, l, f) != l) {
c6bd8c70 1885 error_setg(errp, QERR_IO_ERROR);
0cfd6a9a
LC
1886 goto exit;
1887 }
1888 addr += l;
1889 size -= l;
1890 }
1891
1892exit:
1893 fclose(f);
1894}
6d3962bf
LC
1895
1896void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
1897 Error **errp)
1898{
1899 FILE *f;
1900 uint32_t l;
1901 uint8_t buf[1024];
1902
1903 f = fopen(filename, "wb");
1904 if (!f) {
618da851 1905 error_setg_file_open(errp, errno, filename);
6d3962bf
LC
1906 return;
1907 }
1908
1909 while (size != 0) {
1910 l = sizeof(buf);
1911 if (l > size)
1912 l = size;
eb6282f2 1913 cpu_physical_memory_read(addr, buf, l);
6d3962bf 1914 if (fwrite(buf, 1, l, f) != l) {
c6bd8c70 1915 error_setg(errp, QERR_IO_ERROR);
6d3962bf
LC
1916 goto exit;
1917 }
1918 addr += l;
1919 size -= l;
1920 }
1921
1922exit:
1923 fclose(f);
1924}
ab49ab5c
LC
1925
1926void qmp_inject_nmi(Error **errp)
1927{
9cb805fd 1928 nmi_monitor_handle(monitor_get_cpu_index(), errp);
ab49ab5c 1929}
27498bef
ST
1930
1931void dump_drift_info(FILE *f, fprintf_function cpu_fprintf)
1932{
1933 if (!use_icount) {
1934 return;
1935 }
1936
1937 cpu_fprintf(f, "Host - Guest clock %"PRIi64" ms\n",
1938 (cpu_get_clock() - cpu_get_icount())/SCALE_MS);
1939 if (icount_align_option) {
1940 cpu_fprintf(f, "Max guest delay %"PRIi64" ms\n", -max_delay/SCALE_MS);
1941 cpu_fprintf(f, "Max guest advance %"PRIi64" ms\n", max_advance/SCALE_MS);
1942 } else {
1943 cpu_fprintf(f, "Max guest delay NA\n");
1944 cpu_fprintf(f, "Max guest advance NA\n");
1945 }
1946}