mirror of
https://github.com/qemu/qemu.git
synced 2024-11-24 11:23:43 +08:00
kvm: Set up signal mask also for !CONFIG_IOTHREAD
Block SIG_IPI, unblock it during KVM_RUN, just like in io-thread mode. It's unused so far, but this infrastructure will be required for self-IPIs and to process SIGBUS plus, in KVM mode, SIGIO and SIGALRM. As Windows doesn't support signal services, we need to provide a stub for the init function. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
55f8d6ac3e
commit
ff48eb5fe7
29
cpus.c
29
cpus.c
@ -223,11 +223,9 @@ fail:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IOTHREAD
|
|
||||||
static void dummy_signal(int sig)
|
static void dummy_signal(int sig)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#else /* _WIN32 */
|
#else /* _WIN32 */
|
||||||
|
|
||||||
@ -259,6 +257,32 @@ static void qemu_event_increment(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);
|
||||||
|
pthread_sigmask(SIG_BLOCK, &set, 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);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int qemu_init_main_loop(void)
|
int qemu_init_main_loop(void)
|
||||||
{
|
{
|
||||||
cpu_set_debug_excp_handler(cpu_debug_handler);
|
cpu_set_debug_excp_handler(cpu_debug_handler);
|
||||||
@ -284,6 +308,7 @@ void qemu_init_vcpu(void *_env)
|
|||||||
fprintf(stderr, "kvm_init_vcpu failed: %s\n", strerror(-r));
|
fprintf(stderr, "kvm_init_vcpu failed: %s\n", strerror(-r));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
qemu_kvm_init_cpu_signals(env);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user