simplify main loop functions
Provide a clean example of how to use the main loop in the tools. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									be08e65e01
								
							
						
					
					
						commit
						99435906cc
					
				
							
								
								
									
										5
									
								
								cpus.c
								
								
								
								
							
							
						
						
									
										5
									
								
								cpus.c
								
								
								
								
							| 
						 | 
					@ -626,11 +626,6 @@ void qemu_init_cpu_loop(void)
 | 
				
			||||||
    qemu_thread_get_self(&io_thread);
 | 
					    qemu_thread_get_self(&io_thread);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void qemu_main_loop_start(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    resume_all_vcpus();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void run_on_cpu(CPUState *env, void (*func)(void *data), void *data)
 | 
					void run_on_cpu(CPUState *env, void (*func)(void *data), void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    struct qemu_work_item wi;
 | 
					    struct qemu_work_item wi;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								cpus.h
								
								
								
								
							
							
						
						
									
										1
									
								
								cpus.h
								
								
								
								
							| 
						 | 
					@ -3,7 +3,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* cpus.c */
 | 
					/* cpus.c */
 | 
				
			||||||
void qemu_init_cpu_loop(void);
 | 
					void qemu_init_cpu_loop(void);
 | 
				
			||||||
void qemu_main_loop_start(void);
 | 
					 | 
				
			||||||
void resume_all_vcpus(void);
 | 
					void resume_all_vcpus(void);
 | 
				
			||||||
void pause_all_vcpus(void);
 | 
					void pause_all_vcpus(void);
 | 
				
			||||||
void cpu_stop_current(void);
 | 
					void cpu_stop_current(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										49
									
								
								vl.c
								
								
								
								
							
							
						
						
									
										49
									
								
								vl.c
								
								
								
								
							| 
						 | 
					@ -1428,27 +1428,9 @@ void qemu_system_vmstop_request(RunState state)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qemu_irq qemu_system_powerdown;
 | 
					qemu_irq qemu_system_powerdown;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void main_loop(void)
 | 
					static bool main_loop_should_exit(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    bool nonblocking;
 | 
					 | 
				
			||||||
    int last_io __attribute__ ((unused)) = 0;
 | 
					 | 
				
			||||||
#ifdef CONFIG_PROFILER
 | 
					 | 
				
			||||||
    int64_t ti;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    RunState r;
 | 
					    RunState r;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    qemu_main_loop_start();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (;;) {
 | 
					 | 
				
			||||||
        nonblocking = !kvm_enabled() && last_io > 0;
 | 
					 | 
				
			||||||
#ifdef CONFIG_PROFILER
 | 
					 | 
				
			||||||
        ti = profile_getclock();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
        last_io = main_loop_wait(nonblocking);
 | 
					 | 
				
			||||||
#ifdef CONFIG_PROFILER
 | 
					 | 
				
			||||||
        dev_time += profile_getclock() - ti;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (qemu_debug_requested()) {
 | 
					    if (qemu_debug_requested()) {
 | 
				
			||||||
        vm_stop(RUN_STATE_DEBUG);
 | 
					        vm_stop(RUN_STATE_DEBUG);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -1457,8 +1439,9 @@ static void main_loop(void)
 | 
				
			||||||
        monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
 | 
					        monitor_protocol_event(QEVENT_SHUTDOWN, NULL);
 | 
				
			||||||
        if (no_shutdown) {
 | 
					        if (no_shutdown) {
 | 
				
			||||||
            vm_stop(RUN_STATE_SHUTDOWN);
 | 
					            vm_stop(RUN_STATE_SHUTDOWN);
 | 
				
			||||||
            } else
 | 
					        } else {
 | 
				
			||||||
                break;
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (qemu_reset_requested()) {
 | 
					    if (qemu_reset_requested()) {
 | 
				
			||||||
        pause_all_vcpus();
 | 
					        pause_all_vcpus();
 | 
				
			||||||
| 
						 | 
					@ -1477,9 +1460,26 @@ static void main_loop(void)
 | 
				
			||||||
    if (qemu_vmstop_requested(&r)) {
 | 
					    if (qemu_vmstop_requested(&r)) {
 | 
				
			||||||
        vm_stop(r);
 | 
					        vm_stop(r);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    bdrv_close_all();
 | 
					
 | 
				
			||||||
    pause_all_vcpus();
 | 
					static void main_loop(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    bool nonblocking;
 | 
				
			||||||
 | 
					    int last_io = 0;
 | 
				
			||||||
 | 
					#ifdef CONFIG_PROFILER
 | 
				
			||||||
 | 
					    int64_t ti;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    do {
 | 
				
			||||||
 | 
					        nonblocking = !kvm_enabled() && last_io > 0;
 | 
				
			||||||
 | 
					#ifdef CONFIG_PROFILER
 | 
				
			||||||
 | 
					        ti = profile_getclock();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					        last_io = main_loop_wait(nonblocking);
 | 
				
			||||||
 | 
					#ifdef CONFIG_PROFILER
 | 
				
			||||||
 | 
					        dev_time += profile_getclock() - ti;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    } while (!main_loop_should_exit());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void version(void)
 | 
					static void version(void)
 | 
				
			||||||
| 
						 | 
					@ -3445,7 +3445,10 @@ int main(int argc, char **argv, char **envp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    os_setup_post();
 | 
					    os_setup_post();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resume_all_vcpus();
 | 
				
			||||||
    main_loop();
 | 
					    main_loop();
 | 
				
			||||||
 | 
					    bdrv_close_all();
 | 
				
			||||||
 | 
					    pause_all_vcpus();
 | 
				
			||||||
    net_cleanup();
 | 
					    net_cleanup();
 | 
				
			||||||
    res_free();
 | 
					    res_free();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue