Lines Matching full:cpu

36 #include "exec/cpu-common.h"
45 #include "system/cpu-timers.h"
77 bool cpu_is_stopped(CPUState *cpu) in cpu_is_stopped() argument
79 return cpu->stopped || !runstate_is_running(); in cpu_is_stopped()
82 bool cpu_work_list_empty(CPUState *cpu) in cpu_work_list_empty() argument
84 return QSIMPLEQ_EMPTY_ATOMIC(&cpu->work_list); in cpu_work_list_empty()
87 bool cpu_thread_is_idle(CPUState *cpu) in cpu_thread_is_idle() argument
89 if (cpu->stop || !cpu_work_list_empty(cpu)) { in cpu_thread_is_idle()
92 if (cpu_is_stopped(cpu)) { in cpu_thread_is_idle()
95 if (!cpu->halted || cpu_has_work(cpu)) { in cpu_thread_is_idle()
99 return cpus_accel->cpu_thread_is_idle(cpu); in cpu_thread_is_idle()
106 CPUState *cpu; in all_cpu_threads_idle() local
108 CPU_FOREACH(cpu) { in all_cpu_threads_idle()
109 if (!cpu_thread_is_idle(cpu)) { in all_cpu_threads_idle()
120 CPUState *cpu; in hw_error() local
126 CPU_FOREACH(cpu) { in hw_error()
127 fprintf(stderr, "CPU #%d:\n", cpu->cpu_index); in hw_error()
128 cpu_dump_state(cpu, stderr, CPU_DUMP_FPU); in hw_error()
136 CPUState *cpu; in cpu_synchronize_all_states() local
138 CPU_FOREACH(cpu) { in cpu_synchronize_all_states()
139 cpu_synchronize_state(cpu); in cpu_synchronize_all_states()
145 CPUState *cpu; in cpu_synchronize_all_post_reset() local
147 CPU_FOREACH(cpu) { in cpu_synchronize_all_post_reset()
148 cpu_synchronize_post_reset(cpu); in cpu_synchronize_all_post_reset()
154 CPUState *cpu; in cpu_synchronize_all_post_init() local
156 CPU_FOREACH(cpu) { in cpu_synchronize_all_post_init()
157 cpu_synchronize_post_init(cpu); in cpu_synchronize_all_post_init()
163 CPUState *cpu; in cpu_synchronize_all_pre_loadvm() local
165 CPU_FOREACH(cpu) { in cpu_synchronize_all_pre_loadvm()
166 cpu_synchronize_pre_loadvm(cpu); in cpu_synchronize_all_pre_loadvm()
170 void cpu_synchronize_state(CPUState *cpu) in cpu_synchronize_state() argument
173 cpus_accel->synchronize_state(cpu); in cpu_synchronize_state()
177 void cpu_synchronize_post_reset(CPUState *cpu) in cpu_synchronize_post_reset() argument
180 cpus_accel->synchronize_post_reset(cpu); in cpu_synchronize_post_reset()
184 void cpu_synchronize_post_init(CPUState *cpu) in cpu_synchronize_post_init() argument
187 cpus_accel->synchronize_post_init(cpu); in cpu_synchronize_post_init()
191 void cpu_synchronize_pre_loadvm(CPUState *cpu) in cpu_synchronize_pre_loadvm() argument
194 cpus_accel->synchronize_pre_loadvm(cpu); in cpu_synchronize_pre_loadvm()
206 void cpu_exec_reset_hold(CPUState *cpu) in cpu_exec_reset_hold() argument
209 cpus_accel->cpu_reset_hold(cpu); in cpu_exec_reset_hold()
246 * icount is active, cpus_get_elapsed_ticks() uses units of the host CPU cycle
257 static void generic_handle_interrupt(CPUState *cpu, int mask) in generic_handle_interrupt() argument
259 cpu->interrupt_request |= mask; in generic_handle_interrupt()
261 if (!qemu_cpu_is_self(cpu)) { in generic_handle_interrupt()
262 qemu_cpu_kick(cpu); in generic_handle_interrupt()
266 void cpu_interrupt(CPUState *cpu, int mask) in cpu_interrupt() argument
269 cpus_accel->handle_interrupt(cpu, mask); in cpu_interrupt()
271 generic_handle_interrupt(cpu, mask); in cpu_interrupt()
327 bool cpu_can_run(CPUState *cpu) in cpu_can_run() argument
329 if (cpu->stop) { in cpu_can_run()
332 if (cpu_is_stopped(cpu)) { in cpu_can_run()
338 void cpu_handle_guest_debug(CPUState *cpu) in cpu_handle_guest_debug() argument
341 if (!cpu->singlestep_enabled) { in cpu_handle_guest_debug()
347 cpu_single_step(cpu, SSTEP_ENABLE); in cpu_handle_guest_debug()
349 cpu_single_step(cpu, 0); in cpu_handle_guest_debug()
352 gdb_set_stop_cpu(cpu); in cpu_handle_guest_debug()
354 cpu->stopped = true; in cpu_handle_guest_debug()
418 /* cpu creation */
433 void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data) in run_on_cpu() argument
435 do_run_on_cpu(cpu, func, data, &bql); in run_on_cpu()
438 static void qemu_cpu_stop(CPUState *cpu, bool exit) in qemu_cpu_stop() argument
440 g_assert(qemu_cpu_is_self(cpu)); in qemu_cpu_stop()
441 cpu->stop = false; in qemu_cpu_stop()
442 cpu->stopped = true; in qemu_cpu_stop()
444 cpu_exit(cpu); in qemu_cpu_stop()
449 void qemu_wait_io_event_common(CPUState *cpu) in qemu_wait_io_event_common() argument
451 qatomic_set_mb(&cpu->thread_kicked, false); in qemu_wait_io_event_common()
452 if (cpu->stop) { in qemu_wait_io_event_common()
453 qemu_cpu_stop(cpu, false); in qemu_wait_io_event_common()
455 process_queued_cpu_work(cpu); in qemu_wait_io_event_common()
458 void qemu_wait_io_event(CPUState *cpu) in qemu_wait_io_event() argument
462 while (cpu_thread_is_idle(cpu)) { in qemu_wait_io_event()
465 qemu_plugin_vcpu_idle_cb(cpu); in qemu_wait_io_event()
467 qemu_cond_wait(cpu->halt_cond, &bql); in qemu_wait_io_event()
470 qemu_plugin_vcpu_resume_cb(cpu); in qemu_wait_io_event()
473 qemu_wait_io_event_common(cpu); in qemu_wait_io_event()
476 void cpus_kick_thread(CPUState *cpu) in cpus_kick_thread() argument
478 if (cpu->thread_kicked) { in cpus_kick_thread()
481 cpu->thread_kicked = true; in cpus_kick_thread()
484 int err = pthread_kill(cpu->thread->thread, SIG_IPI); in cpus_kick_thread()
490 qemu_sem_post(&cpu->sem); in cpus_kick_thread()
494 void qemu_cpu_kick(CPUState *cpu) in qemu_cpu_kick() argument
496 qemu_cond_broadcast(cpu->halt_cond); in qemu_cpu_kick()
498 cpus_accel->kick_vcpu_thread(cpu); in qemu_cpu_kick()
500 cpus_kick_thread(cpu); in qemu_cpu_kick()
510 bool qemu_cpu_is_self(CPUState *cpu) in qemu_cpu_is_self() argument
512 return qemu_thread_is_self(cpu->thread); in qemu_cpu_is_self()
583 /* signal CPU creation */
584 void cpu_thread_signal_created(CPUState *cpu) in cpu_thread_signal_created() argument
586 cpu->created = true; in cpu_thread_signal_created()
590 /* signal CPU destruction */
591 void cpu_thread_signal_destroyed(CPUState *cpu) in cpu_thread_signal_destroyed() argument
593 cpu->created = false; in cpu_thread_signal_destroyed()
597 void cpu_pause(CPUState *cpu) in cpu_pause() argument
599 if (qemu_cpu_is_self(cpu)) { in cpu_pause()
600 qemu_cpu_stop(cpu, true); in cpu_pause()
602 cpu->stop = true; in cpu_pause()
603 qemu_cpu_kick(cpu); in cpu_pause()
607 void cpu_resume(CPUState *cpu) in cpu_resume() argument
609 cpu->stop = false; in cpu_resume()
610 cpu->stopped = false; in cpu_resume()
611 qemu_cpu_kick(cpu); in cpu_resume()
616 CPUState *cpu; in all_vcpus_paused() local
618 CPU_FOREACH(cpu) { in all_vcpus_paused()
619 if (!cpu->stopped) { in all_vcpus_paused()
629 CPUState *cpu; in pause_all_vcpus() local
632 CPU_FOREACH(cpu) { in pause_all_vcpus()
633 cpu_pause(cpu); in pause_all_vcpus()
643 CPU_FOREACH(cpu) { in pause_all_vcpus()
644 qemu_cpu_kick(cpu); in pause_all_vcpus()
655 CPUState *cpu; in resume_all_vcpus() local
662 CPU_FOREACH(cpu) { in resume_all_vcpus()
663 cpu_resume(cpu); in resume_all_vcpus()
667 void cpu_remove_sync(CPUState *cpu) in cpu_remove_sync() argument
669 cpu->stop = true; in cpu_remove_sync()
670 cpu->unplug = true; in cpu_remove_sync()
671 qemu_cpu_kick(cpu); in cpu_remove_sync()
673 qemu_thread_join(cpu->thread); in cpu_remove_sync()
691 void qemu_init_vcpu(CPUState *cpu) in qemu_init_vcpu() argument
695 cpu->nr_threads = ms->smp.threads; in qemu_init_vcpu()
696 cpu->stopped = true; in qemu_init_vcpu()
697 cpu->random_seed = qemu_guest_random_seed_thread_part1(); in qemu_init_vcpu()
699 if (!cpu->as) { in qemu_init_vcpu()
700 /* If the target cpu hasn't set up any address spaces itself, in qemu_init_vcpu()
703 cpu->num_ases = 1; in qemu_init_vcpu()
704 cpu_address_space_init(cpu, 0, "cpu-memory", cpu->memory); in qemu_init_vcpu()
709 cpus_accel->create_vcpu_thread(cpu); in qemu_init_vcpu()
711 while (!cpu->created) { in qemu_init_vcpu()
825 CPUState *cpu; in qmp_memsave() local
833 cpu = qemu_get_cpu(cpu_index); in qmp_memsave()
834 if (cpu == NULL) { in qmp_memsave()
835 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index", in qmp_memsave()
836 "a CPU number"); in qmp_memsave()
850 if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) { in qmp_memsave()