Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Jul 2002 11:07:34 -0700 (PDT)
From:      Julian Elischer <julian@elischer.org>
To:        Mark Santcroos <marks@ripe.net>
Cc:        Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>, current@FreeBSD.ORG
Subject:   Re: A fix of recent bugs in swapping in/out a process
Message-ID:  <Pine.BSF.4.21.0207291106550.29141-100000@InterJet.elischer.org>
In-Reply-To: <20020729121728.GA537@laptop.6bone.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
great..

looks like it's a commit...


On Mon, 29 Jul 2002, Mark Santcroos wrote:

> 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
> 


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?Pine.BSF.4.21.0207291106550.29141-100000>