From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: [PATCH 05/18] kvm: Set up signal mask also for !CONFIG_IOTHREAD Date: Mon, 10 Jan 2011 09:31:58 +0100 Message-ID: References: Cc: kvm@vger.kernel.org, qemu-devel@nongnu.org To: Avi Kivity , Marcelo Tosatti Return-path: Received: from fmmailgate03.web.de ([217.72.192.234]:40771 "EHLO fmmailgate03.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751849Ab1AJIdD (ORCPT ); Mon, 10 Jan 2011 03:33:03 -0500 In-Reply-To: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org List-ID: From: Jan Kiszka Block SIG_IPI and SIGBUS, unblock them during KVM_RUN, just like in io-thread mode. This will be required to process SIGBUS and for self-IPIs. As Windows doesn't support signal services, we need to provide a stub for the init function. Signed-off-by: Jan Kiszka --- cpus.c | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cpus.c b/cpus.c index a21e2d6..bf0fb85 100644 --- a/cpus.c +++ b/cpus.c @@ -223,7 +223,6 @@ fail: return err; } -#ifdef CONFIG_IOTHREAD static void dummy_signal(int sig) { } @@ -238,6 +237,13 @@ static void qemu_kvm_init_cpu_signals(CPUState *env) sigact.sa_handler = dummy_signal; sigaction(SIG_IPI, &sigact, NULL); +#ifndef CONFIG_IOTHREAD + sigemptyset(&set); + sigaddset(&set, SIG_IPI); + sigaddset(&set, SIGBUS); + pthread_sigmask(SIG_BLOCK, &set, NULL); +#endif + pthread_sigmask(SIG_BLOCK, NULL, &set); sigdelset(&set, SIG_IPI); sigdelset(&set, SIGBUS); @@ -247,7 +253,6 @@ static void qemu_kvm_init_cpu_signals(CPUState *env) exit(1); } } -#endif #else /* _WIN32 */ @@ -276,6 +281,10 @@ static void qemu_event_increment(void) exit (1); } } + +static void qemu_kvm_init_cpu_signals(CPUState *env) +{ +} #endif /* _WIN32 */ #ifndef CONFIG_IOTHREAD @@ -296,8 +305,10 @@ void qemu_init_vcpu(void *_env) env->nr_cores = smp_cores; env->nr_threads = smp_threads; - if (kvm_enabled()) + if (kvm_enabled()) { kvm_init_vcpu(env); + qemu_kvm_init_cpu_signals(env); + } return; } -- 1.7.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=52601 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PcDBZ-00042b-0X for qemu-devel@nongnu.org; Mon, 10 Jan 2011 03:33:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PcDBX-0006bp-Mx for qemu-devel@nongnu.org; Mon, 10 Jan 2011 03:33:04 -0500 Received: from fmmailgate03.web.de ([217.72.192.234]:40768) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PcDBX-0006be-B6 for qemu-devel@nongnu.org; Mon, 10 Jan 2011 03:33:03 -0500 From: Jan Kiszka Date: Mon, 10 Jan 2011 09:31:58 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: Sender: jan.kiszka@web.de Subject: [Qemu-devel] [PATCH 05/18] kvm: Set up signal mask also for !CONFIG_IOTHREAD List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity , Marcelo Tosatti Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org From: Jan Kiszka Block SIG_IPI and SIGBUS, unblock them during KVM_RUN, just like in io-thread mode. This will be required to process SIGBUS and for self-IPIs. As Windows doesn't support signal services, we need to provide a stub for the init function. Signed-off-by: Jan Kiszka --- cpus.c | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cpus.c b/cpus.c index a21e2d6..bf0fb85 100644 --- a/cpus.c +++ b/cpus.c @@ -223,7 +223,6 @@ fail: return err; } -#ifdef CONFIG_IOTHREAD static void dummy_signal(int sig) { } @@ -238,6 +237,13 @@ static void qemu_kvm_init_cpu_signals(CPUState *env) sigact.sa_handler = dummy_signal; sigaction(SIG_IPI, &sigact, NULL); +#ifndef CONFIG_IOTHREAD + sigemptyset(&set); + sigaddset(&set, SIG_IPI); + sigaddset(&set, SIGBUS); + pthread_sigmask(SIG_BLOCK, &set, NULL); +#endif + pthread_sigmask(SIG_BLOCK, NULL, &set); sigdelset(&set, SIG_IPI); sigdelset(&set, SIGBUS); @@ -247,7 +253,6 @@ static void qemu_kvm_init_cpu_signals(CPUState *env) exit(1); } } -#endif #else /* _WIN32 */ @@ -276,6 +281,10 @@ static void qemu_event_increment(void) exit (1); } } + +static void qemu_kvm_init_cpu_signals(CPUState *env) +{ +} #endif /* _WIN32 */ #ifndef CONFIG_IOTHREAD @@ -296,8 +305,10 @@ void qemu_init_vcpu(void *_env) env->nr_cores = smp_cores; env->nr_threads = smp_threads; - if (kvm_enabled()) + if (kvm_enabled()) { kvm_init_vcpu(env); + qemu_kvm_init_cpu_signals(env); + } return; } -- 1.7.1