From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:57435) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qmikm-00053c-9n for qemu-devel@nongnu.org; Fri, 29 Jul 2011 04:49:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qmikk-0001pp-W0 for qemu-devel@nongnu.org; Fri, 29 Jul 2011 04:49:08 -0400 Received: from david.siemens.de ([192.35.17.14]:27000) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qmikk-0001pi-Lj for qemu-devel@nongnu.org; Fri, 29 Jul 2011 04:49:06 -0400 Message-ID: <4E3273FD.1020007@siemens.com> Date: Fri, 29 Jul 2011 10:49:01 +0200 From: Jan Kiszka MIME-Version: 1.0 References: In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] Odd code in cpus.c List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Frediano Ziglio Cc: Paolo Bonzini , qemu-devel On 2011-07-29 10:34, Frediano Ziglio wrote: > I don't know that much this code however qemu_kvm_init_cpu_signals > seems a bit strange and duplicate to me, in cpus.c > > > 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); > } > } > > > if CONFIG_IOTHREAD is set you get > > > 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); > } > 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); > } > } > > > which seems to set kvm signal twice with same values (taking into > account that in kvm_set_signal_mask the set is copied before the call > to kvm_vcpu_ioctl). Indeed. Harmless fortunately. I suspect the duplicate bits in the #ifdef CONFIG_IOTHREAD block were simply forgotten. Paolo? Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux