Lines Matching full:cpu

35 #include "exec/cpu-common.h"
44 #include "sysemu/cpu-timers.h"
76 bool cpu_is_stopped(CPUState *cpu) in cpu_is_stopped() argument
78 return cpu->stopped || !runstate_is_running(); in cpu_is_stopped()
81 bool cpu_work_list_empty(CPUState *cpu) in cpu_work_list_empty() argument
83 return QSIMPLEQ_EMPTY_ATOMIC(&cpu->work_list); in cpu_work_list_empty()
86 bool cpu_thread_is_idle(CPUState *cpu) in cpu_thread_is_idle() argument
88 if (cpu->stop || !cpu_work_list_empty(cpu)) { in cpu_thread_is_idle()
91 if (cpu_is_stopped(cpu)) { in cpu_thread_is_idle()
94 if (!cpu->halted || cpu_has_work(cpu)) { in cpu_thread_is_idle()
98 return cpus_accel->cpu_thread_is_idle(cpu); in cpu_thread_is_idle()
105 CPUState *cpu; in all_cpu_threads_idle() local
107 CPU_FOREACH(cpu) { in all_cpu_threads_idle()
108 if (!cpu_thread_is_idle(cpu)) { in all_cpu_threads_idle()
119 CPUState *cpu; in hw_error() local
125 CPU_FOREACH(cpu) { in hw_error()
126 fprintf(stderr, "CPU #%d:\n", cpu->cpu_index); in hw_error()
127 cpu_dump_state(cpu, stderr, CPU_DUMP_FPU); in hw_error()
135 CPUState *cpu; in cpu_synchronize_all_states() local
137 CPU_FOREACH(cpu) { in cpu_synchronize_all_states()
138 cpu_synchronize_state(cpu); in cpu_synchronize_all_states()
144 CPUState *cpu; in cpu_synchronize_all_post_reset() local
146 CPU_FOREACH(cpu) { in cpu_synchronize_all_post_reset()
147 cpu_synchronize_post_reset(cpu); in cpu_synchronize_all_post_reset()
153 CPUState *cpu; in cpu_synchronize_all_post_init() local
155 CPU_FOREACH(cpu) { in cpu_synchronize_all_post_init()
156 cpu_synchronize_post_init(cpu); in cpu_synchronize_all_post_init()
162 CPUState *cpu; in cpu_synchronize_all_pre_loadvm() local
164 CPU_FOREACH(cpu) { in cpu_synchronize_all_pre_loadvm()
165 cpu_synchronize_pre_loadvm(cpu); in cpu_synchronize_all_pre_loadvm()
169 void cpu_synchronize_state(CPUState *cpu) in cpu_synchronize_state() argument
172 cpus_accel->synchronize_state(cpu); in cpu_synchronize_state()
176 void cpu_synchronize_post_reset(CPUState *cpu) in cpu_synchronize_post_reset() argument
179 cpus_accel->synchronize_post_reset(cpu); in cpu_synchronize_post_reset()
183 void cpu_synchronize_post_init(CPUState *cpu) in cpu_synchronize_post_init() argument
186 cpus_accel->synchronize_post_init(cpu); in cpu_synchronize_post_init()
190 void cpu_synchronize_pre_loadvm(CPUState *cpu) in cpu_synchronize_pre_loadvm() argument
193 cpus_accel->synchronize_pre_loadvm(cpu); in cpu_synchronize_pre_loadvm()
205 void cpu_exec_reset_hold(CPUState *cpu) in cpu_exec_reset_hold() argument
208 cpus_accel->cpu_reset_hold(cpu); in cpu_exec_reset_hold()
245 * icount is active, cpus_get_elapsed_ticks() uses units of the host CPU cycle
256 static void generic_handle_interrupt(CPUState *cpu, int mask) in generic_handle_interrupt() argument
258 cpu->interrupt_request |= mask; in generic_handle_interrupt()
260 if (!qemu_cpu_is_self(cpu)) { in generic_handle_interrupt()
261 qemu_cpu_kick(cpu); in generic_handle_interrupt()
265 void cpu_interrupt(CPUState *cpu, int mask) in cpu_interrupt() argument
268 cpus_accel->handle_interrupt(cpu, mask); in cpu_interrupt()
270 generic_handle_interrupt(cpu, mask); in cpu_interrupt()
322 bool cpu_can_run(CPUState *cpu) in cpu_can_run() argument
324 if (cpu->stop) { in cpu_can_run()
327 if (cpu_is_stopped(cpu)) { in cpu_can_run()
333 void cpu_handle_guest_debug(CPUState *cpu) in cpu_handle_guest_debug() argument
336 if (!cpu->singlestep_enabled) { in cpu_handle_guest_debug()
342 cpu_single_step(cpu, SSTEP_ENABLE); in cpu_handle_guest_debug()
344 cpu_single_step(cpu, 0); in cpu_handle_guest_debug()
347 gdb_set_stop_cpu(cpu); in cpu_handle_guest_debug()
349 cpu->stopped = true; in cpu_handle_guest_debug()
413 /* cpu creation */
428 void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data) in run_on_cpu() argument
430 do_run_on_cpu(cpu, func, data, &bql); in run_on_cpu()
433 static void qemu_cpu_stop(CPUState *cpu, bool exit) in qemu_cpu_stop() argument
435 g_assert(qemu_cpu_is_self(cpu)); in qemu_cpu_stop()
436 cpu->stop = false; in qemu_cpu_stop()
437 cpu->stopped = true; in qemu_cpu_stop()
439 cpu_exit(cpu); in qemu_cpu_stop()
444 void qemu_wait_io_event_common(CPUState *cpu) in qemu_wait_io_event_common() argument
446 qatomic_set_mb(&cpu->thread_kicked, false); in qemu_wait_io_event_common()
447 if (cpu->stop) { in qemu_wait_io_event_common()
448 qemu_cpu_stop(cpu, false); in qemu_wait_io_event_common()
450 process_queued_cpu_work(cpu); in qemu_wait_io_event_common()
453 void qemu_wait_io_event(CPUState *cpu) in qemu_wait_io_event() argument
457 while (cpu_thread_is_idle(cpu)) { in qemu_wait_io_event()
460 qemu_plugin_vcpu_idle_cb(cpu); in qemu_wait_io_event()
462 qemu_cond_wait(cpu->halt_cond, &bql); in qemu_wait_io_event()
465 qemu_plugin_vcpu_resume_cb(cpu); in qemu_wait_io_event()
468 qemu_wait_io_event_common(cpu); in qemu_wait_io_event()
471 void cpus_kick_thread(CPUState *cpu) in cpus_kick_thread() argument
473 if (cpu->thread_kicked) { in cpus_kick_thread()
476 cpu->thread_kicked = true; in cpus_kick_thread()
479 int err = pthread_kill(cpu->thread->thread, SIG_IPI); in cpus_kick_thread()
485 qemu_sem_post(&cpu->sem); in cpus_kick_thread()
489 void qemu_cpu_kick(CPUState *cpu) in qemu_cpu_kick() argument
491 qemu_cond_broadcast(cpu->halt_cond); in qemu_cpu_kick()
493 cpus_accel->kick_vcpu_thread(cpu); in qemu_cpu_kick()
495 cpus_kick_thread(cpu); in qemu_cpu_kick()
505 bool qemu_cpu_is_self(CPUState *cpu) in qemu_cpu_is_self() argument
507 return qemu_thread_is_self(cpu->thread); in qemu_cpu_is_self()
557 /* signal CPU creation */
558 void cpu_thread_signal_created(CPUState *cpu) in cpu_thread_signal_created() argument
560 cpu->created = true; in cpu_thread_signal_created()
564 /* signal CPU destruction */
565 void cpu_thread_signal_destroyed(CPUState *cpu) in cpu_thread_signal_destroyed() argument
567 cpu->created = false; in cpu_thread_signal_destroyed()
571 void cpu_pause(CPUState *cpu) in cpu_pause() argument
573 if (qemu_cpu_is_self(cpu)) { in cpu_pause()
574 qemu_cpu_stop(cpu, true); in cpu_pause()
576 cpu->stop = true; in cpu_pause()
577 qemu_cpu_kick(cpu); in cpu_pause()
581 void cpu_resume(CPUState *cpu) in cpu_resume() argument
583 cpu->stop = false; in cpu_resume()
584 cpu->stopped = false; in cpu_resume()
585 qemu_cpu_kick(cpu); in cpu_resume()
590 CPUState *cpu; in all_vcpus_paused() local
592 CPU_FOREACH(cpu) { in all_vcpus_paused()
593 if (!cpu->stopped) { in all_vcpus_paused()
603 CPUState *cpu; in pause_all_vcpus() local
606 CPU_FOREACH(cpu) { in pause_all_vcpus()
607 cpu_pause(cpu); in pause_all_vcpus()
617 CPU_FOREACH(cpu) { in pause_all_vcpus()
618 qemu_cpu_kick(cpu); in pause_all_vcpus()
629 CPUState *cpu; in resume_all_vcpus() local
636 CPU_FOREACH(cpu) { in resume_all_vcpus()
637 cpu_resume(cpu); in resume_all_vcpus()
641 void cpu_remove_sync(CPUState *cpu) in cpu_remove_sync() argument
643 cpu->stop = true; in cpu_remove_sync()
644 cpu->unplug = true; in cpu_remove_sync()
645 qemu_cpu_kick(cpu); in cpu_remove_sync()
647 qemu_thread_join(cpu->thread); in cpu_remove_sync()
665 void qemu_init_vcpu(CPUState *cpu) in qemu_init_vcpu() argument
669 cpu->nr_cores = machine_topo_get_cores_per_socket(ms); in qemu_init_vcpu()
670 cpu->nr_threads = ms->smp.threads; in qemu_init_vcpu()
671 cpu->stopped = true; in qemu_init_vcpu()
672 cpu->random_seed = qemu_guest_random_seed_thread_part1(); in qemu_init_vcpu()
674 if (!cpu->as) { in qemu_init_vcpu()
675 /* If the target cpu hasn't set up any address spaces itself, in qemu_init_vcpu()
678 cpu->num_ases = 1; in qemu_init_vcpu()
679 cpu_address_space_init(cpu, 0, "cpu-memory", cpu->memory); in qemu_init_vcpu()
684 cpus_accel->create_vcpu_thread(cpu); in qemu_init_vcpu()
686 while (!cpu->created) { in qemu_init_vcpu()
800 CPUState *cpu; in qmp_memsave() local
808 cpu = qemu_get_cpu(cpu_index); in qmp_memsave()
809 if (cpu == NULL) { in qmp_memsave()
810 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index", in qmp_memsave()
811 "a CPU number"); in qmp_memsave()
825 if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) { in qmp_memsave()