Revert "hax: for testing..."
[sdk/emulator/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 /* Needed early for CONFIG_BSD etc. */
26 #include "config-host.h"
27
28 #include "monitor/monitor.h"
29 #include "sysemu/sysemu.h"
30 #include "exec/gdbstub.h"
31 #include "sysemu/dma.h"
32 #include "sysemu/kvm.h"
33 #include "sysemu/hax.h"
34 #include "qmp-commands.h"
35
36 #include "qemu/thread.h"
37 #include "sysemu/cpus.h"
38 #include "sysemu/qtest.h"
39 #include "qemu/main-loop.h"
40 #include "qemu/bitmap.h"
41 #include "qemu/seqlock.h"
42
43 #ifndef _WIN32
44 #include "qemu/compatfd.h"
45 #endif
46
47 #ifdef CONFIG_LINUX
48
49 #include <sys/prctl.h>
50
51 #ifndef PR_MCE_KILL
52 #define PR_MCE_KILL 33
53 #endif
54
55 #ifndef PR_MCE_KILL_SET
56 #define PR_MCE_KILL_SET 1
57 #endif
58
59 #ifndef PR_MCE_KILL_EARLY
60 #define PR_MCE_KILL_EARLY 1
61 #endif
62
63 #endif /* CONFIG_LINUX */
64
65 static CPUState *next_cpu;
66
67 bool cpu_is_stopped(CPUState *cpu)
68 {
69     return cpu->stopped || !runstate_is_running();
70 }
71
72 static bool cpu_thread_is_idle(CPUState *cpu)
73 {
74     if (cpu->stop || cpu->queued_work_first) {
75         return false;
76     }
77     if (cpu_is_stopped(cpu)) {
78         return true;
79     }
80     if (!cpu->halted || cpu_has_work(cpu) ||
81         kvm_halt_in_kernel()) {
82         return false;
83     }
84     return true;
85 }
86
87 static bool all_cpu_threads_idle(void)
88 {
89     CPUState *cpu;
90
91     CPU_FOREACH(cpu) {
92         if (!cpu_thread_is_idle(cpu)) {
93             return false;
94         }
95     }
96     return true;
97 }
98
99 /***********************************************************/
100 /* guest cycle counter */
101
102 /* Protected by TimersState seqlock */
103
104 /* Compensate for varying guest execution speed.  */
105 static int64_t qemu_icount_bias;
106 static int64_t vm_clock_warp_start;
107 /* Conversion factor from emulated instructions to virtual clock ticks.  */
108 static int icount_time_shift;
109 /* Arbitrarily pick 1MIPS as the minimum allowable speed.  */
110 #define MAX_ICOUNT_SHIFT 10
111
112 /* Only written by TCG thread */
113 static int64_t qemu_icount;
114
115 static QEMUTimer *icount_rt_timer;
116 static QEMUTimer *icount_vm_timer;
117 static QEMUTimer *icount_warp_timer;
118
119 typedef struct TimersState {
120     /* Protected by BQL.  */
121     int64_t cpu_ticks_prev;
122     int64_t cpu_ticks_offset;
123
124     /* cpu_clock_offset can be read out of BQL, so protect it with
125      * this lock.
126      */
127     QemuSeqLock vm_clock_seqlock;
128     int64_t cpu_clock_offset;
129     int32_t cpu_ticks_enabled;
130     int64_t dummy;
131 } TimersState;
132
133 static TimersState timers_state;
134
135 /* Return the virtual CPU time, based on the instruction counter.  */
136 static int64_t cpu_get_icount_locked(void)
137 {
138     int64_t icount;
139     CPUState *cpu = current_cpu;
140
141     icount = qemu_icount;
142     if (cpu) {
143         if (!cpu_can_do_io(cpu)) {
144             fprintf(stderr, "Bad clock read\n");
145         }
146         icount -= (cpu->icount_decr.u16.low + cpu->icount_extra);
147     }
148     return qemu_icount_bias + (icount << icount_time_shift);
149 }
150
151 int64_t cpu_get_icount(void)
152 {
153     int64_t icount;
154     unsigned start;
155
156     do {
157         start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
158         icount = cpu_get_icount_locked();
159     } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
160
161     return icount;
162 }
163
164 /* return the host CPU cycle counter and handle stop/restart */
165 /* Caller must hold the BQL */
166 int64_t cpu_get_ticks(void)
167 {
168     int64_t ticks;
169
170     if (use_icount) {
171         return cpu_get_icount();
172     }
173
174     ticks = timers_state.cpu_ticks_offset;
175     if (timers_state.cpu_ticks_enabled) {
176         ticks += cpu_get_real_ticks();
177     }
178
179     if (timers_state.cpu_ticks_prev > ticks) {
180         /* Note: non increasing ticks may happen if the host uses
181            software suspend */
182         timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
183         ticks = timers_state.cpu_ticks_prev;
184     }
185
186     timers_state.cpu_ticks_prev = ticks;
187     return ticks;
188 }
189
190 static int64_t cpu_get_clock_locked(void)
191 {
192     int64_t ticks;
193
194     ticks = timers_state.cpu_clock_offset;
195     if (timers_state.cpu_ticks_enabled) {
196         ticks += get_clock();
197     }
198
199     return ticks;
200 }
201
202 /* return the host CPU monotonic timer and handle stop/restart */
203 int64_t cpu_get_clock(void)
204 {
205     int64_t ti;
206     unsigned start;
207
208     do {
209         start = seqlock_read_begin(&timers_state.vm_clock_seqlock);
210         ti = cpu_get_clock_locked();
211     } while (seqlock_read_retry(&timers_state.vm_clock_seqlock, start));
212
213     return ti;
214 }
215
216 /* enable cpu_get_ticks()
217  * Caller must hold BQL which server as mutex for vm_clock_seqlock.
218  */
219 void cpu_enable_ticks(void)
220 {
221     /* Here, the really thing protected by seqlock is cpu_clock_offset. */
222     seqlock_write_lock(&timers_state.vm_clock_seqlock);
223     if (!timers_state.cpu_ticks_enabled) {
224         timers_state.cpu_ticks_offset -= cpu_get_real_ticks();
225         timers_state.cpu_clock_offset -= get_clock();
226         timers_state.cpu_ticks_enabled = 1;
227     }
228     seqlock_write_unlock(&timers_state.vm_clock_seqlock);
229 }
230
231 /* disable cpu_get_ticks() : the clock is stopped. You must not call
232  * cpu_get_ticks() after that.
233  * Caller must hold BQL which server as mutex for vm_clock_seqlock.
234  */
235 void cpu_disable_ticks(void)
236 {
237     /* Here, the really thing protected by seqlock is cpu_clock_offset. */
238     seqlock_write_lock(&timers_state.vm_clock_seqlock);
239     if (timers_state.cpu_ticks_enabled) {
240         timers_state.cpu_ticks_offset += cpu_get_real_ticks();
241         timers_state.cpu_clock_offset = cpu_get_clock_locked();
242         timers_state.cpu_ticks_enabled = 0;
243     }
244     seqlock_write_unlock(&timers_state.vm_clock_seqlock);
245 }
246
247 /* Correlation between real and virtual time is always going to be
248    fairly approximate, so ignore small variation.
249    When the guest is idle real and virtual time will be aligned in
250    the IO wait loop.  */
251 #define ICOUNT_WOBBLE (get_ticks_per_sec() / 10)
252
253 static void icount_adjust(void)
254 {
255     int64_t cur_time;
256     int64_t cur_icount;
257     int64_t delta;
258
259     /* Protected by TimersState mutex.  */
260     static int64_t last_delta;
261
262     /* If the VM is not running, then do nothing.  */
263     if (!runstate_is_running()) {
264         return;
265     }
266
267     seqlock_write_lock(&timers_state.vm_clock_seqlock);
268     cur_time = cpu_get_clock_locked();
269     cur_icount = cpu_get_icount_locked();
270
271     delta = cur_icount - cur_time;
272     /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
273     if (delta > 0
274         && last_delta + ICOUNT_WOBBLE < delta * 2
275         && icount_time_shift > 0) {
276         /* The guest is getting too far ahead.  Slow time down.  */
277         icount_time_shift--;
278     }
279     if (delta < 0
280         && last_delta - ICOUNT_WOBBLE > delta * 2
281         && icount_time_shift < MAX_ICOUNT_SHIFT) {
282         /* The guest is getting too far behind.  Speed time up.  */
283         icount_time_shift++;
284     }
285     last_delta = delta;
286     qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
287     seqlock_write_unlock(&timers_state.vm_clock_seqlock);
288 }
289
290 static void icount_adjust_rt(void *opaque)
291 {
292     timer_mod(icount_rt_timer,
293                    qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 1000);
294     icount_adjust();
295 }
296
297 static void icount_adjust_vm(void *opaque)
298 {
299     timer_mod(icount_vm_timer,
300                    qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
301                    get_ticks_per_sec() / 10);
302     icount_adjust();
303 }
304
305 static int64_t qemu_icount_round(int64_t count)
306 {
307     return (count + (1 << icount_time_shift) - 1) >> icount_time_shift;
308 }
309
310 static void icount_warp_rt(void *opaque)
311 {
312     /* The icount_warp_timer is rescheduled soon after vm_clock_warp_start
313      * changes from -1 to another value, so the race here is okay.
314      */
315     if (atomic_read(&vm_clock_warp_start) == -1) {
316         return;
317     }
318
319     seqlock_write_lock(&timers_state.vm_clock_seqlock);
320     if (runstate_is_running()) {
321         int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
322         int64_t warp_delta;
323
324         warp_delta = clock - vm_clock_warp_start;
325         if (use_icount == 2) {
326             /*
327              * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too
328              * far ahead of real time.
329              */
330             int64_t cur_time = cpu_get_clock_locked();
331             int64_t cur_icount = cpu_get_icount_locked();
332             int64_t delta = cur_time - cur_icount;
333             warp_delta = MIN(warp_delta, delta);
334         }
335         qemu_icount_bias += warp_delta;
336     }
337     vm_clock_warp_start = -1;
338     seqlock_write_unlock(&timers_state.vm_clock_seqlock);
339
340     if (qemu_clock_expired(QEMU_CLOCK_VIRTUAL)) {
341         qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
342     }
343 }
344
345 void qtest_clock_warp(int64_t dest)
346 {
347     int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
348     assert(qtest_enabled());
349     while (clock < dest) {
350         int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
351         int64_t warp = MIN(dest - clock, deadline);
352         seqlock_write_lock(&timers_state.vm_clock_seqlock);
353         qemu_icount_bias += warp;
354         seqlock_write_unlock(&timers_state.vm_clock_seqlock);
355
356         qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL);
357         clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
358     }
359     qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
360 }
361
362 void qemu_clock_warp(QEMUClockType type)
363 {
364     int64_t clock;
365     int64_t deadline;
366
367     /*
368      * There are too many global variables to make the "warp" behavior
369      * applicable to other clocks.  But a clock argument removes the
370      * need for if statements all over the place.
371      */
372     if (type != QEMU_CLOCK_VIRTUAL || !use_icount) {
373         return;
374     }
375
376     /*
377      * If the CPUs have been sleeping, advance QEMU_CLOCK_VIRTUAL timer now.
378      * This ensures that the deadline for the timer is computed correctly below.
379      * This also makes sure that the insn counter is synchronized before the
380      * CPU starts running, in case the CPU is woken by an event other than
381      * the earliest QEMU_CLOCK_VIRTUAL timer.
382      */
383     icount_warp_rt(NULL);
384     timer_del(icount_warp_timer);
385     if (!all_cpu_threads_idle()) {
386         return;
387     }
388
389     if (qtest_enabled()) {
390         /* When testing, qtest commands advance icount.  */
391         return;
392     }
393
394     /* We want to use the earliest deadline from ALL vm_clocks */
395     clock = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
396     deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
397     if (deadline < 0) {
398         return;
399     }
400
401     if (deadline > 0) {
402         /*
403          * Ensure QEMU_CLOCK_VIRTUAL proceeds even when the virtual CPU goes to
404          * sleep.  Otherwise, the CPU might be waiting for a future timer
405          * interrupt to wake it up, but the interrupt never comes because
406          * the vCPU isn't running any insns and thus doesn't advance the
407          * QEMU_CLOCK_VIRTUAL.
408          *
409          * An extreme solution for this problem would be to never let VCPUs
410          * sleep in icount mode if there is a pending QEMU_CLOCK_VIRTUAL
411          * timer; rather time could just advance to the next QEMU_CLOCK_VIRTUAL
412          * event.  Instead, we do stop VCPUs and only advance QEMU_CLOCK_VIRTUAL
413          * after some e"real" time, (related to the time left until the next
414          * event) has passed. The QEMU_CLOCK_REALTIME timer will do this.
415          * This avoids that the warps are visible externally; for example,
416          * you will not be sending network packets continuously instead of
417          * every 100ms.
418          */
419         seqlock_write_lock(&timers_state.vm_clock_seqlock);
420         if (vm_clock_warp_start == -1 || vm_clock_warp_start > clock) {
421             vm_clock_warp_start = clock;
422         }
423         seqlock_write_unlock(&timers_state.vm_clock_seqlock);
424         timer_mod_anticipate(icount_warp_timer, clock + deadline);
425     } else if (deadline == 0) {
426         qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
427     }
428 }
429
430 static const VMStateDescription vmstate_timers = {
431     .name = "timer",
432     .version_id = 2,
433     .minimum_version_id = 1,
434     .minimum_version_id_old = 1,
435     .fields      = (VMStateField[]) {
436         VMSTATE_INT64(cpu_ticks_offset, TimersState),
437         VMSTATE_INT64(dummy, TimersState),
438         VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
439         VMSTATE_END_OF_LIST()
440     }
441 };
442
443 void configure_icount(const char *option)
444 {
445     seqlock_init(&timers_state.vm_clock_seqlock, NULL);
446     vmstate_register(NULL, 0, &vmstate_timers, &timers_state);
447     if (!option) {
448         return;
449     }
450
451     icount_warp_timer = timer_new_ns(QEMU_CLOCK_REALTIME,
452                                           icount_warp_rt, NULL);
453     if (strcmp(option, "auto") != 0) {
454         icount_time_shift = strtol(option, NULL, 0);
455         use_icount = 1;
456         return;
457     }
458
459     use_icount = 2;
460
461     /* 125MIPS seems a reasonable initial guess at the guest speed.
462        It will be corrected fairly quickly anyway.  */
463     icount_time_shift = 3;
464
465     /* Have both realtime and virtual time triggers for speed adjustment.
466        The realtime trigger catches emulated time passing too slowly,
467        the virtual time trigger catches emulated time passing too fast.
468        Realtime triggers occur even when idle, so use them less frequently
469        than VM triggers.  */
470     icount_rt_timer = timer_new_ms(QEMU_CLOCK_REALTIME,
471                                         icount_adjust_rt, NULL);
472     timer_mod(icount_rt_timer,
473                    qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + 1000);
474     icount_vm_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
475                                         icount_adjust_vm, NULL);
476     timer_mod(icount_vm_timer,
477                    qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
478                    get_ticks_per_sec() / 10);
479 }
480
481 /***********************************************************/
482 void hw_error(const char *fmt, ...)
483 {
484     va_list ap;
485     CPUState *cpu;
486
487     va_start(ap, fmt);
488     fprintf(stderr, "qemu: hardware error: ");
489     vfprintf(stderr, fmt, ap);
490     fprintf(stderr, "\n");
491     CPU_FOREACH(cpu) {
492         fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
493         cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU);
494     }
495     va_end(ap);
496     abort();
497 }
498
499 void cpu_synchronize_all_states(void)
500 {
501     CPUState *cpu;
502
503     CPU_FOREACH(cpu) {
504         cpu_synchronize_state(cpu);
505     }
506 }
507
508 void cpu_synchronize_all_post_reset(void)
509 {
510     CPUState *cpu;
511
512     CPU_FOREACH(cpu) {
513         cpu_synchronize_post_reset(cpu);
514 #ifdef CONFIG_HAX
515         if (hax_enabled())
516             hax_cpu_synchronize_post_reset(cpu);
517 #endif
518     }
519 }
520
521 void cpu_synchronize_all_post_init(void)
522 {
523     CPUState *cpu;
524
525     CPU_FOREACH(cpu) {
526         cpu_synchronize_post_init(cpu);
527 #ifdef CONFIG_HAX
528         if (hax_enabled())
529             hax_cpu_synchronize_post_init(cpu);
530 #endif
531     }
532 }
533
534 static int do_vm_stop(RunState state)
535 {
536     int ret = 0;
537
538     if (runstate_is_running()) {
539         cpu_disable_ticks();
540         pause_all_vcpus();
541         runstate_set(state);
542         vm_state_notify(0, state);
543         monitor_protocol_event(QEVENT_STOP, NULL);
544     }
545
546     bdrv_drain_all();
547     ret = bdrv_flush_all();
548
549     return ret;
550 }
551
552 static bool cpu_can_run(CPUState *cpu)
553 {
554     if (cpu->stop) {
555         return false;
556     }
557     if (cpu_is_stopped(cpu)) {
558         return false;
559     }
560     return true;
561 }
562
563 static void cpu_handle_guest_debug(CPUState *cpu)
564 {
565     gdb_set_stop_cpu(cpu);
566     qemu_system_debug_request();
567     cpu->stopped = true;
568 }
569
570 static void cpu_signal(int sig)
571 {
572     if (current_cpu) {
573         cpu_exit(current_cpu);
574     }
575     exit_request = 1;
576 }
577
578 #ifdef CONFIG_LINUX
579 static void sigbus_reraise(void)
580 {
581     sigset_t set;
582     struct sigaction action;
583
584     memset(&action, 0, sizeof(action));
585     action.sa_handler = SIG_DFL;
586     if (!sigaction(SIGBUS, &action, NULL)) {
587         raise(SIGBUS);
588         sigemptyset(&set);
589         sigaddset(&set, SIGBUS);
590         sigprocmask(SIG_UNBLOCK, &set, NULL);
591     }
592     perror("Failed to re-raise SIGBUS!\n");
593     abort();
594 }
595
596 static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo,
597                            void *ctx)
598 {
599     if (kvm_on_sigbus(siginfo->ssi_code,
600                       (void *)(intptr_t)siginfo->ssi_addr)) {
601         sigbus_reraise();
602     }
603 }
604
605 static void qemu_init_sigbus(void)
606 {
607     struct sigaction action;
608
609     memset(&action, 0, sizeof(action));
610     action.sa_flags = SA_SIGINFO;
611     action.sa_sigaction = (void (*)(int, siginfo_t*, void*))sigbus_handler;
612     sigaction(SIGBUS, &action, NULL);
613
614     prctl(PR_MCE_KILL, PR_MCE_KILL_SET, PR_MCE_KILL_EARLY, 0, 0);
615 }
616
617 static void qemu_kvm_eat_signals(CPUState *cpu)
618 {
619     struct timespec ts = { 0, 0 };
620     siginfo_t siginfo;
621     sigset_t waitset;
622     sigset_t chkset;
623     int r;
624
625     sigemptyset(&waitset);
626     sigaddset(&waitset, SIG_IPI);
627     sigaddset(&waitset, SIGBUS);
628
629     do {
630         r = sigtimedwait(&waitset, &siginfo, &ts);
631         if (r == -1 && !(errno == EAGAIN || errno == EINTR)) {
632             perror("sigtimedwait");
633             exit(1);
634         }
635
636         switch (r) {
637         case SIGBUS:
638             if (kvm_on_sigbus_vcpu(cpu, siginfo.si_code, siginfo.si_addr)) {
639                 sigbus_reraise();
640             }
641             break;
642         default:
643             break;
644         }
645
646         r = sigpending(&chkset);
647         if (r == -1) {
648             perror("sigpending");
649             exit(1);
650         }
651     } while (sigismember(&chkset, SIG_IPI) || sigismember(&chkset, SIGBUS));
652 }
653
654 #else /* !CONFIG_LINUX */
655
656 static void qemu_init_sigbus(void)
657 {
658 }
659
660 static void qemu_kvm_eat_signals(CPUState *cpu)
661 {
662 }
663 #endif /* !CONFIG_LINUX */
664
665 #ifndef _WIN32
666 static void dummy_signal(int sig)
667 {
668 }
669
670 static void qemu_kvm_init_cpu_signals(CPUState *cpu)
671 {
672     int r;
673     sigset_t set;
674     struct sigaction sigact;
675
676     memset(&sigact, 0, sizeof(sigact));
677     sigact.sa_handler = dummy_signal;
678     sigaction(SIG_IPI, &sigact, NULL);
679
680     pthread_sigmask(SIG_BLOCK, NULL, &set);
681     sigdelset(&set, SIG_IPI);
682     sigdelset(&set, SIGBUS);
683     r = kvm_set_signal_mask(cpu, &set);
684     if (r) {
685         fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
686         exit(1);
687     }
688 }
689
690 static void qemu_tcg_init_cpu_signals(void)
691 {
692     sigset_t set;
693     struct sigaction sigact;
694
695     memset(&sigact, 0, sizeof(sigact));
696     sigact.sa_handler = cpu_signal;
697     sigaction(SIG_IPI, &sigact, NULL);
698
699     sigemptyset(&set);
700     sigaddset(&set, SIG_IPI);
701     pthread_sigmask(SIG_UNBLOCK, &set, NULL);
702 }
703
704 #else /* _WIN32 */
705 static void qemu_kvm_init_cpu_signals(CPUState *cpu)
706 {
707     abort();
708 }
709
710 static void qemu_tcg_init_cpu_signals(void)
711 {
712 }
713 #endif /* _WIN32 */
714
715 static QemuMutex qemu_global_mutex;
716 static QemuCond qemu_io_proceeded_cond;
717 static bool iothread_requesting_mutex;
718
719 static QemuThread io_thread;
720
721 static QemuThread *tcg_cpu_thread;
722 static QemuCond *tcg_halt_cond;
723
724 /* cpu creation */
725 static QemuCond qemu_cpu_cond;
726 /* system init */
727 static QemuCond qemu_pause_cond;
728 static QemuCond qemu_work_cond;
729
730 void qemu_init_cpu_loop(void)
731 {
732     qemu_init_sigbus();
733     qemu_cond_init(&qemu_cpu_cond);
734     qemu_cond_init(&qemu_pause_cond);
735     qemu_cond_init(&qemu_work_cond);
736     qemu_cond_init(&qemu_io_proceeded_cond);
737     qemu_mutex_init(&qemu_global_mutex);
738
739     qemu_thread_get_self(&io_thread);
740 }
741
742 void run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data)
743 {
744     struct qemu_work_item wi;
745
746     if (qemu_cpu_is_self(cpu)) {
747         func(data);
748         return;
749     }
750
751     wi.func = func;
752     wi.data = data;
753     wi.free = false;
754     if (cpu->queued_work_first == NULL) {
755         cpu->queued_work_first = &wi;
756     } else {
757         cpu->queued_work_last->next = &wi;
758     }
759     cpu->queued_work_last = &wi;
760     wi.next = NULL;
761     wi.done = false;
762
763     qemu_cpu_kick(cpu);
764     while (!wi.done) {
765         CPUState *self_cpu = current_cpu;
766
767         qemu_cond_wait(&qemu_work_cond, &qemu_global_mutex);
768         current_cpu = self_cpu;
769     }
770 }
771
772 void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data)
773 {
774     struct qemu_work_item *wi;
775
776     if (qemu_cpu_is_self(cpu)) {
777         func(data);
778         return;
779     }
780
781     wi = g_malloc0(sizeof(struct qemu_work_item));
782     wi->func = func;
783     wi->data = data;
784     wi->free = true;
785     if (cpu->queued_work_first == NULL) {
786         cpu->queued_work_first = wi;
787     } else {
788         cpu->queued_work_last->next = wi;
789     }
790     cpu->queued_work_last = wi;
791     wi->next = NULL;
792     wi->done = false;
793
794     qemu_cpu_kick(cpu);
795 }
796
797 static void flush_queued_work(CPUState *cpu)
798 {
799     struct qemu_work_item *wi;
800
801     if (cpu->queued_work_first == NULL) {
802         return;
803     }
804
805     while ((wi = cpu->queued_work_first)) {
806         cpu->queued_work_first = wi->next;
807         wi->func(wi->data);
808         wi->done = true;
809         if (wi->free) {
810             g_free(wi);
811         }
812     }
813     cpu->queued_work_last = NULL;
814     qemu_cond_broadcast(&qemu_work_cond);
815 }
816
817 static void qemu_wait_io_event_common(CPUState *cpu)
818 {
819     if (cpu->stop) {
820         cpu->stop = false;
821         cpu->stopped = true;
822         qemu_cond_signal(&qemu_pause_cond);
823     }
824     flush_queued_work(cpu);
825     cpu->thread_kicked = false;
826 }
827
828 static void qemu_tcg_wait_io_event(void)
829 {
830     CPUState *cpu;
831
832     while (all_cpu_threads_idle()) {
833        /* Start accounting real time to the virtual clock if the CPUs
834           are idle.  */
835         qemu_clock_warp(QEMU_CLOCK_VIRTUAL);
836         qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex);
837     }
838
839     while (iothread_requesting_mutex) {
840         qemu_cond_wait(&qemu_io_proceeded_cond, &qemu_global_mutex);
841     }
842
843     CPU_FOREACH(cpu) {
844         qemu_wait_io_event_common(cpu);
845     }
846 }
847
848 #ifdef CONFIG_HAX
849 static void qemu_hax_wait_io_event(CPUState *cpu)
850 {
851     while (cpu_thread_is_idle(cpu)) {
852         qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
853     }
854
855     qemu_wait_io_event_common(cpu);
856 }
857 #endif
858
859 static void qemu_kvm_wait_io_event(CPUState *cpu)
860 {
861     while (cpu_thread_is_idle(cpu)) {
862         qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
863     }
864
865     qemu_kvm_eat_signals(cpu);
866     qemu_wait_io_event_common(cpu);
867 }
868
869 static void *qemu_kvm_cpu_thread_fn(void *arg)
870 {
871     CPUState *cpu = arg;
872     int r;
873
874     qemu_mutex_lock(&qemu_global_mutex);
875     qemu_thread_get_self(cpu->thread);
876     cpu->thread_id = qemu_get_thread_id();
877     current_cpu = cpu;
878
879     r = kvm_init_vcpu(cpu);
880     if (r < 0) {
881         fprintf(stderr, "kvm_init_vcpu failed: %s\n", strerror(-r));
882         exit(1);
883     }
884
885     qemu_kvm_init_cpu_signals(cpu);
886
887     /* signal CPU creation */
888     cpu->created = true;
889     qemu_cond_signal(&qemu_cpu_cond);
890
891     while (1) {
892         if (cpu_can_run(cpu)) {
893             r = kvm_cpu_exec(cpu);
894             if (r == EXCP_DEBUG) {
895                 cpu_handle_guest_debug(cpu);
896             }
897         }
898         qemu_kvm_wait_io_event(cpu);
899     }
900
901     return NULL;
902 }
903
904 static void *qemu_dummy_cpu_thread_fn(void *arg)
905 {
906 #ifdef _WIN32
907     fprintf(stderr, "qtest is not supported under Windows\n");
908     exit(1);
909 #else
910     CPUState *cpu = arg;
911     sigset_t waitset;
912     int r;
913
914     qemu_mutex_lock_iothread();
915     qemu_thread_get_self(cpu->thread);
916     cpu->thread_id = qemu_get_thread_id();
917
918     sigemptyset(&waitset);
919     sigaddset(&waitset, SIG_IPI);
920
921     /* signal CPU creation */
922     cpu->created = true;
923     qemu_cond_signal(&qemu_cpu_cond);
924
925     current_cpu = cpu;
926     while (1) {
927         current_cpu = NULL;
928         qemu_mutex_unlock_iothread();
929         do {
930             int sig;
931             r = sigwait(&waitset, &sig);
932         } while (r == -1 && (errno == EAGAIN || errno == EINTR));
933         if (r == -1) {
934             perror("sigwait");
935             exit(1);
936         }
937         qemu_mutex_lock_iothread();
938         current_cpu = cpu;
939         qemu_wait_io_event_common(cpu);
940     }
941
942     return NULL;
943 #endif
944 }
945
946 static void tcg_exec_all(void);
947
948 static void *qemu_tcg_cpu_thread_fn(void *arg)
949 {
950     CPUState *cpu = arg;
951
952     qemu_tcg_init_cpu_signals();
953     qemu_thread_get_self(cpu->thread);
954
955     qemu_mutex_lock(&qemu_global_mutex);
956     CPU_FOREACH(cpu) {
957         cpu->thread_id = qemu_get_thread_id();
958         cpu->created = true;
959     }
960     qemu_cond_signal(&qemu_cpu_cond);
961
962     /* wait for initial kick-off after machine start */
963     while (QTAILQ_FIRST(&cpus)->stopped) {
964         qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex);
965
966         /* process any pending work */
967         CPU_FOREACH(cpu) {
968             qemu_wait_io_event_common(cpu);
969         }
970     }
971
972     while (1) {
973         tcg_exec_all();
974
975         if (use_icount) {
976             int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
977
978             if (deadline == 0) {
979                 qemu_clock_notify(QEMU_CLOCK_VIRTUAL);
980             }
981         }
982         qemu_tcg_wait_io_event();
983     }
984
985     return NULL;
986 }
987
988 #ifdef CONFIG_HAX
989 static void *qemu_hax_cpu_thread_fn(void *arg)
990 {
991     CPUState *cpu = arg;
992     int r;
993
994     qemu_thread_get_self(cpu->thread);
995     qemu_mutex_lock(&qemu_global_mutex);
996
997     cpu->thread_id = qemu_get_thread_id();
998     cpu->created = true;
999     cpu->halted = 0;
1000     current_cpu = cpu;
1001
1002     hax_init_vcpu(cpu);
1003     qemu_cond_signal(&qemu_cpu_cond);
1004
1005     while (1) {
1006         if (cpu_can_run(cpu)) {
1007             r = hax_smp_cpu_exec(cpu);
1008             if (r == EXCP_DEBUG) {
1009                 cpu_handle_guest_debug(cpu);
1010             }
1011         }
1012         qemu_hax_wait_io_event(cpu);
1013     }
1014     return NULL;
1015 }
1016 #endif
1017
1018 static void qemu_cpu_kick_thread(CPUState *cpu)
1019 {
1020 #ifndef _WIN32
1021     int err;
1022
1023     err = pthread_kill(cpu->thread->thread, SIG_IPI);
1024     if (err) {
1025         fprintf(stderr, "qemu:%s: %s", __func__, strerror(err));
1026         exit(1);
1027     }
1028 /* The cpu thread cannot catch it reliably when shutdown the guest on Mac.
1029  * We can double check it and resend it
1030  */
1031
1032 #ifdef CONFIG_DARWIN
1033     if (!exit_request)
1034         cpu_signal(0);
1035
1036     cpu->exit_request = 1;
1037 #endif
1038 #else /* _WIN32 */
1039     if (!qemu_cpu_is_self(cpu)) {
1040         CONTEXT tcgContext;
1041
1042         if (SuspendThread(cpu->hThread) == (DWORD)-1) {
1043             fprintf(stderr, "qemu:%s: GetLastError:%lu\n", __func__,
1044                     GetLastError());
1045             exit(1);
1046         }
1047
1048         /* On multi-core systems, we are not sure that the thread is actually
1049          * suspended until we can get the context.
1050          */
1051         tcgContext.ContextFlags = CONTEXT_CONTROL;
1052         while (GetThreadContext(cpu->hThread, &tcgContext) != 0) {
1053             continue;
1054         }
1055
1056         cpu_signal(0);
1057         cpu->exit_request = 1;
1058
1059         if (ResumeThread(cpu->hThread) == (DWORD)-1) {
1060             fprintf(stderr, "qemu:%s: GetLastError:%lu\n", __func__,
1061                     GetLastError());
1062             exit(1);
1063         }
1064     }
1065 #endif
1066 }
1067
1068 void qemu_cpu_kick(CPUState *cpu)
1069 {
1070     qemu_cond_broadcast(cpu->halt_cond);
1071     if ((hax_enabled() || !tcg_enabled()) && !cpu->thread_kicked) {
1072         qemu_cpu_kick_thread(cpu);
1073         cpu->thread_kicked = true;
1074     }
1075 }
1076
1077 void qemu_cpu_kick_self(void)
1078 {
1079 #ifndef _WIN32
1080     assert(current_cpu);
1081
1082     if (!current_cpu->thread_kicked) {
1083         qemu_cpu_kick_thread(current_cpu);
1084         current_cpu->thread_kicked = true;
1085     }
1086 #else
1087     abort();
1088 #endif
1089 }
1090
1091 bool qemu_cpu_is_self(CPUState *cpu)
1092 {
1093     return qemu_thread_is_self(cpu->thread);
1094 }
1095
1096 static bool qemu_in_vcpu_thread(void)
1097 {
1098     return current_cpu && qemu_cpu_is_self(current_cpu);
1099 }
1100
1101 void qemu_mutex_lock_iothread(void)
1102 {
1103     if (hax_enabled() || !tcg_enabled()) {
1104         qemu_mutex_lock(&qemu_global_mutex);
1105     } else {
1106         iothread_requesting_mutex = true;
1107         if (qemu_mutex_trylock(&qemu_global_mutex)) {
1108             qemu_cpu_kick_thread(first_cpu);
1109             qemu_mutex_lock(&qemu_global_mutex);
1110         }
1111         iothread_requesting_mutex = false;
1112         qemu_cond_broadcast(&qemu_io_proceeded_cond);
1113     }
1114 }
1115
1116 void qemu_mutex_unlock_iothread(void)
1117 {
1118     qemu_mutex_unlock(&qemu_global_mutex);
1119 }
1120
1121 static int all_vcpus_paused(void)
1122 {
1123     CPUState *cpu;
1124
1125     CPU_FOREACH(cpu) {
1126         if (!cpu->stopped) {
1127             return 0;
1128         }
1129     }
1130
1131     return 1;
1132 }
1133
1134 void pause_all_vcpus(void)
1135 {
1136     CPUState *cpu;
1137
1138     qemu_clock_enable(QEMU_CLOCK_VIRTUAL, false);
1139     CPU_FOREACH(cpu) {
1140         cpu->stop = true;
1141         qemu_cpu_kick(cpu);
1142     }
1143
1144     if (qemu_in_vcpu_thread()) {
1145         cpu_stop_current();
1146         if (!kvm_enabled()) {
1147             CPU_FOREACH(cpu) {
1148                 cpu->stop = false;
1149                 cpu->stopped = true;
1150             }
1151             return;
1152         }
1153     }
1154
1155     while (!all_vcpus_paused()) {
1156         qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex);
1157         CPU_FOREACH(cpu) {
1158             qemu_cpu_kick(cpu);
1159         }
1160     }
1161 }
1162
1163 void cpu_resume(CPUState *cpu)
1164 {
1165     cpu->stop = false;
1166     cpu->stopped = false;
1167     qemu_cpu_kick(cpu);
1168 }
1169
1170 void resume_all_vcpus(void)
1171 {
1172     CPUState *cpu;
1173
1174     qemu_clock_enable(QEMU_CLOCK_VIRTUAL, true);
1175     CPU_FOREACH(cpu) {
1176         cpu_resume(cpu);
1177     }
1178 }
1179
1180 /* For temporary buffers for forming a name */
1181 #define VCPU_THREAD_NAME_SIZE 16
1182
1183 static void qemu_tcg_init_vcpu(CPUState *cpu)
1184 {
1185 #ifdef  CONFIG_HAX
1186     if (hax_enabled())
1187         hax_init_vcpu(cpu);
1188 #endif
1189     char thread_name[VCPU_THREAD_NAME_SIZE];
1190
1191     tcg_cpu_address_space_init(cpu, cpu->as);
1192
1193     /* share a single thread for all cpus with TCG */
1194     if (!tcg_cpu_thread) {
1195         cpu->thread = g_malloc0(sizeof(QemuThread));
1196         cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1197         qemu_cond_init(cpu->halt_cond);
1198         tcg_halt_cond = cpu->halt_cond;
1199         snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
1200                  cpu->cpu_index);
1201         qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
1202                            cpu, QEMU_THREAD_JOINABLE);
1203 #ifdef _WIN32
1204         cpu->hThread = qemu_thread_get_handle(cpu->thread);
1205 #endif
1206         while (!cpu->created) {
1207             qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1208         }
1209         tcg_cpu_thread = cpu->thread;
1210     } else {
1211         cpu->thread = tcg_cpu_thread;
1212         cpu->halt_cond = tcg_halt_cond;
1213     }
1214 }
1215
1216 #ifdef CONFIG_HAX
1217 static void qemu_hax_start_vcpu(CPUState *cpu)
1218 {
1219     char thread_name[VCPU_THREAD_NAME_SIZE];
1220
1221     cpu->thread = g_malloc0(sizeof(QemuThread));
1222     cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1223     qemu_cond_init(cpu->halt_cond);
1224
1225     snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HAX",
1226              cpu->cpu_index);
1227
1228     qemu_thread_create(cpu->thread, thread_name, qemu_hax_cpu_thread_fn,
1229                        cpu, QEMU_THREAD_JOINABLE);
1230 #ifdef _WIN32
1231         cpu->hThread = qemu_thread_get_handle(cpu->thread);
1232 #endif
1233     while (!cpu->created) {
1234         qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1235     }
1236 }
1237 #endif
1238
1239 static void qemu_kvm_start_vcpu(CPUState *cpu)
1240 {
1241     char thread_name[VCPU_THREAD_NAME_SIZE];
1242
1243     cpu->thread = g_malloc0(sizeof(QemuThread));
1244     cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1245     qemu_cond_init(cpu->halt_cond);
1246     snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
1247              cpu->cpu_index);
1248     qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn,
1249                        cpu, QEMU_THREAD_JOINABLE);
1250     while (!cpu->created) {
1251         qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1252     }
1253 }
1254
1255 static void qemu_dummy_start_vcpu(CPUState *cpu)
1256 {
1257     char thread_name[VCPU_THREAD_NAME_SIZE];
1258
1259     cpu->thread = g_malloc0(sizeof(QemuThread));
1260     cpu->halt_cond = g_malloc0(sizeof(QemuCond));
1261     qemu_cond_init(cpu->halt_cond);
1262     snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
1263              cpu->cpu_index);
1264     qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, cpu,
1265                        QEMU_THREAD_JOINABLE);
1266     while (!cpu->created) {
1267         qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
1268     }
1269 }
1270
1271 void qemu_init_vcpu(CPUState *cpu)
1272 {
1273     cpu->nr_cores = smp_cores;
1274     cpu->nr_threads = smp_threads;
1275     cpu->stopped = true;
1276     if (kvm_enabled()) {
1277         qemu_kvm_start_vcpu(cpu);
1278 #ifdef CONFIG_HAX
1279     } else if (hax_enabled()) {
1280         qemu_hax_start_vcpu(cpu);
1281 #endif
1282     } else if (tcg_enabled()) {
1283         qemu_tcg_init_vcpu(cpu);
1284     } else {
1285         qemu_dummy_start_vcpu(cpu);
1286     }
1287 }
1288
1289 void cpu_stop_current(void)
1290 {
1291     if (current_cpu) {
1292         current_cpu->stop = false;
1293         current_cpu->stopped = true;
1294         cpu_exit(current_cpu);
1295         qemu_cond_signal(&qemu_pause_cond);
1296     }
1297 }
1298
1299 int vm_stop(RunState state)
1300 {
1301     if (qemu_in_vcpu_thread()) {
1302         qemu_system_vmstop_request(state);
1303         /*
1304          * FIXME: should not return to device code in case
1305          * vm_stop() has been requested.
1306          */
1307         cpu_stop_current();
1308         return 0;
1309     }
1310
1311     return do_vm_stop(state);
1312 }
1313
1314 /* does a state transition even if the VM is already stopped,
1315    current state is forgotten forever */
1316 int vm_stop_force_state(RunState state)
1317 {
1318     if (runstate_is_running()) {
1319         return vm_stop(state);
1320     } else {
1321         runstate_set(state);
1322         /* Make sure to return an error if the flush in a previous vm_stop()
1323          * failed. */
1324         return bdrv_flush_all();
1325     }
1326 }
1327
1328 static int tcg_cpu_exec(CPUArchState *env)
1329 {
1330     CPUState *cpu = ENV_GET_CPU(env);
1331     int ret;
1332 #ifdef CONFIG_PROFILER
1333     int64_t ti;
1334 #endif
1335
1336 #ifdef CONFIG_PROFILER
1337     ti = profile_getclock();
1338 #endif
1339     if (use_icount) {
1340         int64_t count;
1341         int64_t deadline;
1342         int decr;
1343         qemu_icount -= (cpu->icount_decr.u16.low + cpu->icount_extra);
1344         cpu->icount_decr.u16.low = 0;
1345         cpu->icount_extra = 0;
1346         deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL);
1347
1348         /* Maintain prior (possibly buggy) behaviour where if no deadline
1349          * was set (as there is no QEMU_CLOCK_VIRTUAL timer) or it is more than
1350          * INT32_MAX nanoseconds ahead, we still use INT32_MAX
1351          * nanoseconds.
1352          */
1353         if ((deadline < 0) || (deadline > INT32_MAX)) {
1354             deadline = INT32_MAX;
1355         }
1356
1357         count = qemu_icount_round(deadline);
1358         qemu_icount += count;
1359         decr = (count > 0xffff) ? 0xffff : count;
1360         count -= decr;
1361         cpu->icount_decr.u16.low = decr;
1362         cpu->icount_extra = count;
1363     }
1364     ret = cpu_exec(env);
1365 #ifdef CONFIG_PROFILER
1366     qemu_time += profile_getclock() - ti;
1367 #endif
1368     if (use_icount) {
1369         /* Fold pending instructions back into the
1370            instruction counter, and clear the interrupt flag.  */
1371         qemu_icount -= (cpu->icount_decr.u16.low + cpu->icount_extra);
1372         cpu->icount_decr.u32 = 0;
1373         cpu->icount_extra = 0;
1374     }
1375     return ret;
1376 }
1377
1378 static void tcg_exec_all(void)
1379 {
1380     int r;
1381
1382     /* Account partial waits to QEMU_CLOCK_VIRTUAL.  */
1383     qemu_clock_warp(QEMU_CLOCK_VIRTUAL);
1384
1385     if (next_cpu == NULL) {
1386         next_cpu = first_cpu;
1387     }
1388     for (; next_cpu != NULL && !exit_request; next_cpu = CPU_NEXT(next_cpu)) {
1389         CPUState *cpu = next_cpu;
1390         CPUArchState *env = cpu->env_ptr;
1391
1392         qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
1393                           (cpu->singlestep_enabled & SSTEP_NOTIMER) == 0);
1394
1395         if (cpu_can_run(cpu)) {
1396             r = tcg_cpu_exec(env);
1397             if (r == EXCP_DEBUG) {
1398                 cpu_handle_guest_debug(cpu);
1399                 break;
1400             }
1401         } else if (cpu->stop || cpu->stopped) {
1402             break;
1403         }
1404     }
1405     exit_request = 0;
1406 }
1407
1408 void set_numa_modes(void)
1409 {
1410     CPUState *cpu;
1411     int i;
1412
1413     CPU_FOREACH(cpu) {
1414         for (i = 0; i < nb_numa_nodes; i++) {
1415             if (test_bit(cpu->cpu_index, node_cpumask[i])) {
1416                 cpu->numa_node = i;
1417             }
1418         }
1419     }
1420 }
1421
1422 void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg)
1423 {
1424     /* XXX: implement xxx_cpu_list for targets that still miss it */
1425 #if defined(cpu_list)
1426     cpu_list(f, cpu_fprintf);
1427 #endif
1428 }
1429
1430 CpuInfoList *qmp_query_cpus(Error **errp)
1431 {
1432     CpuInfoList *head = NULL, *cur_item = NULL;
1433     CPUState *cpu;
1434
1435     CPU_FOREACH(cpu) {
1436         CpuInfoList *info;
1437 #if defined(TARGET_I386)
1438         X86CPU *x86_cpu = X86_CPU(cpu);
1439         CPUX86State *env = &x86_cpu->env;
1440 #elif defined(TARGET_PPC)
1441         PowerPCCPU *ppc_cpu = POWERPC_CPU(cpu);
1442         CPUPPCState *env = &ppc_cpu->env;
1443 #elif defined(TARGET_SPARC)
1444         SPARCCPU *sparc_cpu = SPARC_CPU(cpu);
1445         CPUSPARCState *env = &sparc_cpu->env;
1446 #elif defined(TARGET_MIPS)
1447         MIPSCPU *mips_cpu = MIPS_CPU(cpu);
1448         CPUMIPSState *env = &mips_cpu->env;
1449 #endif
1450
1451         cpu_synchronize_state(cpu);
1452
1453         info = g_malloc0(sizeof(*info));
1454         info->value = g_malloc0(sizeof(*info->value));
1455         info->value->CPU = cpu->cpu_index;
1456         info->value->current = (cpu == first_cpu);
1457         info->value->halted = cpu->halted;
1458         info->value->thread_id = cpu->thread_id;
1459 #if defined(TARGET_I386)
1460         info->value->has_pc = true;
1461         info->value->pc = env->eip + env->segs[R_CS].base;
1462 #elif defined(TARGET_PPC)
1463         info->value->has_nip = true;
1464         info->value->nip = env->nip;
1465 #elif defined(TARGET_SPARC)
1466         info->value->has_pc = true;
1467         info->value->pc = env->pc;
1468         info->value->has_npc = true;
1469         info->value->npc = env->npc;
1470 #elif defined(TARGET_MIPS)
1471         info->value->has_PC = true;
1472         info->value->PC = env->active_tc.PC;
1473 #endif
1474
1475         /* XXX: waiting for the qapi to support GSList */
1476         if (!cur_item) {
1477             head = cur_item = info;
1478         } else {
1479             cur_item->next = info;
1480             cur_item = info;
1481         }
1482     }
1483
1484     return head;
1485 }
1486
1487 void qmp_memsave(int64_t addr, int64_t size, const char *filename,
1488                  bool has_cpu, int64_t cpu_index, Error **errp)
1489 {
1490     FILE *f;
1491     uint32_t l;
1492     CPUState *cpu;
1493     uint8_t buf[1024];
1494
1495     if (!has_cpu) {
1496         cpu_index = 0;
1497     }
1498
1499     cpu = qemu_get_cpu(cpu_index);
1500     if (cpu == NULL) {
1501         error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
1502                   "a CPU number");
1503         return;
1504     }
1505
1506     f = fopen(filename, "wb");
1507     if (!f) {
1508         error_setg_file_open(errp, errno, filename);
1509         return;
1510     }
1511
1512     while (size != 0) {
1513         l = sizeof(buf);
1514         if (l > size)
1515             l = size;
1516         if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
1517             error_setg(errp, "Invalid addr 0x%016" PRIx64 "specified", addr);
1518             goto exit;
1519         }
1520         if (fwrite(buf, 1, l, f) != l) {
1521             error_set(errp, QERR_IO_ERROR);
1522             goto exit;
1523         }
1524         addr += l;
1525         size -= l;
1526     }
1527
1528 exit:
1529     fclose(f);
1530 }
1531
1532 void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
1533                   Error **errp)
1534 {
1535     FILE *f;
1536     uint32_t l;
1537     uint8_t buf[1024];
1538
1539     f = fopen(filename, "wb");
1540     if (!f) {
1541         error_setg_file_open(errp, errno, filename);
1542         return;
1543     }
1544
1545     while (size != 0) {
1546         l = sizeof(buf);
1547         if (l > size)
1548             l = size;
1549         cpu_physical_memory_rw(addr, buf, l, 0);
1550         if (fwrite(buf, 1, l, f) != l) {
1551             error_set(errp, QERR_IO_ERROR);
1552             goto exit;
1553         }
1554         addr += l;
1555         size -= l;
1556     }
1557
1558 exit:
1559     fclose(f);
1560 }
1561
1562 void qmp_inject_nmi(Error **errp)
1563 {
1564 #if defined(TARGET_I386)
1565     CPUState *cs;
1566
1567     CPU_FOREACH(cs) {
1568         X86CPU *cpu = X86_CPU(cs);
1569
1570         if (!cpu->apic_state) {
1571             cpu_interrupt(cs, CPU_INTERRUPT_NMI);
1572         } else {
1573             apic_deliver_nmi(cpu->apic_state);
1574         }
1575     }
1576 #elif defined(TARGET_S390X)
1577     CPUState *cs;
1578     S390CPU *cpu;
1579
1580     CPU_FOREACH(cs) {
1581         cpu = S390_CPU(cs);
1582         if (cpu->env.cpu_num == monitor_get_cpu_index()) {
1583             if (s390_cpu_restart(S390_CPU(cs)) == -1) {
1584                 error_set(errp, QERR_UNSUPPORTED);
1585                 return;
1586             }
1587             break;
1588         }
1589     }
1590 #else
1591     error_set(errp, QERR_UNSUPPORTED);
1592 #endif
1593 }