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