Date: Mon, 29 Jul 2002 14:17:28 +0200 From: Mark Santcroos <marks@ripe.net> To: Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> Cc: current@FreeBSD.ORG Subject: Re: A fix of recent bugs in swapping in/out a process Message-ID: <20020729121728.GA537@laptop.6bone.nl> In-Reply-To: <200207281252.g6SCpvSH064272@silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> References: <200207281252.g6SCpvSH064272@silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, Just want to let you know that this patch fixes the 'fault on nofault entry' panics I had. It was very easily reproducable with: --- char *buf; int n=0; buf=(char *)malloc(1); for(;;) buf=(char *)realloc(buf,n++*1024*1024); --- Ran some tests now and as said it didn't happen again. Thanks alot. Mark On Sun, Jul 28, 2002 at 09:51:57PM +0900, Seigo Tanimura wrote: > If you are having a trouble of a broken thread state (eg a thread with > TDS_RUNQ on no run queue) or a mysterious page fault on a kernel > memory (probably in mi_switch()), you may want to try my patch at: > > http://people.FreeBSD.org/~tanimura/patches/procswap.diff.gz > > In a nutshell, this patch fixes three bugs: > > > 1. a thread with TDS_RUNQ on no run queue. > > This is due to wakeup() and wakeup_one() setting the state to a thread > to TDS_RUNQ even if the thread has been swapped out. As a thread > being or having been swapped out cannot be scheduled immediately, > introduce a new thread state TDS_SWAPPED to note that. > > > 2. a possible race condition for multiple threads to swap in a single > process. > > Since faultin() may block (and likely to do so) without leaving any > flags for a process being swapped in, more than one threads can call > faultin() for the same process. Avoid this by adding a new process > state flag PS_SWAPPINGIN to a process being swapped in. > > > 3. a running thread being swapped out. > > Swapout_procs() and swapout() do not check the states of the threads > in a process about to be swapped out. This causes the pcb and the > kernel stack of a running thread being unmapped, resulting in a > page fault in cpu_switch(). Do not swap out a process unless all of > its threads are either in a run queue or sleeping. > > Eventually, it may become our option to swap out only threads that are > safe to do so. > > -- > Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> <tanimura@FreeBSD.org> > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-current" in the body of the message -- Mark Santcroos RIPE Network Coordination Centre http://www.ripe.net/home/mark/ New Projects Group/TTM To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020729121728.GA537>