ui: avoid pointless VNC updates if framebuffer isn't dirty
[qemu/ar7.git] / cpus.c
blobe8139de534859a1163afb3fe94dd368218fb2968
1 /*
2 * QEMU System Emulator
4 * Copyright (c) 2003-2008 Fabrice Bellard
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:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
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.
25 /* Needed early for CONFIG_BSD etc. */
26 #include "qemu/osdep.h"
27 #include "qemu-common.h"
28 #include "qemu/config-file.h"
29 #include "cpu.h"
30 #include "monitor/monitor.h"
31 #include "qapi/qmp/qerror.h"
32 #include "qemu/error-report.h"
33 #include "sysemu/sysemu.h"
34 #include "sysemu/block-backend.h"
35 #include "exec/gdbstub.h"
36 #include "sysemu/dma.h"
37 #include "sysemu/hw_accel.h"
38 #include "sysemu/kvm.h"
39 #include "sysemu/hax.h"
40 #include "sysemu/hvf.h"
41 #include "qmp-commands.h"
42 #include "exec/exec-all.h"
44 #include "qemu/thread.h"
45 #include "sysemu/cpus.h"
46 #include "sysemu/qtest.h"
47 #include "qemu/main-loop.h"
48 #include "qemu/bitmap.h"
49 #include "qemu/seqlock.h"
50 #include "tcg.h"
51 #include "qapi-event.h"
52 #include "hw/nmi.h"
53 #include "sysemu/replay.h"
54 #include "hw/boards.h"
56 #ifdef CONFIG_LINUX
58 #include <sys/prctl.h>
60 #ifndef PR_MCE_KILL
61 #define PR_MCE_KILL 33
62 #endif
64 #ifndef PR_MCE_KILL_SET
65 #define PR_MCE_KILL_SET 1
66 #endif
68 #ifndef PR_MCE_KILL_EARLY
69 #define PR_MCE_KILL_EARLY 1
70 #endif
72 #endif /* CONFIG_LINUX */
74 int64_t max_delay;
75 int64_t max_advance;
77 /* vcpu throttling controls */
78 static QEMUTimer *throttle_timer;
79 static unsigned int throttle_percentage;
81 #define CPU_THROTTLE_PCT_MIN 1
82 #define CPU_THROTTLE_PCT_MAX 99
83 #define CPU_THROTTLE_TIMESLICE_NS 10000000
85 bool cpu_is_stopped(CPUState *cpu)
87 return cpu->stopped || !runstate_is_running();
90 static bool cpu_thread_is_idle(CPUState *cpu)
92 if (cpu->stop || cpu->queued_work_first) {
93 return false;
95 if (cpu_is_stopped(cpu)) {
96 return true;
98 if (!cpu->halted || cpu_has_work(cpu) ||
99 kvm_halt_in_kernel()) {
100 return false;
102 return true;
105 static bool all_cpu_threads_idle(void)
107 CPUState *cpu;
109 CPU_FOREACH(cpu) {
110 if (!cpu_thread_is_idle(cpu)) {
111 return false;
114 return true;
117 /***********************************************************/
118 /* guest cycle counter */
120 /* Protected by TimersState seqlock */
122 static bool icount_sleep = true;
123 static int64_t vm_clock_warp_start = -1;
124 /* Conversion factor from emulated instructions to virtual clock ticks. */
125 static int icount_time_shift;
126 /* Arbitrarily pick 1MIPS as the minimum allowable speed. */
127 #define MAX_ICOUNT_SHIFT 10
129 static QEMUTimer *icount_rt_timer;
130 static QEMUTimer *icount_vm_timer;
131 static QEMUTimer *icount_warp_timer;
133 typedef struct TimersState {
134 /* Protected by BQL. */
135 int64_t cpu_ticks_prev;
136 int64_t cpu_ticks_offset;
138 /* cpu_clock_offset can be read out of BQL, so protect it with
139 * this lock.
141 QemuSeqLock vm_clock_seqlock;
142 int64_t cpu_clock_offset;
143 int32_t cpu_ticks_enabled;
144 int64_t dummy;
146 /* Compensate for varying guest execution speed. */
147 int64_t qemu_icount_bias;
148 /* Only written by TCG thread */
149 int64_t qemu_icount;
150 } TimersState;
152 static TimersState timers_state;
153 bool mttcg_enabled;
156 * We default to false if we know other options have been enabled
157 * which are currently incompatible with MTTCG. Otherwise when each
158 * guest (target) has been updated to support:
159 * - atomic instructions
160 * - memory ordering primitives (barriers)
161 * they can set the appropriate CONFIG flags in ${target}-softmmu.mak
163 * Once a guest architecture has been converted to the new primitives
164 * there are two remaining limitations to check.
166 * - The guest can't be oversized (e.g. 64 bit guest on 32 bit host)
167 * - The host must have a stronger memory order than the guest
169 * It may be possible in future to support strong guests on weak hosts
170 * but that will require tagging all load/stores in a guest with their
171 * implicit memory order requirements which would likely slow things
172 * down a lot.
175 static bool check_tcg_memory_orders_compatible(void)
177 #if defined(TCG_GUEST_DEFAULT_MO) && defined(TCG_TARGET_DEFAULT_MO)
178 return (TCG_GUEST_DEFAULT_MO & ~TCG_TARGET_DEFAULT_MO) == 0;
179 #else
180 return false;
181 #endif
184 static bool default_mttcg_enabled(void)
186 if (use_icount || TCG_OVERSIZED_GUEST) {
187 return false;
188 } else {
189 #ifdef TARGET_SUPPORTS_MTTCG
190 return check_tcg_memory_orders_compatible();
191 #else
192 return false;
193 #endif
197 void qemu_tcg_configure(QemuOpts *opts, Error **errp)
199 const char *t = qemu_opt_get(opts, "thread");
200 if (t) {
201 if (strcmp(t, "multi") == 0) {
202 if (TCG_OVERSIZED_GUEST) {
203 error_setg(errp, "No MTTCG when guest word size > hosts");
204 } else if (use_icount) {
205 error_setg(errp, "No MTTCG when icount is enabled");
206 } else {
207 #ifndef TARGET_SUPPORTS_MTTCG
208 error_report("Guest not yet converted to MTTCG - "
209 "you may get unexpected results");
210 #endif
211 if (!check_tcg_memory_orders_compatible()) {
212 error_report("Guest expects a stronger memory ordering "
213 "than the host provides");
214 error_printf("This may cause strange/hard to debug errors\n");
216 mttcg_enabled = true;
218 } else if (strcmp(t, "single") == 0) {
219 mttcg_enabled = false;
220 } else {
221 error_setg(errp, "Invalid 'thread' setting %s", t);
223 } else {
224 mttcg_enabled = default_mttcg_enabled();
228 /* The current number of executed instructions is based on what we
229 * originally budgeted minus the current state of the decrementing
230 * icount counters in extra/u16.low.
232 static int64_t cpu_get_icount_executed(CPUState *cpu)
234 return cpu->icount_budget - (cpu->icount_decr.u16.low + cpu->icount_extra);
238 * Update the global shared timer_state.qemu_icount to take into
239 * account executed instructions. This is done by the TCG vCPU
240 * thread so the main-loop can see time has moved forward.
242 void cpu_update_icount(CPUState *cpu)
244 int64_t executed = cpu_get_icount_executed(cpu);
245 cpu->icount_budget -= executed;
247 #ifdef CONFIG_ATOMIC64
248 atomic_set__nocheck(&timers_state.qemu_icount,
249 atomic_read__nocheck(&timers_state.qemu_icount) +
250 executed);
251 #else /* FIXME: we need 64bit atomics to do this safely */
252 timers_state.qemu_icount += executed;
253 #endif
256 int64_t cpu_get_icount_raw(void)
258 CPUState *cpu = current_cpu;
260 if (cpu && cpu->running) {
261 if (!cpu->can_do_io) {
262 fprintf(stderr, "Bad icount read\n");
263 exit(1);
265 /* Take into account what has run */
266 cpu_update_icount(cpu);
268 #ifdef CONFIG_ATOMIC64
269 return atomic_read__nocheck(&timers_state.qemu_icount);
270 #else /* FIXME: we need 64bit atomics to do this safely */
271 return timers_state.qemu_icount;
272 #endif
275 /* Return the virtual CPU time, based on the instruction counter. */
276 static int64_t cpu_get_icount_locked(void)
278 int64_t icount = cpu_get_icount_raw();
279 return timers_state.qemu_icount_bias + cpu_icount_to_ns(icount);
282 int64_t cpu_get_icount(void)
284 int64_t icount;
285 unsigned start;
287 do {
288 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
289 icount = cpu_get_icount_locked();
290 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
292 return icount;
295 int64_t cpu_icount_to_ns(int64_t icount)
297 return icount << icount_time_shift;
300 /* return the time elapsed in VM between vm_start and vm_stop. Unless
301 * icount is active, cpu_get_ticks() uses units of the host CPU cycle
302 * counter.
304 * Caller must hold the BQL
306 int64_t cpu_get_ticks(void)
308 int64_t ticks;
310 if (use_icount) {
311 return cpu_get_icount();
314 ticks = timers_state.cpu_ticks_offset;
315 if (timers_state.cpu_ticks_enabled) {
316 ticks += cpu_get_host_ticks();
319 if (timers_state.cpu_ticks_prev > ticks) {
320 /* Note: non increasing ticks may happen if the host uses
321 software suspend */
322 timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
323 ticks = timers_state.cpu_ticks_prev;
326 timers_state.cpu_ticks_prev = ticks;
327 return ticks;
330 static int64_t cpu_get_clock_locked(void)
332 int64_t time;
334 time = timers_state.cpu_clock_offset;
335 if (timers_state.cpu_ticks_enabled) {
336 time += get_clock();
339 return time;
342 /* Return the monotonic time elapsed in VM, i.e.,
343 * the time between vm_start and vm_stop
345 int64_t cpu_get_clock(void)
347 int64_t ti;
348 unsigned start;
350 do {
351 start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
352 ti = cpu_get_clock_locked();
353 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
355 return ti;
358 /* enable cpu_get_ticks()
359 * Caller must hold BQL which serves as mutex for vm_clock_seqlock.
361 void cpu_enable_ticks(void)
363 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
364 seqlock_write_begin(&timers_state.vm_clock_seqlock);
365 if (!timers_state.cpu_ticks_enabled) {
366 timers_state.cpu_ticks_offset -= cpu_get_host_ticks();
367 timers_state.cpu_clock_offset -= get_clock();
368 timers_state.cpu_ticks_enabled = 1;
370 seqlock_write_end(&timers_state.vm_clock_seqlock);
373 /* disable cpu_get_ticks() : the clock is stopped. You must not call
374 * cpu_get_ticks() after that.
375 * Caller must hold BQL which serves as mutex for vm_clock_seqlock.
377 void cpu_disable_ticks(void)
379 /* Here, the really thing protected by seqlock is cpu_clock_offset. */
380 seqlock_write_begin(&timers_state.vm_clock_seqlock);
381 if (timers_state.cpu_ticks_enabled) {
382 timers_state.cpu_ticks_offset += cpu_get_host_ticks();
383 timers_state.cpu_clock_offset = cpu_get_clock_locked();
384 timers_state.cpu_ticks_enabled = 0;
386 seqlock_write_end(&timers_state.vm_clock_seqlock);
389 /* Correlation between real and virtual time is always going to be
390 fairly approximate, so ignore small variation.
391 When the guest is idle real and virtual time will be aligned in
392 the IO wait loop. */
393 #define ICOUNT_WOBBLE (NANOSECONDS_PER_SECOND / 10)
395 static void icount_adjust(void)
397 int64_t cur_time;
398 int64_t cur_icount;
399 int64_t delta;
401 /* Protected by TimersState mutex. */
402 static int64_t last_delta;
404 /* If the VM is not running, then do nothing. */
405 if (!runstate_is_running()) {
406 return;
409 seqlock_write_begin(&timers_state.vm_clock_seqlock);
410 cur_time = cpu_get_clock_locked();
411 cur_icount = cpu_get_icount_locked();
413 delta = cur_icount - cur_time;
414 /* FIXME: This is a very crude algorithm, somewhat prone to oscillation. */
415 if (delta > 0
416 && last_delta + ICOUNT_WOBBLE < delta * 2
417 && icount_time_shift > 0) {
418 /* The guest is getting too far ahead. Slow time down. */
419 icount_time_shift--;
421 if (delta < 0
422 && last_delta - ICOUNT_WOBBLE > delta * 2
423 && icount_time_shift < MAX_ICOUNT_SHIFT) {
424 /* The guest is getting too far behind. Speed time up. */
425 icount_time_shift++;
427 last_delta = delta;
428 timers_state.qemu_icount_bias = cur_icount
429 - (timers_state.qemu_icount << icount_time_shift);
430 seqlock_write_end(&timers_state.vm_clock_seqlock);
433 static void icount_adjust_rt(void *opaque)
435 timer_mod(icount_rt_timer,
436 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
437 icount_adjust();
440 static void icount_adjust_vm(void *opaque)
442 timer_mod(icount_vm_timer,
443 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
444 NANOSECONDS_PER_SECOND / 10);
445 icount_adjust();
448 static int64_t qemu_icount_round(int64_t count)
450 return (count + (1 << icount_time_shift) - 1) >> icount_time_shift;
453 static void icount_warp_rt(void)
455 unsigned seq;
456 int64_t warp_start;
458 /* The icount_warp_timer is rescheduled soon after vm_clock_warp_start
459 * changes from -1 to another value, so the race here is okay.
461 do {
462 seq = seqlock_read_begin(&timers_state.vm_clock_seqlock);
463 warp_start = vm_clock_warp_start;
464 } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, seq));
466 if (warp_start == -1) {
467 return;
470 seqlock_write_begin(&timers_state.vm_clock_seqlock);
471 if (runstate_is_running()) {
472 int64_t clock = REPLAY_CLOCK(REPLAY_CLOCK_VIRTUAL_RT,
473 cpu_get_clock_locked());
474 int64_t warp_delta;
476 warp_delta = clock - vm_clock_warp_start;
477 if (use_icount == 2) {
479 * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
480 * far ahead of real time.
482 int64_t cur_icount = cpu_get_icount_locked();
483 int64_t delta = clock - cur_icount;
484 warp_delta = MIN(warp_delta, delta);
486 timers_state.qemu_icount_bias += warp_delta;
488 vm_clock_warp_start = -1;
489 seqlock_write_end(&timers_state.vm_clock_seqlock);
491 if (qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) {
492 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
496 static void icount_timer_cb(void *opaque)
498 /* No need for a checkpoint because the timer already synchronizes
499 * with CHECKPOINT_CLOCK_VIRTUAL_RT.
501 icount_warp_rt();
504 void qtest_clock_warp(int64_t dest)
506 int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
507 AioContext *aio_context;
508 assert(qtest_enabled());
509 aio_context = qemu_get_aio_context();
510 while (clock < dest) {
511 int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
512 int64_t warp = qemu_soonest_timeout(dest - clock, deadline);
514 seqlock_write_begin(&timers_state.vm_clock_seqlock);
515 timers_state.qemu_icount_bias += warp;
516 seqlock_write_end(&timers_state.vm_clock_seqlock);
518 qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
519 timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]);
520 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
522 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
525 void qemu_start_warp_timer(void)
527 int64_t clock;
528 int64_t deadline;
530 if (!use_icount) {
531 return;
534 /* Nothing to do if the VM is stopped: QEMU_CLOCK_VIRTUAL timers
535 * do not fire, so computing the deadline does not make sense.
537 if (!runstate_is_running()) {
538 return;
541 /* warp clock deterministically in record/replay mode */
542 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_START)) {
543 return;
546 if (!all_cpu_threads_idle()) {
547 return;
550 if (qtest_enabled()) {
551 /* When testing, qtest commands advance icount. */
552 return;
555 /* We want to use the earliest deadline from ALL vm_clocks */
556 clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT);
557 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
558 if (deadline < 0) {
559 static bool notified;
560 if (!icount_sleep && !notified) {
561 warn_report("icount sleep disabled and no active timers");
562 notified = true;
564 return;
567 if (deadline > 0) {
569 * Ensure QEMU_CLOCK_VIRTUAL proceeds even when the virtual CPU goes to
570 * sleep. Otherwise, the CPU might be waiting for a future timer
571 * interrupt to wake it up, but the interrupt never comes because
572 * the vCPU isn't running any insns and thus doesn't advance the
573 * QEMU_CLOCK_VIRTUAL.
575 if (!icount_sleep) {
577 * We never let VCPUs sleep in no sleep icount mode.
578 * If there is a pending QEMU_CLOCK_VIRTUAL timer we just advance
579 * to the next QEMU_CLOCK_VIRTUAL event and notify it.
580 * It is useful when we want a deterministic execution time,
581 * isolated from host latencies.
583 seqlock_write_begin(&timers_state.vm_clock_seqlock);
584 timers_state.qemu_icount_bias += deadline;
585 seqlock_write_end(&timers_state.vm_clock_seqlock);
586 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
587 } else {
589 * We do stop VCPUs and only advance QEMU_CLOCK_VIRTUAL after some
590 * "real" time, (related to the time left until the next event) has
591 * passed. The QEMU_CLOCK_VIRTUAL_RT clock will do this.
592 * This avoids that the warps are visible externally; for example,
593 * you will not be sending network packets continuously instead of
594 * every 100ms.
596 seqlock_write_begin(&timers_state.vm_clock_seqlock);
597 if (vm_clock_warp_start == -1 || vm_clock_warp_start > clock) {
598 vm_clock_warp_start = clock;
600 seqlock_write_end(&timers_state.vm_clock_seqlock);
601 timer_mod_anticipate(icount_warp_timer, clock + deadline);
603 } else if (deadline == 0) {
604 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
608 static void qemu_account_warp_timer(void)
610 if (!use_icount || !icount_sleep) {
611 return;
614 /* Nothing to do if the VM is stopped: QEMU_CLOCK_VIRTUAL timers
615 * do not fire, so computing the deadline does not make sense.
617 if (!runstate_is_running()) {
618 return;
621 /* warp clock deterministically in record/replay mode */
622 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_ACCOUNT)) {
623 return;
626 timer_del(icount_warp_timer);
627 icount_warp_rt();
630 static bool icount_state_needed(void *opaque)
632 return use_icount;
636 * This is a subsection for icount migration.
638 static const VMStateDescription icount_vmstate_timers = {
639 .name = "timer/icount",
640 .version_id = 1,
641 .minimum_version_id = 1,
642 .needed = icount_state_needed,
643 .fields = (VMStateField[]) {
644 VMSTATE_INT64(qemu_icount_bias, TimersState),
645 VMSTATE_INT64(qemu_icount, TimersState),
646 VMSTATE_END_OF_LIST()
650 static const VMStateDescription vmstate_timers = {
651 .name = "timer",
652 .version_id = 2,
653 .minimum_version_id = 1,
654 .fields = (VMStateField[]) {
655 VMSTATE_INT64(cpu_ticks_offset, TimersState),
656 VMSTATE_INT64(dummy, TimersState),
657 VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
658 VMSTATE_END_OF_LIST()
660 .subsections = (const VMStateDescription*[]) {
661 &icount_vmstate_timers,
662 NULL
666 static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
668 double pct;
669 double throttle_ratio;
670 long sleeptime_ns;
672 if (!cpu_throttle_get_percentage()) {
673 return;
676 pct = (double)cpu_throttle_get_percentage()/100;
677 throttle_ratio = pct / (1 - pct);
678 sleeptime_ns = (long)(throttle_ratio * CPU_THROTTLE_TIMESLICE_NS);
680 qemu_mutex_unlock_iothread();
681 g_usleep(sleeptime_ns / 1000); /* Convert ns to us for usleep call */
682 qemu_mutex_lock_iothread();
683 atomic_set(&cpu->throttle_thread_scheduled, 0);
686 static void cpu_throttle_timer_tick(void *opaque)
688 CPUState *cpu;
689 double pct;
691 /* Stop the timer if needed */
692 if (!cpu_throttle_get_percentage()) {
693 return;
695 CPU_FOREACH(cpu) {
696 if (!atomic_xchg(&cpu->throttle_thread_scheduled, 1)) {
697 async_run_on_cpu(cpu, cpu_throttle_thread,
698 RUN_ON_CPU_NULL);
702 pct = (double)cpu_throttle_get_percentage()/100;
703 timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
704 CPU_THROTTLE_TIMESLICE_NS / (1-pct));
707 void cpu_throttle_set(int new_throttle_pct)
709 /* Ensure throttle percentage is within valid range */
710 new_throttle_pct = MIN(new_throttle_pct, CPU_THROTTLE_PCT_MAX);
711 new_throttle_pct = MAX(new_throttle_pct, CPU_THROTTLE_PCT_MIN);
713 atomic_set(&throttle_percentage, new_throttle_pct);
715 timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
716 CPU_THROTTLE_TIMESLICE_NS);
719 void cpu_throttle_stop(void)
721 atomic_set(&throttle_percentage, 0);
724 bool cpu_throttle_active(void)
726 return (cpu_throttle_get_percentage() != 0);
729 int cpu_throttle_get_percentage(void)
731 return atomic_read(&throttle_percentage);
734 void cpu_ticks_init(void)
736 seqlock_init(&timers_state.vm_clock_seqlock);
737 vmstate_register(NULL, 0, &vmstate_timers, &timers_state);
738 throttle_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
739 cpu_throttle_timer_tick, NULL);
742 void configure_icount(QemuOpts *opts, Error **errp)
744 const char *option;
745 char *rem_str = NULL;
747 option = qemu_opt_get(opts, "shift");
748 if (!option) {
749 if (qemu_opt_get(opts, "align") != NULL) {
750 error_setg(errp, "Please specify shift option when using align");
752 return;
755 icount_sleep = qemu_opt_get_bool(opts, "sleep", true);
756 if (icount_sleep) {
757 icount_warp_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
758 icount_timer_cb, NULL);
761 icount_align_option = qemu_opt_get_bool(opts, "align", false);
763 if (icount_align_option && !icount_sleep) {
764 error_setg(errp, "align=on and sleep=off are incompatible");
766 if (strcmp(option, "auto") != 0) {
767 errno = 0;
768 icount_time_shift = strtol(option, &rem_str, 0);
769 if (errno != 0 || *rem_str != '\0' || !strlen(option)) {
770 error_setg(errp, "icount: Invalid shift value");
772 use_icount = 1;
773 return;
774 } else if (icount_align_option) {
775 error_setg(errp, "shift=auto and align=on are incompatible");
776 } else if (!icount_sleep) {
777 error_setg(errp, "shift=auto and sleep=off are incompatible");
780 use_icount = 2;
782 /* 125MIPS seems a reasonable initial guess at the guest speed.
783 It will be corrected fairly quickly anyway. */
784 icount_time_shift = 3;
786 /* Have both realtime and virtual time triggers for speed adjustment.
787 The realtime trigger catches emulated time passing too slowly,
788 the virtual time trigger catches emulated time passing too fast.
789 Realtime triggers occur even when idle, so use them less frequently
790 than VM triggers. */
791 icount_rt_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL_RT,
792 icount_adjust_rt, NULL);
793 timer_mod(icount_rt_timer,
794 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL_RT) + 1000);
795 icount_vm_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
796 icount_adjust_vm, NULL);
797 timer_mod(icount_vm_timer,
798 qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
799 NANOSECONDS_PER_SECOND / 10);
802 /***********************************************************/
803 /* TCG vCPU kick timer
805 * The kick timer is responsible for moving single threaded vCPU
806 * emulation on to the next vCPU. If more than one vCPU is running a
807 * timer event with force a cpu->exit so the next vCPU can get
808 * scheduled.
810 * The timer is removed if all vCPUs are idle and restarted again once
811 * idleness is complete.
814 static QEMUTimer *tcg_kick_vcpu_timer;
815 static CPUState *tcg_current_rr_cpu;
817 #define TCG_KICK_PERIOD (NANOSECONDS_PER_SECOND / 10)
819 static inline int64_t qemu_tcg_next_kick(void)
821 return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + TCG_KICK_PERIOD;
824 /* Kick the currently round-robin scheduled vCPU */
825 static void qemu_cpu_kick_rr_cpu(void)
827 CPUState *cpu;
828 do {
829 cpu = atomic_mb_read(&tcg_current_rr_cpu);
830 if (cpu) {
831 cpu_exit(cpu);
833 } while (cpu != atomic_mb_read(&tcg_current_rr_cpu));
836 static void do_nothing(CPUState *cpu, run_on_cpu_data unused)
840 void qemu_timer_notify_cb(void *opaque, QEMUClockType type)
842 if (!use_icount || type != QEMU_CLOCK_VIRTUAL) {
843 qemu_notify_event();
844 return;
847 if (!qemu_in_vcpu_thread() && first_cpu) {
848 /* qemu_cpu_kick is not enough to kick a halted CPU out of
849 * qemu_tcg_wait_io_event. async_run_on_cpu, instead,
850 * causes cpu_thread_is_idle to return false. This way,
851 * handle_icount_deadline can run.
853 async_run_on_cpu(first_cpu, do_nothing, RUN_ON_CPU_NULL);
857 static void kick_tcg_thread(void *opaque)
859 timer_mod(tcg_kick_vcpu_timer, qemu_tcg_next_kick());
860 qemu_cpu_kick_rr_cpu();
863 static void start_tcg_kick_timer(void)
865 if (!mttcg_enabled && !tcg_kick_vcpu_timer && CPU_NEXT(first_cpu)) {
866 tcg_kick_vcpu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
867 kick_tcg_thread, NULL);
868 timer_mod(tcg_kick_vcpu_timer, qemu_tcg_next_kick());
872 static void stop_tcg_kick_timer(void)
874 if (tcg_kick_vcpu_timer) {
875 timer_del(tcg_kick_vcpu_timer);
876 tcg_kick_vcpu_timer = NULL;
880 /***********************************************************/
881 void hw_error(const char *fmt, ...)
883 va_list ap;
884 CPUState *cpu;
886 va_start(ap, fmt);
887 fprintf(stderr, "qemu: hardware error: ");
888 vfprintf(stderr, fmt, ap);
889 fprintf(stderr, "\n");
890 CPU_FOREACH(cpu) {
891 fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
892 cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU);
894 va_end(ap);
895 abort();
898 void cpu_synchronize_all_states(void)
900 CPUState *cpu;
902 CPU_FOREACH(cpu) {
903 cpu_synchronize_state(cpu);
904 /* TODO: move to cpu_synchronize_state() */
905 if (hvf_enabled()) {
906 hvf_cpu_synchronize_state(cpu);
911 void cpu_synchronize_all_post_reset(void)
913 CPUState *cpu;
915 CPU_FOREACH(cpu) {
916 cpu_synchronize_post_reset(cpu);
917 /* TODO: move to cpu_synchronize_post_reset() */
918 if (hvf_enabled()) {
919 hvf_cpu_synchronize_post_reset(cpu);
924 void cpu_synchronize_all_post_init(void)
926 CPUState *cpu;
928 CPU_FOREACH(cpu) {
929 cpu_synchronize_post_init(cpu);
930 /* TODO: move to cpu_synchronize_post_init() */
931 if (hvf_enabled()) {
932 hvf_cpu_synchronize_post_init(cpu);
937 void cpu_synchronize_all_pre_loadvm(void)
939 CPUState *cpu;
941 CPU_FOREACH(cpu) {
942 cpu_synchronize_pre_loadvm(cpu);
946 static int do_vm_stop(RunState state)
948 int ret = 0;
950 if (runstate_is_running()) {
951 cpu_disable_ticks();
952 pause_all_vcpus();
953 runstate_set(state);
954 vm_state_notify(0, state);
955 qapi_event_send_stop(&error_abort);
958 bdrv_drain_all();
959 replay_disable_events();
960 ret = bdrv_flush_all();
962 return ret;
965 static bool cpu_can_run(CPUState *cpu)
967 if (cpu->stop) {
968 return false;
970 if (cpu_is_stopped(cpu)) {
971 return false;
973 return true;
976 static void cpu_handle_guest_debug(CPUState *cpu)
978 gdb_set_stop_cpu(cpu);
979 qemu_system_debug_request();
980 cpu->stopped = true;
983 #ifdef CONFIG_LINUX
984 static void sigbus_reraise(void)
986 sigset_t set;
987 struct sigaction action;
989 memset(&action, 0, sizeof(action));
990 action.sa_handler = SIG_DFL;
991 if (!sigaction(SIGBUS, &action, NULL)) {
992 raise(SIGBUS);
993 sigemptyset(&set);
994 sigaddset(&set, SIGBUS);
995 pthread_sigmask(SIG_UNBLOCK, &set, NULL);
997 perror("Failed to re-raise SIGBUS!\n");
998 abort();
1001 static void sigbus_handler(int n, siginfo_t *siginfo, void *ctx)
1003 if (siginfo->si_code != BUS_MCEERR_AO && siginfo->si_code != BUS_MCEERR_AR) {
1004 sigbus_reraise();
1007 if (current_cpu) {
1008 /* Called asynchronously in VCPU thread. */
1009 if (kvm_on_sigbus_vcpu(current_cpu, siginfo->si_code, siginfo->si_addr)) {
1010 sigbus_reraise();
1012 } else {
1013 /* Called synchronously (via signalfd) in main thread. */
1014 if (kvm_on_sigbus(siginfo->si_code, siginfo->si_addr)) {
1015 sigbus_reraise();
1020 static void qemu_init_sigbus(void)
1022 struct sigaction action;
1024 memset(&action, 0, sizeof(action));
1025 action.sa_flags = SA_SIGINFO;
1026 action.sa_sigaction = sigbus_handler;
1027 sigaction(SIGBUS, &action, NULL);
1029 prctl(PR_MCE_KILL, PR_MCE_KILL_SET, PR_MCE_KILL_EARLY, 0, 0);
1031 #else /* !CONFIG_LINUX */
1032 static void qemu_init_sigbus(void)
1035 #endif /* !CONFIG_LINUX */
1037 static QemuMutex qemu_global_mutex;
1039 static QemuThread io_thread;
1041 /* cpu creation */
1042 static QemuCond qemu_cpu_cond;
1043 /* system init */
1044 static QemuCond qemu_pause_cond;
1046 void qemu_init_cpu_loop(void)
1048 qemu_init_sigbus();
1049 qemu_cond_init(&qemu_cpu_cond);
1050 qemu_cond_init(&qemu_pause_cond);
1051 qemu_mutex_init(&qemu_global_mutex);
1053 qemu_thread_get_self(&io_thread);
1056 void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data)
1058 do_run_on_cpu(cpu, func, data, &qemu_global_mutex);
1061 static void qemu_kvm_destroy_vcpu(CPUState *cpu)
1063 if (kvm_destroy_vcpu(cpu) < 0) {
1064 error_report("kvm_destroy_vcpu failed");
1065 exit(EXIT_FAILURE);
1069 static void qemu_tcg_destroy_vcpu(CPUState *cpu)
1073 static void qemu_cpu_stop(CPUState *cpu, bool exit)
1075 g_assert(qemu_cpu_is_self(cpu));
1076 cpu->stop = false;
1077 cpu->stopped = true;
1078 if (exit) {
1079 cpu_exit(cpu);
1081 qemu_cond_broadcast(&qemu_pause_cond);
1084 static void qemu_wait_io_event_common(CPUState *cpu)
1086 atomic_mb_set(&cpu->thread_kicked, false);
1087 if (cpu->stop) {
1088 qemu_cpu_stop(cpu, false);
1090 process_queued_cpu_work(cpu);
1093 static bool qemu_tcg_should_sleep(CPUState *cpu)
1095 if (mttcg_enabled) {
1096 return cpu_thread_is_idle(cpu);
1097 } else {
1098 return all_cpu_threads_idle();
1102 static void qemu_tcg_wait_io_event(CPUState *cpu)
1104 while (qemu_tcg_should_sleep(cpu)) {
1105 stop_tcg_kick_timer();
1106 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
1109 start_tcg_kick_timer();
1111 qemu_wait_io_event_common(cpu);
1114 static void qemu_kvm_wait_io_event(CPUState *cpu)
1116 while (cpu_thread_is_idle(cpu)) {
1117 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
1120 qemu_wait_io_event_common(cpu);
1123 static void qemu_hvf_wait_io_event(CPUState *cpu)
1125 while (cpu_thread_is_idle(cpu)) {
1126 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
1128 qemu_wait_io_event_common(cpu);
1131 static void *qemu_kvm_cpu_thread_fn(void *arg)
1133 CPUState *cpu = arg;
1134 int r;
1136 rcu_register_thread();
1138 qemu_mutex_lock_iothread();
1139 qemu_thread_get_self(cpu->thread);
1140 cpu->thread_id = qemu_get_thread_id();
1141 cpu->can_do_io = 1;
1142 current_cpu = cpu;
1144 r = kvm_init_vcpu(cpu);
1145 if (r < 0) {
1146 fprintf(stderr, "kvm_init_vcpu failed: %s\n", strerror(-r));
1147 exit(1);
1150 kvm_init_cpu_signals(cpu);
1152 /* signal CPU creation */
1153 cpu->created = true;
1154 qemu_cond_signal(&qemu_cpu_cond);
1156 do {
1157 if (cpu_can_run(cpu)) {
1158 r = kvm_cpu_exec(cpu);
1159 if (r == EXCP_DEBUG) {
1160 cpu_handle_guest_debug(cpu);
1163 qemu_kvm_wait_io_event(cpu);
1164 } while (!cpu->unplug || cpu_can_run(cpu));
1166 qemu_kvm_destroy_vcpu(cpu);
1167 cpu->created = false;
1168 qemu_cond_signal(&qemu_cpu_cond);
1169 qemu_mutex_unlock_iothread();
1170 return NULL;
1173 static void *qemu_dummy_cpu_thread_fn(void *arg)
1175 #ifdef _WIN32
1176 fprintf(stderr, "qtest is not supported under Windows\n");
1177 exit(1);
1178 #else
1179 CPUState *cpu = arg;
1180 sigset_t waitset;
1181 int r;
1183 rcu_register_thread();
1185 qemu_mutex_lock_iothread();
1186 qemu_thread_get_self(cpu->thread);
1187 cpu->thread_id = qemu_get_thread_id();
1188 cpu->can_do_io = 1;
1189 current_cpu = cpu;
1191 sigemptyset(&waitset);
1192 sigaddset(&waitset, SIG_IPI);
1194 /* signal CPU creation */
1195 cpu->created = true;
1196 qemu_cond_signal(&qemu_cpu_cond);
1198 while (1) {
1199 qemu_mutex_unlock_iothread();
1200 do {
1201 int sig;
1202 r = sigwait(&waitset, &sig);
1203 } while (r == -1 && (errno == EAGAIN || errno == EINTR));
1204 if (r == -1) {
1205 perror("sigwait");
1206 exit(1);
1208 qemu_mutex_lock_iothread();
1209 qemu_wait_io_event_common(cpu);
1212 return NULL;
1213 #endif
1216 static int64_t tcg_get_icount_limit(void)
1218 int64_t deadline;
1220 if (replay_mode != REPLAY_MODE_PLAY) {
1221 deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
1223 /* Maintain prior (possibly buggy) behaviour where if no deadline
1224 * was set (as there is no QEMU_CLOCK_VIRTUAL timer) or it is more than
1225 * INT32_MAX nanoseconds ahead, we still use INT32_MAX
1226 * nanoseconds.
1228 if ((deadline < 0) || (deadline > INT32_MAX)) {
1229 deadline = INT32_MAX;
1232 return qemu_icount_round(deadline);
1233 } else {
1234 return replay_get_instructions();
1238 static void handle_icount_deadline(void)
1240 assert(qemu_in_vcpu_thread());
1241 if (use_icount) {
1242 int64_t deadline =
1243 qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
1245 if (deadline == 0) {
1246 /* Wake up other AioContexts. */
1247 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
1248 qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
1253 static void prepare_icount_for_run(CPUState *cpu)
1255 if (use_icount) {
1256 int insns_left;
1258 /* These should always be cleared by process_icount_data after
1259 * each vCPU execution. However u16.high can be raised
1260 * asynchronously by cpu_exit/cpu_interrupt/tcg_handle_interrupt
1262 g_assert(cpu->icount_decr.u16.low == 0);
1263 g_assert(cpu->icount_extra == 0);
1265 cpu->icount_budget = tcg_get_icount_limit();
1266 insns_left = MIN(0xffff, cpu->icount_budget);
1267 cpu->icount_decr.u16.low = insns_left;
1268 cpu->icount_extra = cpu->icount_budget - insns_left;
1272 static void process_icount_data(CPUState *cpu)
1274 if (use_icount) {
1275 /* Account for executed instructions */
1276 cpu_update_icount(cpu);
1278 /* Reset the counters */
1279 cpu->icount_decr.u16.low = 0;
1280 cpu->icount_extra = 0;
1281 cpu->icount_budget = 0;
1283 replay_account_executed_instructions();
1288 static int tcg_cpu_exec(CPUState *cpu)
1290 int ret;
1291 #ifdef CONFIG_PROFILER
1292 int64_t ti;
1293 #endif
1295 #ifdef CONFIG_PROFILER
1296 ti = profile_getclock();
1297 #endif
1298 qemu_mutex_unlock_iothread();
1299 cpu_exec_start(cpu);
1300 ret = cpu_exec(cpu);
1301 cpu_exec_end(cpu);
1302 qemu_mutex_lock_iothread();
1303 #ifdef CONFIG_PROFILER
1304 tcg_time += profile_getclock() - ti;
1305 #endif
1306 return ret;
1309 /* Destroy any remaining vCPUs which have been unplugged and have
1310 * finished running
1312 static void deal_with_unplugged_cpus(void)
1314 CPUState *cpu;
1316 CPU_FOREACH(cpu) {
1317 if (cpu->unplug && !cpu_can_run(cpu)) {
1318 qemu_tcg_destroy_vcpu(cpu);
1319 cpu->created = false;
1320 qemu_cond_signal(&qemu_cpu_cond);
1321 break;
1326 /* Single-threaded TCG
1328 * In the single-threaded case each vCPU is simulated in turn. If
1329 * there is more than a single vCPU we create a simple timer to kick
1330 * the vCPU and ensure we don't get stuck in a tight loop in one vCPU.
1331 * This is done explicitly rather than relying on side-effects
1332 * elsewhere.
1335 static void *qemu_tcg_rr_cpu_thread_fn(void *arg)
1337 CPUState *cpu = arg;
1339 rcu_register_thread();
1340 tcg_register_thread();
1342 qemu_mutex_lock_iothread();
1343 qemu_thread_get_self(cpu->thread);
1345 CPU_FOREACH(cpu) {
1346 cpu->thread_id = qemu_get_thread_id();
1347 cpu->created = true;
1348 cpu->can_do_io = 1;
1350 qemu_cond_signal(&qemu_cpu_cond);
1352 /* wait for initial kick-off after machine start */
1353 while (first_cpu->stopped) {
1354 qemu_cond_wait(first_cpu->halt_cond, &qemu_global_mutex);
1356 /* process any pending work */
1357 CPU_FOREACH(cpu) {
1358 current_cpu = cpu;
1359 qemu_wait_io_event_common(cpu);
1363 start_tcg_kick_timer();
1365 cpu = first_cpu;
1367 /* process any pending work */
1368 cpu->exit_request = 1;
1370 while (1) {
1371 /* Account partial waits to QEMU_CLOCK_VIRTUAL. */
1372 qemu_account_warp_timer();
1374 /* Run the timers here. This is much more efficient than
1375 * waking up the I/O thread and waiting for completion.
1377 handle_icount_deadline();
1379 if (!cpu) {
1380 cpu = first_cpu;
1383 while (cpu && !cpu->queued_work_first && !cpu->exit_request) {
1385 atomic_mb_set(&tcg_current_rr_cpu, cpu);
1386 current_cpu = cpu;
1388 qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
1389 (cpu->singlestep_enabled & SSTEP_NOTIMER) == 0);
1391 if (cpu_can_run(cpu)) {
1392 int r;
1394 prepare_icount_for_run(cpu);
1396 r = tcg_cpu_exec(cpu);
1398 process_icount_data(cpu);
1400 if (r == EXCP_DEBUG) {
1401 cpu_handle_guest_debug(cpu);
1402 break;
1403 } else if (r == EXCP_ATOMIC) {
1404 qemu_mutex_unlock_iothread();
1405 cpu_exec_step_atomic(cpu);
1406 qemu_mutex_lock_iothread();
1407 break;
1409 } else if (cpu->stop) {
1410 if (cpu->unplug) {
1411 cpu = CPU_NEXT(cpu);
1413 break;
1416 cpu = CPU_NEXT(cpu);
1417 } /* while (cpu && !cpu->exit_request).. */
1419 /* Does not need atomic_mb_set because a spurious wakeup is okay. */
1420 atomic_set(&tcg_current_rr_cpu, NULL);
1422 if (cpu && cpu->exit_request) {
1423 atomic_mb_set(&cpu->exit_request, 0);
1426 qemu_tcg_wait_io_event(cpu ? cpu : QTAILQ_FIRST(&cpus));
1427 deal_with_unplugged_cpus();
1430 return NULL;
1433 static void *qemu_hax_cpu_thread_fn(void *arg)
1435 CPUState *cpu = arg;
1436 int r;
1438 qemu_mutex_lock_iothread();
1439 qemu_thread_get_self(cpu->thread);
1441 cpu->thread_id = qemu_get_thread_id();
1442 cpu->created = true;
1443 cpu->halted = 0;
1444 current_cpu = cpu;
1446 hax_init_vcpu(cpu);
1447 qemu_cond_signal(&qemu_cpu_cond);
1449 while (1) {
1450 if (cpu_can_run(cpu)) {
1451 r = hax_smp_cpu_exec(cpu);
1452 if (r == EXCP_DEBUG) {
1453 cpu_handle_guest_debug(cpu);
1457 while (cpu_thread_is_idle(cpu)) {
1458 qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
1460 #ifdef _WIN32
1461 SleepEx(0, TRUE);
1462 #endif
1463 qemu_wait_io_event_common(cpu);
1465 return NULL;
1468 /* The HVF-specific vCPU thread function. This one should only run when the host
1469 * CPU supports the VMX "unrestricted guest" feature. */
1470 static void *qemu_hvf_cpu_thread_fn(void *arg)
1472 CPUState *cpu = arg;
1474 int r;
1476 assert(hvf_enabled());
1478 rcu_register_thread();
1480 qemu_mutex_lock_iothread();
1481 qemu_thread_get_self(cpu->thread);
1483 cpu->thread_id = qemu_get_thread_id();
1484 cpu->can_do_io = 1;
1485 current_cpu = cpu;
1487 hvf_init_vcpu(cpu);
1489 /* signal CPU creation */
1490 cpu->created = true;
1491 qemu_cond_signal(&qemu_cpu_cond);
1493 do {
1494 if (cpu_can_run(cpu)) {
1495 r = hvf_vcpu_exec(cpu);
1496 if (r == EXCP_DEBUG) {
1497 cpu_handle_guest_debug(cpu);
1500 qemu_hvf_wait_io_event(cpu);
1501 } while (!cpu->unplug || cpu_can_run(cpu));
1503 hvf_vcpu_destroy(cpu);
1504 cpu->created = false;
1505 qemu_cond_signal(&qemu_cpu_cond);
1506 qemu_mutex_unlock_iothread();
1507 return NULL;
1510 #ifdef _WIN32
1511 static void CALLBACK dummy_apc_func(ULONG_PTR unused)
1514 #endif
1516 /* Multi-threaded TCG
1518 * In the multi-threaded case each vCPU has its own thread. The TLS
1519 * variable current_cpu can be used deep in the code to find the
1520 * current CPUState for a given thread.
1523 static void *qemu_tcg_cpu_thread_fn(void *arg)
1525 CPUState *cpu = arg;
1527 g_assert(!use_icount);
1529 rcu_register_thread();
1530 tcg_register_thread();
1532 qemu_mutex_lock_iothread();
1533 qemu_thread_get_self(cpu->thread);
1535 cpu->thread_id = qemu_get_thread_id();
1536 cpu->created = true;
1537 cpu->can_do_io = 1;
1538 current_cpu = cpu;
1539 qemu_cond_signal(&qemu_cpu_cond);
1541 /* process any pending work */
1542 cpu->exit_request = 1;
1544 while (1) {
1545 if (cpu_can_run(cpu)) {
1546 int r;
1547 r = tcg_cpu_exec(cpu);
1548 switch (r) {
1549 case EXCP_DEBUG:
1550 cpu_handle_guest_debug(cpu);
1551 break;
1552 case EXCP_HALTED:
1553 /* during start-up the vCPU is reset and the thread is
1554 * kicked several times. If we don't ensure we go back
1555 * to sleep in the halted state we won't cleanly
1556 * start-up when the vCPU is enabled.
1558 * cpu->halted should ensure we sleep in wait_io_event
1560 g_assert(cpu->halted);
1561 break;
1562 case EXCP_ATOMIC:
1563 qemu_mutex_unlock_iothread();
1564 cpu_exec_step_atomic(cpu);
1565 qemu_mutex_lock_iothread();
1566 default:
1567 /* Ignore everything else? */
1568 break;
1570 } else if (cpu->unplug) {
1571 qemu_tcg_destroy_vcpu(cpu);
1572 cpu->created = false;
1573 qemu_cond_signal(&qemu_cpu_cond);
1574 qemu_mutex_unlock_iothread();
1575 return NULL;
1578 atomic_mb_set(&cpu->exit_request, 0);
1579 qemu_tcg_wait_io_event(cpu);
1582 return NULL;
1585 static void qemu_cpu_kick_thread(CPUState *cpu)
1587 #ifndef _WIN32
1588 int err;
1590 if (cpu->thread_kicked) {
1591 return;
1593 cpu->thread_kicked = true;
1594 err = pthread_kill(cpu->thread->thread, SIG_IPI);
1595 if (err) {
1596 fprintf(stderr, "qemu:%s: %s", __func__, strerror(err));
1597 exit(1);
1599 #else /* _WIN32 */
1600 if (!qemu_cpu_is_self(cpu)) {
1601 if (!QueueUserAPC(dummy_apc_func, cpu->hThread, 0)) {
1602 fprintf(stderr, "%s: QueueUserAPC failed with error %lu\n",
1603 __func__, GetLastError());
1604 exit(1);
1607 #endif
1610 void qemu_cpu_kick(CPUState *cpu)
1612 qemu_cond_broadcast(cpu->halt_cond);
1613 if (tcg_enabled()) {
1614 cpu_exit(cpu);
1615 /* NOP unless doing single-thread RR */
1616 qemu_cpu_kick_rr_cpu();
1617 } else {
1618 if (hax_enabled()) {
1620 * FIXME: race condition with the exit_request check in
1621 * hax_vcpu_hax_exec
1623 cpu->exit_request = 1;
1625 qemu_cpu_kick_thread(cpu);
1629 void qemu_cpu_kick_self(void)
1631 assert(current_cpu);
1632 qemu_cpu_kick_thread(current_cpu);
1635 bool qemu_cpu_is_self(CPUState *cpu)
1637 return qemu_thread_is_self(cpu->thread);
1640 bool qemu_in_vcpu_thread(void)
1642 return current_cpu && qemu_cpu_is_self(current_cpu);
1645 static __thread bool iothread_locked = false;
1647 bool qemu_mutex_iothread_locked(void)
1649 return iothread_locked;
1652 void qemu_mutex_lock_iothread(void)
1654 g_assert(!qemu_mutex_iothread_locked());
1655 qemu_mutex_lock(&qemu_global_mutex);
1656 iothread_locked = true;
1659 void qemu_mutex_unlock_iothread(void)
1661 g_assert(qemu_mutex_iothread_locked());
1662 iothread_locked = false;
1663 qemu_mutex_unlock(&qemu_global_mutex);
1666 static bool all_vcpus_paused(void)
1668 CPUState *cpu;
1670 CPU_FOREACH(cpu) {
1671 if (!cpu->stopped) {
1672 return false;
1676 return true;
1679 void pause_all_vcpus(void)
1681 CPUState *cpu;
1683 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, false);
1684 CPU_FOREACH(cpu) {
1685 if (qemu_cpu_is_self(cpu)) {
1686 qemu_cpu_stop(cpu, true);
1687 } else {
1688 cpu->stop = true;
1689 qemu_cpu_kick(cpu);
1693 while (!all_vcpus_paused()) {
1694 qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex);
1695 CPU_FOREACH(cpu) {
1696 qemu_cpu_kick(cpu);
1701 void cpu_resume(CPUState *cpu)
1703 cpu->stop = false;
1704 cpu->stopped = false;
1705 qemu_cpu_kick(cpu);
1708 void resume_all_vcpus(void)
1710 CPUState *cpu;
1712 qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true);
1713 CPU_FOREACH(cpu) {
1714 cpu_resume(cpu);
1718 void cpu_remove(CPUState *cpu)
1720 cpu->stop = true;
1721 cpu->unplug = true;
1722 qemu_cpu_kick(cpu);
1725 void cpu_remove_sync(CPUState *cpu)
1727 cpu_remove(cpu);
1728 while (cpu->created) {
1729 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1733 /* For temporary buffers for forming a name */
1734 #define VCPU_THREAD_NAME_SIZE 16
1736 static void qemu_tcg_init_vcpu(CPUState *cpu)
1738 char thread_name[VCPU_THREAD_NAME_SIZE];
1739 static QemuCond *single_tcg_halt_cond;
1740 static QemuThread *single_tcg_cpu_thread;
1741 static int tcg_region_inited;
1744 * Initialize TCG regions--once. Now is a good time, because:
1745 * (1) TCG's init context, prologue and target globals have been set up.
1746 * (2) qemu_tcg_mttcg_enabled() works now (TCG init code runs before the
1747 * -accel flag is processed, so the check doesn't work then).
1749 if (!tcg_region_inited) {
1750 tcg_region_inited = 1;
1751 tcg_region_init();
1754 if (qemu_tcg_mttcg_enabled() || !single_tcg_cpu_thread) {
1755 cpu->thread = g_malloc0(sizeof(QemuThread));
1756 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1757 qemu_cond_init(cpu->halt_cond);
1759 if (qemu_tcg_mttcg_enabled()) {
1760 /* create a thread per vCPU with TCG (MTTCG) */
1761 parallel_cpus = true;
1762 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
1763 cpu->cpu_index);
1765 qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
1766 cpu, QEMU_THREAD_JOINABLE);
1768 } else {
1769 /* share a single thread for all cpus with TCG */
1770 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "ALL CPUs/TCG");
1771 qemu_thread_create(cpu->thread, thread_name,
1772 qemu_tcg_rr_cpu_thread_fn,
1773 cpu, QEMU_THREAD_JOINABLE);
1775 single_tcg_halt_cond = cpu->halt_cond;
1776 single_tcg_cpu_thread = cpu->thread;
1778 #ifdef _WIN32
1779 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1780 #endif
1781 while (!cpu->created) {
1782 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1784 } else {
1785 /* For non-MTTCG cases we share the thread */
1786 cpu->thread = single_tcg_cpu_thread;
1787 cpu->halt_cond = single_tcg_halt_cond;
1791 static void qemu_hax_start_vcpu(CPUState *cpu)
1793 char thread_name[VCPU_THREAD_NAME_SIZE];
1795 cpu->thread = g_malloc0(sizeof(QemuThread));
1796 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1797 qemu_cond_init(cpu->halt_cond);
1799 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HAX",
1800 cpu->cpu_index);
1801 qemu_thread_create(cpu->thread, thread_name, qemu_hax_cpu_thread_fn,
1802 cpu, QEMU_THREAD_JOINABLE);
1803 #ifdef _WIN32
1804 cpu->hThread = qemu_thread_get_handle(cpu->thread);
1805 #endif
1806 while (!cpu->created) {
1807 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1811 static void qemu_kvm_start_vcpu(CPUState *cpu)
1813 char thread_name[VCPU_THREAD_NAME_SIZE];
1815 cpu->thread = g_malloc0(sizeof(QemuThread));
1816 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1817 qemu_cond_init(cpu->halt_cond);
1818 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
1819 cpu->cpu_index);
1820 qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn,
1821 cpu, QEMU_THREAD_JOINABLE);
1822 while (!cpu->created) {
1823 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1827 static void qemu_hvf_start_vcpu(CPUState *cpu)
1829 char thread_name[VCPU_THREAD_NAME_SIZE];
1831 /* HVF currently does not support TCG, and only runs in
1832 * unrestricted-guest mode. */
1833 assert(hvf_enabled());
1835 cpu->thread = g_malloc0(sizeof(QemuThread));
1836 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1837 qemu_cond_init(cpu->halt_cond);
1839 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HVF",
1840 cpu->cpu_index);
1841 qemu_thread_create(cpu->thread, thread_name, qemu_hvf_cpu_thread_fn,
1842 cpu, QEMU_THREAD_JOINABLE);
1843 while (!cpu->created) {
1844 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1848 static void qemu_dummy_start_vcpu(CPUState *cpu)
1850 char thread_name[VCPU_THREAD_NAME_SIZE];
1852 cpu->thread = g_malloc0(sizeof(QemuThread));
1853 cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1854 qemu_cond_init(cpu->halt_cond);
1855 snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
1856 cpu->cpu_index);
1857 qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, cpu,
1858 QEMU_THREAD_JOINABLE);
1859 while (!cpu->created) {
1860 qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1864 void qemu_init_vcpu(CPUState *cpu)
1866 cpu->nr_cores = smp_cores;
1867 cpu->nr_threads = smp_threads;
1868 cpu->stopped = true;
1870 if (!cpu->as) {
1871 /* If the target cpu hasn't set up any address spaces itself,
1872 * give it the default one.
1874 cpu->num_ases = 1;
1875 cpu_address_space_init(cpu, 0, "cpu-memory", cpu->memory);
1878 if (kvm_enabled()) {
1879 qemu_kvm_start_vcpu(cpu);
1880 } else if (hax_enabled()) {
1881 qemu_hax_start_vcpu(cpu);
1882 } else if (hvf_enabled()) {
1883 qemu_hvf_start_vcpu(cpu);
1884 } else if (tcg_enabled()) {
1885 qemu_tcg_init_vcpu(cpu);
1886 } else {
1887 qemu_dummy_start_vcpu(cpu);
1891 void cpu_stop_current(void)
1893 if (current_cpu) {
1894 qemu_cpu_stop(current_cpu, true);
1898 int vm_stop(RunState state)
1900 if (qemu_in_vcpu_thread()) {
1901 qemu_system_vmstop_request_prepare();
1902 qemu_system_vmstop_request(state);
1904 * FIXME: should not return to device code in case
1905 * vm_stop() has been requested.
1907 cpu_stop_current();
1908 return 0;
1911 return do_vm_stop(state);
1915 * Prepare for (re)starting the VM.
1916 * Returns -1 if the vCPUs are not to be restarted (e.g. if they are already
1917 * running or in case of an error condition), 0 otherwise.
1919 int vm_prepare_start(void)
1921 RunState requested;
1922 int res = 0;
1924 qemu_vmstop_requested(&requested);
1925 if (runstate_is_running() && requested == RUN_STATE__MAX) {
1926 return -1;
1929 /* Ensure that a STOP/RESUME pair of events is emitted if a
1930 * vmstop request was pending. The BLOCK_IO_ERROR event, for
1931 * example, according to documentation is always followed by
1932 * the STOP event.
1934 if (runstate_is_running()) {
1935 qapi_event_send_stop(&error_abort);
1936 res = -1;
1937 } else {
1938 replay_enable_events();
1939 cpu_enable_ticks();
1940 runstate_set(RUN_STATE_RUNNING);
1941 vm_state_notify(1, RUN_STATE_RUNNING);
1944 /* We are sending this now, but the CPUs will be resumed shortly later */
1945 qapi_event_send_resume(&error_abort);
1946 return res;
1949 void vm_start(void)
1951 if (!vm_prepare_start()) {
1952 resume_all_vcpus();
1956 /* does a state transition even if the VM is already stopped,
1957 current state is forgotten forever */
1958 int vm_stop_force_state(RunState state)
1960 if (runstate_is_running()) {
1961 return vm_stop(state);
1962 } else {
1963 runstate_set(state);
1965 bdrv_drain_all();
1966 /* Make sure to return an error if the flush in a previous vm_stop()
1967 * failed. */
1968 return bdrv_flush_all();
1972 void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg)
1974 /* XXX: implement xxx_cpu_list for targets that still miss it */
1975 #if defined(cpu_list)
1976 cpu_list(f, cpu_fprintf);
1977 #endif
1980 CpuInfoList *qmp_query_cpus(Error **errp)
1982 MachineState *ms = MACHINE(qdev_get_machine());
1983 MachineClass *mc = MACHINE_GET_CLASS(ms);
1984 CpuInfoList *head = NULL, *cur_item = NULL;
1985 CPUState *cpu;
1987 CPU_FOREACH(cpu) {
1988 CpuInfoList *info;
1989 #if defined(TARGET_I386)
1990 X86CPU *x86_cpu = X86_CPU(cpu);
1991 CPUX86State *env = &x86_cpu->env;
1992 #elif defined(TARGET_PPC)
1993 PowerPCCPU *ppc_cpu = POWERPC_CPU(cpu);
1994 CPUPPCState *env = &ppc_cpu->env;
1995 #elif defined(TARGET_SPARC)
1996 SPARCCPU *sparc_cpu = SPARC_CPU(cpu);
1997 CPUSPARCState *env = &sparc_cpu->env;
1998 #elif defined(TARGET_MIPS)
1999 MIPSCPU *mips_cpu = MIPS_CPU(cpu);
2000 CPUMIPSState *env = &mips_cpu->env;
2001 #elif defined(TARGET_TRICORE)
2002 TriCoreCPU *tricore_cpu = TRICORE_CPU(cpu);
2003 CPUTriCoreState *env = &tricore_cpu->env;
2004 #endif
2006 cpu_synchronize_state(cpu);
2008 info = g_malloc0(sizeof(*info));
2009 info->value = g_malloc0(sizeof(*info->value));
2010 info->value->CPU = cpu->cpu_index;
2011 info->value->current = (cpu == first_cpu);
2012 info->value->halted = cpu->halted;
2013 info->value->qom_path = object_get_canonical_path(OBJECT(cpu));
2014 info->value->thread_id = cpu->thread_id;
2015 #if defined(TARGET_I386)
2016 info->value->arch = CPU_INFO_ARCH_X86;
2017 info->value->u.x86.pc = env->eip + env->segs[R_CS].base;
2018 #elif defined(TARGET_PPC)
2019 info->value->arch = CPU_INFO_ARCH_PPC;
2020 info->value->u.ppc.nip = env->nip;
2021 #elif defined(TARGET_SPARC)
2022 info->value->arch = CPU_INFO_ARCH_SPARC;
2023 info->value->u.q_sparc.pc = env->pc;
2024 info->value->u.q_sparc.npc = env->npc;
2025 #elif defined(TARGET_MIPS)
2026 info->value->arch = CPU_INFO_ARCH_MIPS;
2027 info->value->u.q_mips.PC = env->active_tc.PC;
2028 #elif defined(TARGET_TRICORE)
2029 info->value->arch = CPU_INFO_ARCH_TRICORE;
2030 info->value->u.tricore.PC = env->PC;
2031 #else
2032 info->value->arch = CPU_INFO_ARCH_OTHER;
2033 #endif
2034 info->value->has_props = !!mc->cpu_index_to_instance_props;
2035 if (info->value->has_props) {
2036 CpuInstanceProperties *props;
2037 props = g_malloc0(sizeof(*props));
2038 *props = mc->cpu_index_to_instance_props(ms, cpu->cpu_index);
2039 info->value->props = props;
2042 /* XXX: waiting for the qapi to support GSList */
2043 if (!cur_item) {
2044 head = cur_item = info;
2045 } else {
2046 cur_item->next = info;
2047 cur_item = info;
2051 return head;
2054 void qmp_memsave(int64_t addr, int64_t size, const char *filename,
2055 bool has_cpu, int64_t cpu_index, Error **errp)
2057 FILE *f;
2058 uint32_t l;
2059 CPUState *cpu;
2060 uint8_t buf[1024];
2061 int64_t orig_addr = addr, orig_size = size;
2063 if (!has_cpu) {
2064 cpu_index = 0;
2067 cpu = qemu_get_cpu(cpu_index);
2068 if (cpu == NULL) {
2069 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
2070 "a CPU number");
2071 return;
2074 f = fopen(filename, "wb");
2075 if (!f) {
2076 error_setg_file_open(errp, errno, filename);
2077 return;
2080 while (size != 0) {
2081 l = sizeof(buf);
2082 if (l > size)
2083 l = size;
2084 if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
2085 error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRId64
2086 " specified", orig_addr, orig_size);
2087 goto exit;
2089 if (fwrite(buf, 1, l, f) != l) {
2090 error_setg(errp, QERR_IO_ERROR);
2091 goto exit;
2093 addr += l;
2094 size -= l;
2097 exit:
2098 fclose(f);
2101 void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
2102 Error **errp)
2104 FILE *f;
2105 uint32_t l;
2106 uint8_t buf[1024];
2108 f = fopen(filename, "wb");
2109 if (!f) {
2110 error_setg_file_open(errp, errno, filename);
2111 return;
2114 while (size != 0) {
2115 l = sizeof(buf);
2116 if (l > size)
2117 l = size;
2118 cpu_physical_memory_read(addr, buf, l);
2119 if (fwrite(buf, 1, l, f) != l) {
2120 error_setg(errp, QERR_IO_ERROR);
2121 goto exit;
2123 addr += l;
2124 size -= l;
2127 exit:
2128 fclose(f);
2131 void qmp_inject_nmi(Error **errp)
2133 nmi_monitor_handle(monitor_get_cpu_index(), errp);
2136 void dump_drift_info(FILE *f, fprintf_function cpu_fprintf)
2138 if (!use_icount) {
2139 return;
2142 cpu_fprintf(f, "Host - Guest clock %"PRIi64" ms\n",
2143 (cpu_get_clock() - cpu_get_icount())/SCALE_MS);
2144 if (icount_align_option) {
2145 cpu_fprintf(f, "Max guest delay %"PRIi64" ms\n", -max_delay/SCALE_MS);
2146 cpu_fprintf(f, "Max guest advance %"PRIi64" ms\n", max_advance/SCALE_MS);
2147 } else {
2148 cpu_fprintf(f, "Max guest delay NA\n");
2149 cpu_fprintf(f, "Max guest advance NA\n");