From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:51154) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SSAWK-0007KR-A1 for qemu-devel@nongnu.org; Wed, 09 May 2012 13:17:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SSAWB-0001wc-PG for qemu-devel@nongnu.org; Wed, 09 May 2012 13:17:47 -0400 Received: from mail-ob0-f173.google.com ([209.85.214.173]:59495) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SSAWB-0001wR-Js for qemu-devel@nongnu.org; Wed, 09 May 2012 13:17:39 -0400 Received: by obbwd20 with SMTP id wd20so663585obb.4 for ; Wed, 09 May 2012 10:17:38 -0700 (PDT) Message-ID: <4FAAA6AA.2040400@codemonkey.ws> Date: Wed, 09 May 2012 12:17:30 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <4FA97596.4000807@siemens.com> <4FAA42EB.2080407@redhat.com> <4FAA5721.9060201@siemens.com> In-Reply-To: <4FAA5721.9060201@siemens.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] coroutine-ucontext broken for x86-32 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Kevin Wolf , Peter Maydell , Anthony Liguori , Michael Tokarev , qemu-devel On 05/09/2012 06:38 AM, Jan Kiszka wrote: > On 2012-05-09 08:15, Peter Maydell wrote: >> On 9 May 2012 11:11, Kevin Wolf wrote: >>> Am 08.05.2012 21:35, schrieb Jan Kiszka: >>>> I hunted down a fairly subtle corruption of the VCPU thread signal mask >>>> in KVM mode when using the ucontext version of coroutines: >>>> >>>> coroutine_new calls getcontext, makecontext, swapcontext. Those >>>> functions get/set also the signal mask of the caller. Unfortunately, >>>> they only use the sigprocmask syscall on i386, not the rt_sigprocmask >>>> version. So they do not properly save/restore the blocked RT signals, >>>> namely our SIG_IPI - it becomes unblocke this way. >>> >>> If other coroutine backends work (sigaltstack?), we could try to detect >>> the situation in configure and set the right default. Not sure what the >>> condition is, glibc + i386? >> >> I don't think you can do a compile-time test for this short of >> just disabling use of the ucontext code on all i386/Linux platforms. >> >> I think it's becoming increasingly obvious that the setcontext/getcontext >> code path is not very well used and prone to nasty libc bugs. Trying >> to implement coroutines in C is just a really bad idea and I think >> we should be trying to reduce our use of them if we possibly can, >> presumably by switching to actually using threads where we really >> need the parallelism. > > I tend to agree. > > FWIW, sigaltstack works around the issue here, but I'm still looking s > bit skeptical at its implementation. Is there any downside to using SIGUSR1? Regards, Anthony Liguori > > Jan >