From patchwork Mon Feb 21 08:43:38 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 83798 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id EAB75B716B for ; Mon, 21 Feb 2011 20:23:05 +1100 (EST) Received: from localhost ([127.0.0.1]:50729 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PrRyj-0001Gx-FB for incoming@patchwork.ozlabs.org; Mon, 21 Feb 2011 04:22:49 -0500 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:sender:from:to:subject:date:message-id:x-mailer :in-reply-to:references; bh=X6dHGSwtChaA+EvQkhvJalh+dqAobxIGshC2BIaEKFE=; b=GXK4hfzJDvIHzdod03ZCofFHp4Aq5BsgNvoTZKPCQx1Khpvf8Kj7oHc0/y73Zen8dF XT14TrRwjKSAmks3DBFnZZXIPbPtZtplEgeIjmGnukvJcv+/lUeY2BLtcde2FYwk+fLB ixiH7a5RdxSbk4Nir5IuToeAp6kep7mIiA5EI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:subject:date:message-id:x-mailer:in-reply-to :references; b=tsbOBU4NV44TMPWztGK//PRj0fx9LeBKT9+b/5vGBTKMZVtvjQEO0FPZDtXUmKPS32 94lyUoQePr5kAwrVnFJGrgxUto6bpDm8957XsWwhsS7o8GTtZQQ2NhVZ3EhA0NThDcZn pTUqZrbXKlznij/F2VMttS/ik5rLBK5Pnm3Jw= Received: by 10.216.167.65 with SMTP id h43mr1898491wel.17.1298277854732; Mon, 21 Feb 2011 00:44:14 -0800 (PST) Received: from localhost.localdomain (93-34-149-100.ip50.fastwebnet.it [93.34.149.100]) by mx.google.com with ESMTPS id t5sm1945464wes.9.2011.02.21.00.44.13 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 21 Feb 2011 00:44:14 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Mon, 21 Feb 2011 09:43:38 +0100 Message-Id: <1298277820-8817-20-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.7.3.5 In-Reply-To: <1298277820-8817-1-git-send-email-pbonzini@redhat.com> References: <1298277820-8817-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 74.125.82.173 Subject: [Qemu-devel] [PATCH 19/21] provide dummy signal init functions for win32 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@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;