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
25 /* Needed early for CONFIG_BSD etc. */
26 #include "qemu/osdep.h"
27 #include "qemu-common.h"
28 #include "qemu/config-file.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"
51 #include "qapi-event.h"
53 #include "sysemu/replay.h"
54 #include "hw/boards.h"
58 #include <sys/prctl.h>
61 #define PR_MCE_KILL 33
64 #ifndef PR_MCE_KILL_SET
65 #define PR_MCE_KILL_SET 1
68 #ifndef PR_MCE_KILL_EARLY
69 #define PR_MCE_KILL_EARLY 1
72 #endif /* CONFIG_LINUX */
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
) {
95 if (cpu_is_stopped(cpu
)) {
98 if (!cpu
->halted
|| cpu_has_work(cpu
) ||
99 kvm_halt_in_kernel()) {
105 static bool all_cpu_threads_idle(void)
110 if (!cpu_thread_is_idle(cpu
)) {
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
141 QemuSeqLock vm_clock_seqlock
;
142 int64_t cpu_clock_offset
;
143 int32_t cpu_ticks_enabled
;
146 /* Compensate for varying guest execution speed. */
147 int64_t qemu_icount_bias
;
148 /* Only written by TCG thread */
152 static TimersState timers_state
;
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
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;
184 static bool default_mttcg_enabled(void)
186 if (use_icount
|| TCG_OVERSIZED_GUEST
) {
189 #ifdef TARGET_SUPPORTS_MTTCG
190 return check_tcg_memory_orders_compatible();
197 void qemu_tcg_configure(QemuOpts
*opts
, Error
**errp
)
199 const char *t
= qemu_opt_get(opts
, "thread");
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");
207 #ifndef TARGET_SUPPORTS_MTTCG
208 error_report("Guest not yet converted to MTTCG - "
209 "you may get unexpected results");
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;
221 error_setg(errp
, "Invalid 'thread' setting %s", t
);
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
) +
251 #else /* FIXME: we need 64bit atomics to do this safely */
252 timers_state
.qemu_icount
+= executed
;
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");
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
;
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)
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
));
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
304 * Caller must hold the BQL
306 int64_t cpu_get_ticks(void)
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
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
;
330 static int64_t cpu_get_clock_locked(void)
334 time
= timers_state
.cpu_clock_offset
;
335 if (timers_state
.cpu_ticks_enabled
) {
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)
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
));
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
393 #define ICOUNT_WOBBLE (NANOSECONDS_PER_SECOND / 10)
395 static void icount_adjust(void)
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()) {
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. */
416 && last_delta
+ ICOUNT_WOBBLE
< delta
* 2
417 && icount_time_shift
> 0) {
418 /* The guest is getting too far ahead. Slow time down. */
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. */
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);
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);
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)
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.
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) {
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());
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.
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)
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()) {
541 /* warp clock deterministically in record/replay mode */
542 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_START
)) {
546 if (!all_cpu_threads_idle()) {
550 if (qtest_enabled()) {
551 /* When testing, qtest commands advance icount. */
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
);
559 static bool notified
;
560 if (!icount_sleep
&& !notified
) {
561 warn_report("icount sleep disabled and no active timers");
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.
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
);
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
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
) {
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()) {
621 /* warp clock deterministically in record/replay mode */
622 if (!replay_checkpoint(CHECKPOINT_CLOCK_WARP_ACCOUNT
)) {
626 timer_del(icount_warp_timer
);
630 static bool icount_state_needed(void *opaque
)
636 * This is a subsection for icount migration.
638 static const VMStateDescription icount_vmstate_timers
= {
639 .name
= "timer/icount",
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
= {
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
,
666 static void cpu_throttle_thread(CPUState
*cpu
, run_on_cpu_data opaque
)
669 double throttle_ratio
;
672 if (!cpu_throttle_get_percentage()) {
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
)
691 /* Stop the timer if needed */
692 if (!cpu_throttle_get_percentage()) {
696 if (!atomic_xchg(&cpu
->throttle_thread_scheduled
, 1)) {
697 async_run_on_cpu(cpu
, cpu_throttle_thread
,
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
)
745 char *rem_str
= NULL
;
747 option
= qemu_opt_get(opts
, "shift");
749 if (qemu_opt_get(opts
, "align") != NULL
) {
750 error_setg(errp
, "Please specify shift option when using align");
755 icount_sleep
= qemu_opt_get_bool(opts
, "sleep", true);
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) {
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");
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");
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
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
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)
829 cpu
= atomic_mb_read(&tcg_current_rr_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
) {
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
, ...)
887 fprintf(stderr
, "qemu: hardware error: ");
888 vfprintf(stderr
, fmt
, ap
);
889 fprintf(stderr
, "\n");
891 fprintf(stderr
, "CPU #%d:\n", cpu
->cpu_index
);
892 cpu_dump_state(cpu
, stderr
, fprintf
, CPU_DUMP_FPU
);
898 void cpu_synchronize_all_states(void)
903 cpu_synchronize_state(cpu
);
904 /* TODO: move to cpu_synchronize_state() */
906 hvf_cpu_synchronize_state(cpu
);
911 void cpu_synchronize_all_post_reset(void)
916 cpu_synchronize_post_reset(cpu
);
917 /* TODO: move to cpu_synchronize_post_reset() */
919 hvf_cpu_synchronize_post_reset(cpu
);
924 void cpu_synchronize_all_post_init(void)
929 cpu_synchronize_post_init(cpu
);
930 /* TODO: move to cpu_synchronize_post_init() */
932 hvf_cpu_synchronize_post_init(cpu
);
937 void cpu_synchronize_all_pre_loadvm(void)
942 cpu_synchronize_pre_loadvm(cpu
);
946 static int do_vm_stop(RunState state
)
950 if (runstate_is_running()) {
954 vm_state_notify(0, state
);
955 qapi_event_send_stop(&error_abort
);
959 replay_disable_events();
960 ret
= bdrv_flush_all();
965 static bool cpu_can_run(CPUState
*cpu
)
970 if (cpu_is_stopped(cpu
)) {
976 static void cpu_handle_guest_debug(CPUState
*cpu
)
978 gdb_set_stop_cpu(cpu
);
979 qemu_system_debug_request();
984 static void sigbus_reraise(void)
987 struct sigaction action
;
989 memset(&action
, 0, sizeof(action
));
990 action
.sa_handler
= SIG_DFL
;
991 if (!sigaction(SIGBUS
, &action
, NULL
)) {
994 sigaddset(&set
, SIGBUS
);
995 pthread_sigmask(SIG_UNBLOCK
, &set
, NULL
);
997 perror("Failed to re-raise SIGBUS!\n");
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
) {
1008 /* Called asynchronously in VCPU thread. */
1009 if (kvm_on_sigbus_vcpu(current_cpu
, siginfo
->si_code
, siginfo
->si_addr
)) {
1013 /* Called synchronously (via signalfd) in main thread. */
1014 if (kvm_on_sigbus(siginfo
->si_code
, siginfo
->si_addr
)) {
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
;
1042 static QemuCond qemu_cpu_cond
;
1044 static QemuCond qemu_pause_cond
;
1046 void qemu_init_cpu_loop(void)
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");
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
));
1077 cpu
->stopped
= true;
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);
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
);
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
;
1136 rcu_register_thread();
1138 qemu_mutex_lock_iothread();
1139 qemu_thread_get_self(cpu
->thread
);
1140 cpu
->thread_id
= qemu_get_thread_id();
1144 r
= kvm_init_vcpu(cpu
);
1146 fprintf(stderr
, "kvm_init_vcpu failed: %s\n", strerror(-r
));
1150 kvm_init_cpu_signals(cpu
);
1152 /* signal CPU creation */
1153 cpu
->created
= true;
1154 qemu_cond_signal(&qemu_cpu_cond
);
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();
1173 static void *qemu_dummy_cpu_thread_fn(void *arg
)
1176 fprintf(stderr
, "qtest is not supported under Windows\n");
1179 CPUState
*cpu
= arg
;
1183 rcu_register_thread();
1185 qemu_mutex_lock_iothread();
1186 qemu_thread_get_self(cpu
->thread
);
1187 cpu
->thread_id
= qemu_get_thread_id();
1191 sigemptyset(&waitset
);
1192 sigaddset(&waitset
, SIG_IPI
);
1194 /* signal CPU creation */
1195 cpu
->created
= true;
1196 qemu_cond_signal(&qemu_cpu_cond
);
1199 qemu_mutex_unlock_iothread();
1202 r
= sigwait(&waitset
, &sig
);
1203 } while (r
== -1 && (errno
== EAGAIN
|| errno
== EINTR
));
1208 qemu_mutex_lock_iothread();
1209 qemu_wait_io_event_common(cpu
);
1216 static int64_t tcg_get_icount_limit(void)
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
1228 if ((deadline
< 0) || (deadline
> INT32_MAX
)) {
1229 deadline
= INT32_MAX
;
1232 return qemu_icount_round(deadline
);
1234 return replay_get_instructions();
1238 static void handle_icount_deadline(void)
1240 assert(qemu_in_vcpu_thread());
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
)
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
)
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
)
1291 #ifdef CONFIG_PROFILER
1295 #ifdef CONFIG_PROFILER
1296 ti
= profile_getclock();
1298 qemu_mutex_unlock_iothread();
1299 cpu_exec_start(cpu
);
1300 ret
= cpu_exec(cpu
);
1302 qemu_mutex_lock_iothread();
1303 #ifdef CONFIG_PROFILER
1304 tcg_time
+= profile_getclock() - ti
;
1309 /* Destroy any remaining vCPUs which have been unplugged and have
1312 static void deal_with_unplugged_cpus(void)
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
);
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
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
);
1346 cpu
->thread_id
= qemu_get_thread_id();
1347 cpu
->created
= true;
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 */
1359 qemu_wait_io_event_common(cpu
);
1363 start_tcg_kick_timer();
1367 /* process any pending work */
1368 cpu
->exit_request
= 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();
1383 while (cpu
&& !cpu
->queued_work_first
&& !cpu
->exit_request
) {
1385 atomic_mb_set(&tcg_current_rr_cpu
, cpu
);
1388 qemu_clock_enable(QEMU_CLOCK_VIRTUAL
,
1389 (cpu
->singlestep_enabled
& SSTEP_NOTIMER
) == 0);
1391 if (cpu_can_run(cpu
)) {
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
);
1403 } else if (r
== EXCP_ATOMIC
) {
1404 qemu_mutex_unlock_iothread();
1405 cpu_exec_step_atomic(cpu
);
1406 qemu_mutex_lock_iothread();
1409 } else if (cpu
->stop
) {
1411 cpu
= CPU_NEXT(cpu
);
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();
1433 static void *qemu_hax_cpu_thread_fn(void *arg
)
1435 CPUState
*cpu
= arg
;
1438 qemu_mutex_lock_iothread();
1439 qemu_thread_get_self(cpu
->thread
);
1441 cpu
->thread_id
= qemu_get_thread_id();
1442 cpu
->created
= true;
1447 qemu_cond_signal(&qemu_cpu_cond
);
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
);
1463 qemu_wait_io_event_common(cpu
);
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
;
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();
1489 /* signal CPU creation */
1490 cpu
->created
= true;
1491 qemu_cond_signal(&qemu_cpu_cond
);
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();
1511 static void CALLBACK
dummy_apc_func(ULONG_PTR unused
)
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;
1539 qemu_cond_signal(&qemu_cpu_cond
);
1541 /* process any pending work */
1542 cpu
->exit_request
= 1;
1545 if (cpu_can_run(cpu
)) {
1547 r
= tcg_cpu_exec(cpu
);
1550 cpu_handle_guest_debug(cpu
);
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
);
1563 qemu_mutex_unlock_iothread();
1564 cpu_exec_step_atomic(cpu
);
1565 qemu_mutex_lock_iothread();
1567 /* Ignore everything else? */
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();
1578 atomic_mb_set(&cpu
->exit_request
, 0);
1579 qemu_tcg_wait_io_event(cpu
);
1585 static void qemu_cpu_kick_thread(CPUState
*cpu
)
1590 if (cpu
->thread_kicked
) {
1593 cpu
->thread_kicked
= true;
1594 err
= pthread_kill(cpu
->thread
->thread
, SIG_IPI
);
1596 fprintf(stderr
, "qemu:%s: %s", __func__
, strerror(err
));
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());
1610 void qemu_cpu_kick(CPUState
*cpu
)
1612 qemu_cond_broadcast(cpu
->halt_cond
);
1613 if (tcg_enabled()) {
1615 /* NOP unless doing single-thread RR */
1616 qemu_cpu_kick_rr_cpu();
1618 if (hax_enabled()) {
1620 * FIXME: race condition with the exit_request check in
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)
1671 if (!cpu
->stopped
) {
1679 void pause_all_vcpus(void)
1683 qemu_clock_enable(QEMU_CLOCK_VIRTUAL
, false);
1685 if (qemu_cpu_is_self(cpu
)) {
1686 qemu_cpu_stop(cpu
, true);
1693 while (!all_vcpus_paused()) {
1694 qemu_cond_wait(&qemu_pause_cond
, &qemu_global_mutex
);
1701 void cpu_resume(CPUState
*cpu
)
1704 cpu
->stopped
= false;
1708 void resume_all_vcpus(void)
1712 qemu_clock_enable(QEMU_CLOCK_VIRTUAL
, true);
1718 void cpu_remove(CPUState
*cpu
)
1725 void cpu_remove_sync(CPUState
*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;
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",
1765 qemu_thread_create(cpu
->thread
, thread_name
, qemu_tcg_cpu_thread_fn
,
1766 cpu
, QEMU_THREAD_JOINABLE
);
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
;
1779 cpu
->hThread
= qemu_thread_get_handle(cpu
->thread
);
1781 while (!cpu
->created
) {
1782 qemu_cond_wait(&qemu_cpu_cond
, &qemu_global_mutex
);
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",
1801 qemu_thread_create(cpu
->thread
, thread_name
, qemu_hax_cpu_thread_fn
,
1802 cpu
, QEMU_THREAD_JOINABLE
);
1804 cpu
->hThread
= qemu_thread_get_handle(cpu
->thread
);
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",
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",
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",
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;
1871 /* If the target cpu hasn't set up any address spaces itself,
1872 * give it the default one.
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
);
1887 qemu_dummy_start_vcpu(cpu
);
1891 void cpu_stop_current(void)
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.
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)
1924 qemu_vmstop_requested(&requested
);
1925 if (runstate_is_running() && requested
== RUN_STATE__MAX
) {
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
1934 if (runstate_is_running()) {
1935 qapi_event_send_stop(&error_abort
);
1938 replay_enable_events();
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
);
1951 if (!vm_prepare_start()) {
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
);
1963 runstate_set(state
);
1966 /* Make sure to return an error if the flush in a previous vm_stop()
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
);
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
;
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
;
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
;
2032 info
->value
->arch
= CPU_INFO_ARCH_OTHER
;
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 */
2044 head
= cur_item
= info
;
2046 cur_item
->next
= info
;
2054 void qmp_memsave(int64_t addr
, int64_t size
, const char *filename
,
2055 bool has_cpu
, int64_t cpu_index
, Error
**errp
)
2061 int64_t orig_addr
= addr
, orig_size
= size
;
2067 cpu
= qemu_get_cpu(cpu_index
);
2069 error_setg(errp
, QERR_INVALID_PARAMETER_VALUE
, "cpu-index",
2074 f
= fopen(filename
, "wb");
2076 error_setg_file_open(errp
, errno
, filename
);
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
);
2089 if (fwrite(buf
, 1, l
, f
) != l
) {
2090 error_setg(errp
, QERR_IO_ERROR
);
2101 void qmp_pmemsave(int64_t addr
, int64_t size
, const char *filename
,
2108 f
= fopen(filename
, "wb");
2110 error_setg_file_open(errp
, errno
, filename
);
2118 cpu_physical_memory_read(addr
, buf
, l
);
2119 if (fwrite(buf
, 1, l
, f
) != l
) {
2120 error_setg(errp
, QERR_IO_ERROR
);
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
)
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
);
2148 cpu_fprintf(f
, "Max guest delay NA\n");
2149 cpu_fprintf(f
, "Max guest advance NA\n");