cvs commit: src/bin/ps print.c ps.1 ps.c src/sys/dev/raid/vinum vinumdaemon.c src/sys/emulation/linux/i386 linux_ptrace.c src/sys/emulation/posix4 ksched.c src/sys/emulation/svr4 svr4_misc.c src/sys/i386/i386 db_trace.c pmap.c procfs_machdep.c ...

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Nov 14 10:52:23 PST 2005


dillon      2005/11/14 10:50:18 PST

DragonFly src repository

  Modified files:
    bin/ps               print.c ps.1 ps.c 
    sys/dev/raid/vinum   vinumdaemon.c 
    sys/emulation/linux/i386 linux_ptrace.c 
    sys/emulation/posix4 ksched.c 
    sys/emulation/svr4   svr4_misc.c 
    sys/i386/i386        db_trace.c pmap.c procfs_machdep.c trap.c 
    sys/kern             init_main.c kern_exit.c kern_fork.c 
                         kern_proc.c kern_resource.c kern_sig.c 
                         kern_synch.c lwkt_thread.c sys_generic.c 
                         sys_process.c tty.c usched_bsd4.c 
                         vfs_sync.c 
    sys/netproto/smb     smb_subr.c 
    sys/sys              kernel.h proc.h systm.h thread.h 
    sys/vfs/procfs       procfs_ctl.c procfs_dbregs.c 
                         procfs_fpregs.c procfs_regs.c 
                         procfs_status.c 
    sys/vm               pmap.h vm_fault.c vm_glue.c vm_meter.c 
                         vm_pageout.c 
    usr.bin/systat       pigs.c 
    usr.bin/top          machine.c 
  Log:
  Make tsleep/wakeup() MP SAFE for kernel threads and get us closer to
  making it MP SAFE for user processes.  Currently the code is operating
  under the rule that access to a thread structure requires cpu locality of
  reference, and access to a proc structure requires the Big Giant Lock.  The
  two are not mutually exclusive so, for example, tsleep/wakeup on a proc
  needs both cpu locality of reference *AND* the BGL.  This was true with the
  old tsleep/wakeup and has now been documented.
  
  The new tsleep/wakeup algorithm is quite simple in concept.  Each cpu has its
  own ident based hash table and each hash slot has a cpu mask which tells
  wakeup() which cpu's might have the ident.  A wakeup iterates through all
  candidate cpus simply by chaining the IPI message through them until either
  all candidate cpus have been serviced, or (with wakeup_one()) the requested
  number of threads have been woken up.
  
  Other changes made in this patch set:
  
  * The sense of P_INMEM has been reversed.  It is now P_SWAPPEDOUT.  Also,
    P_SWAPPING, P_SWAPINREQ are not longer relevant and have been removed.
  
  * The swapping code has been cleaned up and seriously revamped.  The new
    swapin code staggers swapins to give the VM system a chance to respond
    to new conditions.  Also some lwp-related fixes were made (more
    p_rtprio vs lwp_rtprio confusion).
  
  * As mentioned above, tsleep/wakeup have been rewritten.  The process
    p_stat no longer does crazy transitions from SSLEEP to SSTOP.  There is
    now only SSLEEP and SSTOP is synthesized from P_SWAPPEDOUT for userland
    consumpion.  Additionally, tsleep() with PCATCH will NO LONGER STOP THE
    PROCESS IN THE TSLEEP CALL.  Instead, the actual stop is deferred until
    the process tries to return to userland.  This removes all remaining cases
    where a stopped process can hold a locked kernel resource.
  
  * A P_BREAKTSLEEP flag has been added.  This flag indicates when an event
    occurs that is allowed to break a tsleep with PCATCH.  All the weird
    undocumented setrunnable() rules have been removed and replaced with a
    very simple algorithm based on this flag.
  
  * Since the UAREA is no longer swapped, we no longer faultin() on PHOLD().
    This also incidently fixes the 'ps' command's tendancy to try to swap
    all processes back into memory.
  
  * speedup_syncer() no longer does hackish checks on proc0's tsleep channel
    (td_wchan).
  
  * Userland scheduler acquisition and release has now been tightened up and
    KKASSERT's have been added (one of the bugs Stefan found was related
    to an improper lwkt_schedule() that was found by one of the new assertions).
    We also have added other assertions related to expected conditions.
  
  * A serious race in pmap_release_free_page() has been corrected.  We
    no longer couple the object generation check with a failed
    pmap_release_free_page() call.  Instead the two conditions are checked
    independantly.  We no longer loop when pmap_release_free_page() succeeds
    (it is unclear how that could ever have worked properly).
  
  Major testing by: Stefan Krueger <skrueger at xxxxxxxxxxxxxxxx>
  
  Revision  Changes    Path
  1.24      +3 -3      src/bin/ps/print.c
  1.7       +1 -1      src/bin/ps/ps.1
  1.18      +3 -2      src/bin/ps/ps.c
  1.6       +1 -1      src/sys/dev/raid/vinum/vinumdaemon.c
  1.9       +2 -2      src/sys/emulation/linux/i386/linux_ptrace.c
  1.6       +4 -4      src/sys/emulation/posix4/ksched.c
  1.30      +1 -1      src/sys/emulation/svr4/svr4_misc.c
  1.11      +1 -1      src/sys/i386/i386/db_trace.c
  1.53      +15 -73    src/sys/i386/i386/pmap.c
  1.5       +7 -7      src/sys/i386/i386/procfs_machdep.c
  1.66      +32 -11    src/sys/i386/i386/trap.c
  1.51      +2 -2      src/sys/kern/init_main.c
  1.48      +1 -1      src/sys/kern/kern_exit.c
  1.44      +1 -1      src/sys/kern/kern_fork.c
  1.21      +10 -8     src/sys/kern/kern_proc.c
  1.24      +2 -2      src/sys/kern/kern_resource.c
  1.39      +137 -116  src/sys/kern/kern_sig.c
  1.53      +218 -212  src/sys/kern/kern_synch.c
  1.86      +13 -26    src/sys/kern/lwkt_thread.c
  1.23      +9 -4      src/sys/kern/sys_generic.c
  1.18      +9 -3      src/sys/kern/sys_process.c
  1.19      +1 -1      src/sys/kern/tty.c
  1.4       +28 -17    src/sys/kern/usched_bsd4.c
  1.8       +6 -7      src/sys/kern/vfs_sync.c
  1.16      +1 -1      src/sys/netproto/smb/smb_subr.c
  1.18      +1 -0      src/sys/sys/kernel.h
  1.72      +15 -14    src/sys/sys/proc.h
  1.33      +1 -0      src/sys/sys/systm.h
  1.73      +7 -0      src/sys/sys/thread.h
  1.8       +13 -4     src/sys/vfs/procfs/procfs_ctl.c
  1.7       +1 -1      src/sys/vfs/procfs/procfs_dbregs.c
  1.7       +1 -1      src/sys/vfs/procfs/procfs_fpregs.c
  1.8       +1 -1      src/sys/vfs/procfs/procfs_regs.c
  1.11      +5 -4      src/sys/vfs/procfs/procfs_status.c
  1.16      +0 -2      src/sys/vm/pmap.h
  1.20      +2 -1      src/sys/vm/vm_fault.c
  1.36      +96 -81    src/sys/vm/vm_glue.c
  1.8       +6 -6      src/sys/vm/vm_meter.c
  1.16      +4 -4      src/sys/vm/vm_pageout.c
  1.11      +1 -1      src/usr.bin/systat/pigs.c
  1.18      +1 -1      src/usr.bin/top/machine.c


http://www.dragonflybsd.org/cvsweb/src/bin/ps/print.c.diff?r1=1.23&r2=1.24&f=u
http://www.dragonflybsd.org/cvsweb/src/bin/ps/ps.1.diff?r1=1.6&r2=1.7&f=u
http://www.dragonflybsd.org/cvsweb/src/bin/ps/ps.c.diff?r1=1.17&r2=1.18&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/dev/raid/vinum/vinumdaemon.c.diff?r1=1.5&r2=1.6&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/emulation/linux/i386/linux_ptrace.c.diff?r1=1.8&r2=1.9&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/emulation/posix4/ksched.c.diff?r1=1.5&r2=1.6&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/emulation/svr4/svr4_misc.c.diff?r1=1.29&r2=1.30&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/db_trace.c.diff?r1=1.10&r2=1.11&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/pmap.c.diff?r1=1.52&r2=1.53&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/procfs_machdep.c.diff?r1=1.4&r2=1.5&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/i386/i386/trap.c.diff?r1=1.65&r2=1.66&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/init_main.c.diff?r1=1.50&r2=1.51&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_exit.c.diff?r1=1.47&r2=1.48&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_fork.c.diff?r1=1.43&r2=1.44&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_proc.c.diff?r1=1.20&r2=1.21&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_resource.c.diff?r1=1.23&r2=1.24&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_sig.c.diff?r1=1.38&r2=1.39&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/kern_synch.c.diff?r1=1.52&r2=1.53&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/lwkt_thread.c.diff?r1=1.85&r2=1.86&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/sys_generic.c.diff?r1=1.22&r2=1.23&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/sys_process.c.diff?r1=1.17&r2=1.18&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/tty.c.diff?r1=1.18&r2=1.19&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/usched_bsd4.c.diff?r1=1.3&r2=1.4&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_sync.c.diff?r1=1.7&r2=1.8&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/netproto/smb/smb_subr.c.diff?r1=1.15&r2=1.16&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/kernel.h.diff?r1=1.17&r2=1.18&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/proc.h.diff?r1=1.71&r2=1.72&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/systm.h.diff?r1=1.32&r2=1.33&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/thread.h.diff?r1=1.72&r2=1.73&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/procfs/procfs_ctl.c.diff?r1=1.7&r2=1.8&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/procfs/procfs_dbregs.c.diff?r1=1.6&r2=1.7&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/procfs/procfs_fpregs.c.diff?r1=1.6&r2=1.7&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/procfs/procfs_regs.c.diff?r1=1.7&r2=1.8&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vfs/procfs/procfs_status.c.diff?r1=1.10&r2=1.11&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/pmap.h.diff?r1=1.15&r2=1.16&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_fault.c.diff?r1=1.19&r2=1.20&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_glue.c.diff?r1=1.35&r2=1.36&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_meter.c.diff?r1=1.7&r2=1.8&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/vm/vm_pageout.c.diff?r1=1.15&r2=1.16&f=u
http://www.dragonflybsd.org/cvsweb/src/usr.bin/systat/pigs.c.diff?r1=1.10&r2=1.11&f=u
http://www.dragonflybsd.org/cvsweb/src/usr.bin/top/machine.c.diff?r1=1.17&r2=1.18&f=u





More information about the Commits mailing list