From owner-cvs-src@FreeBSD.ORG Thu Mar 3 05:16:52 2005 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B95CC16A4CE; Thu, 3 Mar 2005 05:16:52 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3A5B343D1D; Thu, 3 Mar 2005 05:16:52 +0000 (GMT) (envelope-from davidxu@freebsd.org) Received: from [127.0.0.1] (davidxu@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.1/8.13.1) with ESMTP id j235GnLp086535; Thu, 3 Mar 2005 05:16:50 GMT (envelope-from davidxu@freebsd.org) Message-ID: <42269DB0.6070107@freebsd.org> Date: Thu, 03 Mar 2005 13:16:32 +0800 From: David Xu User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.3) Gecko/20040910 X-Accept-Language: en-us, en MIME-Version: 1.0 To: David Schultz References: <200503021343.j22DhpQ3075008@repoman.freebsd.org> <200503020915.28512.jhb@FreeBSD.org> <4226446B.7020406@freebsd.org> <20050303033115.GA13174@VARK.MIT.EDU> In-Reply-To: <20050303033115.GA13174@VARK.MIT.EDU> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit cc: cvs-src@freebsd.org cc: src-committers@freebsd.org cc: cvs-all@freebsd.org cc: John Baldwin Subject: Re: cvs commit: src/sys/kern kern_sig.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Mar 2005 05:16:52 -0000 David Schultz wrote: >On Thu, Mar 03, 2005, David Xu wrote: > > >>John Baldwin wrote: >> >> >> >>>On Wednesday 02 March 2005 08:43 am, David Xu wrote: >>> >>> >>> >>> >>>>davidxu 2005-03-02 13:43:51 UTC >>>> >>>>FreeBSD src repository >>>> >>>>Modified files: >>>> sys/kern kern_sig.c >>>>Log: >>>>In kern_sigtimedwait, remove waitset bits for td_sigmask before >>>>sleeping, so in do_tdsignal, we no longer need to test td_waitset. >>>>now td_waitset is only used to give a thread higher priority when >>>>delivering signal to multithreads process. >>>>This also fixes a bug: >>>>when a thread in sigwait states was suspended and later resumed >>>>by SIGCONT, it can no longer receive signals belong to waitset. >>>> >>>> >>>> >>>> >>>Is this related at all to Peter Holm's panic where sigwait() + swapping >>>invokes a panic? >>> >>> >>> >>> >>> >>No. Peter Holm's found is a swapping problem. vm swaps out sleeping >>thread's stack under memory stressing case. but I think that's not safe, >>that means, following code can not be used in kernel: >> >>int *p; >> >>func() >>{ >> int n; >> >> n = 0; >> p = &n; >> msleep(p); >> /* check variable n ... >>} >> >>func2() >>{ >> *p = 2; >> wakeup(p); >>} >> >>unless million lines of kernel code are reviewed, I don't think the >>vm code is safe. The following patch should avoid the problem: >> >> >[...] > >KSE already mostly broke swapping, so I'm not sure we need to >break it some more. I think a better fix would be to mark threads >as unswappable in msleep() and cv_wait(). There would probably >need to be a separate msleep_swapok() for places where swapping >the process out is okay. (IIRC, Solaris has something like this, >but they use it because their cv_wait() works with locks held, and >so the swapok variant is for situations where no locks are held.) > > > This only partly resolves the problem, if function A call B, B call C, C is unknown to A, and C does a msleep(), problem still lhappens. However, if there needs a flag, I would like PNOSWAP for msleep just like PCATCH does. >The alternative, of course, is to just fix the code that assumes >that swapping doesn't exist. > > > First find all code written in such way, but it is not that easy. David Xu