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