From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=49608 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PrRNR-0004m4-FP for qemu-devel@nongnu.org; Mon, 21 Feb 2011 03:44:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PrRNP-0000Rr-BH for qemu-devel@nongnu.org; Mon, 21 Feb 2011 03:44:17 -0500 Received: from mail-wy0-f173.google.com ([74.125.82.173]:61006) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PrRNP-0000I2-6w for qemu-devel@nongnu.org; Mon, 21 Feb 2011 03:44:15 -0500 Received: by mail-wy0-f173.google.com with SMTP id 29so1150726wyb.4 for ; Mon, 21 Feb 2011 00:44:14 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 21 Feb 2011 09:43:38 +0100 Message-Id: <1298277820-8817-20-git-send-email-pbonzini@redhat.com> In-Reply-To: <1298277820-8817-1-git-send-email-pbonzini@redhat.com> References: <1298277820-8817-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 19/21] provide dummy signal init functions for win32 List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Signed-off-by: Paolo Bonzini --- cpus.c | 143 ++++++++++++++++++++++++++++++++------------------------------- 1 files changed, 73 insertions(+), 70 deletions(-) diff --git a/cpus.c b/cpus.c index 5bb95d8..c2c139c 100644 --- a/cpus.c +++ b/cpus.c @@ -196,6 +196,16 @@ static void cpu_handle_debug_exception(CPUState *env) #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 static void sigbus_reraise(void) { @@ -390,6 +400,61 @@ static int qemu_signalfd_init(void) 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) { struct timespec ts = { 0, 0 }; @@ -470,39 +535,17 @@ static int qemu_signalfd_init(void) return 0; } -#endif /* _WIN32 */ - -#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); + abort(); +} - 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 +static void qemu_tcg_init_cpu_signals(void) +{ } +#endif /* _WIN32 */ +#ifndef CONFIG_IOTHREAD int qemu_init_main_loop(void) { int ret; @@ -536,6 +579,8 @@ void qemu_init_vcpu(void *_env) exit(1); } 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_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 ret; -- 1.7.3.5