From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: [Qemu-devel] Re: [PATCH 08/10] MCE: Relay UCR MCE to guest Date: Wed, 20 Oct 2010 19:28:47 -0200 Message-ID: <20101020212847.GA11588@amt.cnet> References: <10ae5833ff9de153c311917d532f3e84e5b00387.1287596626.git.mtosatti@redhat.com> <4CBF485C.9060808@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, Avi Kivity To: Anthony Liguori Return-path: Received: from mx1.redhat.com ([209.132.183.28]:41724 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752614Ab0JTVkG (ORCPT ); Wed, 20 Oct 2010 17:40:06 -0400 Content-Disposition: inline In-Reply-To: <4CBF485C.9060808@linux.vnet.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: On Wed, Oct 20, 2010 at 02:51:56PM -0500, Anthony Liguori wrote: > >+ e = errno; > >+ > >+ qemu_mutex_lock(&qemu_global_mutex); > >+ > >+ if (r == -1&& !(e == EAGAIN || e == EINTR)) { > >+ fprintf(stderr, "sigtimedwait: %s\n", strerror(e)); > >+ exit(1); > >+ } > >+ > >+ switch (r) { > >+ case SIGBUS: > >+#ifdef TARGET_I386 > >+ if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr)) > >+#endif > >+ sigbus_reraise(); > >+ break; > >+ default: > >+ break; > >+ } > >+ > >+ r = sigpending(&chkset); > >+ if (r == -1) { > >+ fprintf(stderr, "sigpending: %s\n", strerror(e)); > >+ exit(1); > >+ } > >+ } while (sigismember(&chkset, SIG_IPI) || sigismember(&chkset, SIGBUS)); > > } > > I don't understand why this loop is needed but we specifically wait > for a signal to get delivered that's either SIG_IPI or SIGBUS. We > then check whether a SIG_IPI or SIGBUS is pending and loop waiting > for signals again. > > Shouldn't we be looping on just sigismember(SIGBUS)? Think of SIG_IPI and SIGBUS pending. SIGBUS must be processed immediately. Yes, sigismember(SIGBUS) would be fine. But the current code too. > BTW, we're no longer respecting timeout because we're not adjusting > ts after each iteration. Right, timeout not used at the moment.