provide dummy signal init functions for win32
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									712ae48084
								
							
						
					
					
						commit
						714bd04090
					
				
							
								
								
									
										147
									
								
								cpus.c
								
								
								
								
							
							
						
						
									
										147
									
								
								cpus.c
								
								
								
								
							| 
						 | 
					@ -196,6 +196,16 @@ static void cpu_handle_debug_exception(CPUState *env)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_IOTHREAD
 | 
				
			||||||
 | 
					static void cpu_signal(int sig)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (cpu_single_env) {
 | 
				
			||||||
 | 
					        cpu_exit(cpu_single_env);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    exit_request = 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_LINUX
 | 
					#ifdef CONFIG_LINUX
 | 
				
			||||||
static void sigbus_reraise(void)
 | 
					static void sigbus_reraise(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -390,6 +400,61 @@ static int qemu_signal_init(void)
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void qemu_kvm_init_cpu_signals(CPUState *env)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int r;
 | 
				
			||||||
 | 
					    sigset_t set;
 | 
				
			||||||
 | 
					    struct sigaction sigact;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    memset(&sigact, 0, sizeof(sigact));
 | 
				
			||||||
 | 
					    sigact.sa_handler = dummy_signal;
 | 
				
			||||||
 | 
					    sigaction(SIG_IPI, &sigact, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_IOTHREAD
 | 
				
			||||||
 | 
					    pthread_sigmask(SIG_BLOCK, NULL, &set);
 | 
				
			||||||
 | 
					    sigdelset(&set, SIG_IPI);
 | 
				
			||||||
 | 
					    sigdelset(&set, SIGBUS);
 | 
				
			||||||
 | 
					    r = kvm_set_signal_mask(env, &set);
 | 
				
			||||||
 | 
					    if (r) {
 | 
				
			||||||
 | 
					        fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
 | 
				
			||||||
 | 
					        exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    sigemptyset(&set);
 | 
				
			||||||
 | 
					    sigaddset(&set, SIG_IPI);
 | 
				
			||||||
 | 
					    sigaddset(&set, SIGIO);
 | 
				
			||||||
 | 
					    sigaddset(&set, SIGALRM);
 | 
				
			||||||
 | 
					    pthread_sigmask(SIG_BLOCK, &set, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pthread_sigmask(SIG_BLOCK, NULL, &set);
 | 
				
			||||||
 | 
					    sigdelset(&set, SIGIO);
 | 
				
			||||||
 | 
					    sigdelset(&set, SIGALRM);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    sigdelset(&set, SIG_IPI);
 | 
				
			||||||
 | 
					    sigdelset(&set, SIGBUS);
 | 
				
			||||||
 | 
					    r = kvm_set_signal_mask(env, &set);
 | 
				
			||||||
 | 
					    if (r) {
 | 
				
			||||||
 | 
					        fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
 | 
				
			||||||
 | 
					        exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void qemu_tcg_init_cpu_signals(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef CONFIG_IOTHREAD
 | 
				
			||||||
 | 
					    sigset_t set;
 | 
				
			||||||
 | 
					    struct sigaction sigact;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    memset(&sigact, 0, sizeof(sigact));
 | 
				
			||||||
 | 
					    sigact.sa_handler = cpu_signal;
 | 
				
			||||||
 | 
					    sigaction(SIG_IPI, &sigact, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sigemptyset(&set);
 | 
				
			||||||
 | 
					    sigaddset(&set, SIG_IPI);
 | 
				
			||||||
 | 
					    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void qemu_kvm_eat_signals(CPUState *env)
 | 
					static void qemu_kvm_eat_signals(CPUState *env)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    struct timespec ts = { 0, 0 };
 | 
					    struct timespec ts = { 0, 0 };
 | 
				
			||||||
| 
						 | 
					@ -470,39 +535,17 @@ static int qemu_signal_init(void)
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void qemu_kvm_init_cpu_signals(CPUState *env)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    abort();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void qemu_tcg_init_cpu_signals(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
#endif /* _WIN32 */
 | 
					#endif /* _WIN32 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_IOTHREAD
 | 
					#ifndef CONFIG_IOTHREAD
 | 
				
			||||||
static void qemu_kvm_init_cpu_signals(CPUState *env)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					 | 
				
			||||||
    int r;
 | 
					 | 
				
			||||||
    sigset_t set;
 | 
					 | 
				
			||||||
    struct sigaction sigact;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    memset(&sigact, 0, sizeof(sigact));
 | 
					 | 
				
			||||||
    sigact.sa_handler = dummy_signal;
 | 
					 | 
				
			||||||
    sigaction(SIG_IPI, &sigact, NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    sigemptyset(&set);
 | 
					 | 
				
			||||||
    sigaddset(&set, SIG_IPI);
 | 
					 | 
				
			||||||
    sigaddset(&set, SIGIO);
 | 
					 | 
				
			||||||
    sigaddset(&set, SIGALRM);
 | 
					 | 
				
			||||||
    pthread_sigmask(SIG_BLOCK, &set, NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pthread_sigmask(SIG_BLOCK, NULL, &set);
 | 
					 | 
				
			||||||
    sigdelset(&set, SIG_IPI);
 | 
					 | 
				
			||||||
    sigdelset(&set, SIGBUS);
 | 
					 | 
				
			||||||
    sigdelset(&set, SIGIO);
 | 
					 | 
				
			||||||
    sigdelset(&set, SIGALRM);
 | 
					 | 
				
			||||||
    r = kvm_set_signal_mask(env, &set);
 | 
					 | 
				
			||||||
    if (r) {
 | 
					 | 
				
			||||||
        fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
 | 
					 | 
				
			||||||
        exit(1);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu_init_main_loop(void)
 | 
					int qemu_init_main_loop(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int ret;
 | 
					    int ret;
 | 
				
			||||||
| 
						 | 
					@ -536,6 +579,8 @@ void qemu_init_vcpu(void *_env)
 | 
				
			||||||
            exit(1);
 | 
					            exit(1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        qemu_kvm_init_cpu_signals(env);
 | 
					        qemu_kvm_init_cpu_signals(env);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        qemu_tcg_init_cpu_signals();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -616,48 +661,6 @@ static QemuCond qemu_system_cond;
 | 
				
			||||||
static QemuCond qemu_pause_cond;
 | 
					static QemuCond qemu_pause_cond;
 | 
				
			||||||
static QemuCond qemu_work_cond;
 | 
					static QemuCond qemu_work_cond;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void cpu_signal(int sig)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (cpu_single_env) {
 | 
					 | 
				
			||||||
        cpu_exit(cpu_single_env);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    exit_request = 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void qemu_kvm_init_cpu_signals(CPUState *env)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    int r;
 | 
					 | 
				
			||||||
    sigset_t set;
 | 
					 | 
				
			||||||
    struct sigaction sigact;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    memset(&sigact, 0, sizeof(sigact));
 | 
					 | 
				
			||||||
    sigact.sa_handler = dummy_signal;
 | 
					 | 
				
			||||||
    sigaction(SIG_IPI, &sigact, NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pthread_sigmask(SIG_BLOCK, NULL, &set);
 | 
					 | 
				
			||||||
    sigdelset(&set, SIG_IPI);
 | 
					 | 
				
			||||||
    sigdelset(&set, SIGBUS);
 | 
					 | 
				
			||||||
    r = kvm_set_signal_mask(env, &set);
 | 
					 | 
				
			||||||
    if (r) {
 | 
					 | 
				
			||||||
        fprintf(stderr, "kvm_set_signal_mask: %s\n", strerror(-r));
 | 
					 | 
				
			||||||
        exit(1);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void qemu_tcg_init_cpu_signals(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    sigset_t set;
 | 
					 | 
				
			||||||
    struct sigaction sigact;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    memset(&sigact, 0, sizeof(sigact));
 | 
					 | 
				
			||||||
    sigact.sa_handler = cpu_signal;
 | 
					 | 
				
			||||||
    sigaction(SIG_IPI, &sigact, NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    sigemptyset(&set);
 | 
					 | 
				
			||||||
    sigaddset(&set, SIG_IPI);
 | 
					 | 
				
			||||||
    pthread_sigmask(SIG_UNBLOCK, &set, NULL);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu_init_main_loop(void)
 | 
					int qemu_init_main_loop(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int ret;
 | 
					    int ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue