Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Jul 2002 18:36:59 +0900
From:      Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>
To:        David Xu <davidx@viasoft.com.cn>
Cc:        Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG
Subject:   Re: cvs commit: src/sys/kern kern_condvar.c kern_switch.c kern_synch.c         src/sys/sys proc.h src/sys/vm vm_glue.c
Message-ID:  <200207300937.g6U9axhh075462@silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp>
In-Reply-To: <200207301650.44420.davidx@viasoft.com.cn>
References:  <200207300654.g6U6s5tY099740@freefall.freebsd.org> <200207301612.55467.davidx@viasoft.com.cn> <200207300826.g6U8Q9hh055075@silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> <200207301650.44420.davidx@viasoft.com.cn>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 30 Jul 2002 16:50:44 +0800,
  David Xu <davidx@viasoft.com.cn> said:

David> Yes, and how about cv_abort()? 

If a thread is in TDS_SLP, it should be all right.  setrunnable()
wakes up the scheduler thread.

Otherwise, the thread is likely to be suspended by thread_single().
This should not be a problem as well because a process with a
suspended thread is not swapped out.  (see thread_safetoswapout()
in sys/proc.h)


David> On Tuesday 30 July 2002 16:26, Seigo Tanimura wrote:
>> On Tue, 30 Jul 2002 16:12:55 +0800,
>> David Xu <davidx@viasoft.com.cn> said:
>> 
David> could you look carefully timeout handing function? for example,
David> cv_timedwait_end(), it has same problem with swapping.
>> 
>> Do you mean, for instance, this fragment?
>> 
>> [sys/kern/kern_synch.c]
>> static void
>> endtsleep(arg)
>> void *arg;
>> {
>> (snip)
>> if ((td->td_flags & TDF_TIMEOUT) != 0) {
>> td->td_flags &= ~TDF_TIMEOUT;
>> setrunqueue(td); /* <- XXX! */
>> 
>> Yes, as the state of the thread in question is TDS_SLP, it can be
>> swapped out.
>> 
>> The rest of endtsleep() should be all right, setrunnable() takes care
>> of a thread swapped out.
>> 
David> On Tuesday 30 July 2002 14:54, Seigo Tanimura wrote:
>> >> tanimura    2002/07/29 23:54:05 PDT
>> >>
>> >> Modified files:
>> >> sys/kern             kern_condvar.c kern_switch.c kern_synch.c
>> >> sys/sys              proc.h
>> >> sys/vm               vm_glue.c
>> >> Log:
>> >> - Optimize wakeup() and its friends; if a thread waken up is being
>> >> swapped in, we do not have to ask for the scheduler thread to do
>> >> that.
>> >>
>> >> - Assert that a process is not swapped out in runq functions and
>> >> swapout().
>> >>
>> >> - Introduce thread_safetoswapout() for readability.
>> >>
>> >> - In swapout_procs(), perform a test that may block (check of a
>> >> thread working on its vm map) first.  This lets us call swapout()
>> >> with the sched_lock held, providing a better atomicity.
>> >>
>> >> Revision  Changes    Path
>> >> 1.27      +4 -2      src/sys/kern/kern_condvar.c
>> >> 1.35      +6 -0      src/sys/kern/kern_switch.c
>> >> 1.191     +12 -6     src/sys/kern/kern_synch.c
>> >> 1.233     +5 -0      src/sys/sys/proc.h
>> >> 1.150     +65 -64    src/sys/vm/vm_glue.c
>> >>
>> >> To Unsubscribe: send mail to majordomo@FreeBSD.org
>> >> with "unsubscribe cvs-all" in the body of the message
>> 
>> To Unsubscribe: send mail to majordomo@FreeBSD.org
>> with "unsubscribe cvs-all" in the body of the message


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200207300937.g6U9axhh075462>