From owner-cvs-all@FreeBSD.ORG Wed Mar 2 22:55:41 2005 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9682616A4CE; Wed, 2 Mar 2005 22:55:41 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 75A5643D31; Wed, 2 Mar 2005 22:55:41 +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 j22MtdFS034152; Wed, 2 Mar 2005 22:55:40 GMT (envelope-from davidxu@freebsd.org) Message-ID: <4226446B.7020406@freebsd.org> Date: Thu, 03 Mar 2005 06:55:39 +0800 From: David Xu User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.7.2) Gecko/20041004 X-Accept-Language: en-us, en MIME-Version: 1.0 To: John Baldwin References: <200503021343.j22DhpQ3075008@repoman.freebsd.org> <200503020915.28512.jhb@FreeBSD.org> In-Reply-To: <200503020915.28512.jhb@FreeBSD.org> 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 Subject: Re: cvs commit: src/sys/kern kern_sig.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Mar 2005 22:55:41 -0000 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: Index: vm_glue.c =================================================================== RCS file: /home/ncvs/src/sys/vm/vm_glue.c,v retrieving revision 1.210 diff -u -r1.210 vm_glue.c --- vm_glue.c 22 Jan 2005 19:21:29 -0000 1.210 +++ vm_glue.c 2 Mar 2005 11:22:32 -0000 @@ -334,6 +334,7 @@ void vm_thread_swapout(struct thread *td) { +#if 0 vm_object_t ksobj; vm_page_t m; int i, pages; @@ -353,6 +354,7 @@ vm_page_unlock_queues(); } VM_OBJECT_UNLOCK(ksobj); +#endif } /* --- David Xu