} } } if (g_main_context_check(context, max_priority, poll_fds, n_poll_fds)) { g_main_context_dispatch(context); } g_main_context_release(context); return select_ret || g_poll_ret; } #endif static NotifierList main_loop_poll_notifiers = NOTIFIER_LIST_INITIALIZER(main_loop_poll_notifiers); void main_loop_poll_add_notifier(Notifier *notify) { notifier_list_add(&main_loop_poll_notifiers, notify); } void main_loop_poll_remove_notifier(Notifier *notify) { notifier_remove(notify); } void main_loop_wait(int nonblocking) { MainLoopPoll mlpoll = { .state = MAIN_LOOP_POLL_FILL,
#ifdef DEBUG_MIGRATION #define DPRINTF(fmt, ...) \ do { printf("migration: " fmt, ## __VA_ARGS__); } while (0) #else #define DPRINTF(fmt, ...) \ do { } while (0) #endif /* Migration speed throttling */ static int64_t max_throttle = (32 << 20); static MigrationState *current_migration; static NotifierList migration_state_notifiers = NOTIFIER_LIST_INITIALIZER(migration_state_notifiers); int qemu_start_incoming_migration(const char *uri) { const char *p; int ret; if (strstart(uri, "tcp:", &p)) ret = tcp_start_incoming_migration(p); #if !defined(WIN32) else if (strstart(uri, "exec:", &p)) ret = exec_start_incoming_migration(p); else if (strstart(uri, "unix:", &p)) ret = unix_start_incoming_migration(p); else if (strstart(uri, "fd:", &p)) ret = fd_start_incoming_migration(p);
{ CPUClass *cc = CPU_GET_CLASS(cpu); return cc->get_memory_mapping(cpu, list, errp); } static void cpu_common_get_memory_mapping(CPUState *cpu, MemoryMappingList *list, Error **errp) { error_setg(errp, "Obtaining memory mappings is unsupported on this CPU."); } /* CPU hot-plug notifiers */ static NotifierList cpu_added_notifiers = NOTIFIER_LIST_INITIALIZER(cpu_add_notifiers); void qemu_register_cpu_added_notifier(Notifier *notifier) { notifier_list_add(&cpu_added_notifiers, notifier); } void cpu_reset_interrupt(CPUState *cpu, int mask) { cpu->interrupt_request &= ~mask; } void cpu_exit(CPUState *cpu) { cpu->exit_request = 1; cpu->tcg_exit_req = 1;