From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=40894 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PtMGU-0002YR-By for qemu-devel@nongnu.org; Sat, 26 Feb 2011 10:41:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PtMGT-0007eU-7S for qemu-devel@nongnu.org; Sat, 26 Feb 2011 10:41:02 -0500 Received: from mail-ww0-f53.google.com ([74.125.82.53]:41779) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PtMGT-0007RV-2o for qemu-devel@nongnu.org; Sat, 26 Feb 2011 10:41:01 -0500 Received: by mail-ww0-f53.google.com with SMTP id 29so366964wwb.10 for ; Sat, 26 Feb 2011 07:41:00 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Sat, 26 Feb 2011 16:40:17 +0100 Message-Id: <1298734819-1960-21-git-send-email-pbonzini@redhat.com> In-Reply-To: <1298734819-1960-1-git-send-email-pbonzini@redhat.com> References: <1298734819-1960-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH v2 upstream 20/22] 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 Cc: jan.kiszka@siemens.com, aurelien@aurel32.net Signed-off-by: Paolo Bonzini --- cpus.c | 143 ++++++++++++++++++++++++++++++++------------------------------- 1 files changed, 73 insertions(+), 70 deletions(-) diff --git a/cpus.c b/cpus.c index 8c440f1..3951111 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.4