git: kernel - Make most of the fork and exit paths MPSAFE

Matthew Dillon dillon at crater.dragonflybsd.org
Sat Feb 12 14:27:46 PST 2011


commit b5c4d81fee4abb297f1e3c6e6514c4bfc3c68bc0
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sat Feb 12 14:20:09 2011 -0800

    kernel - Make most of the fork and exit paths MPSAFE
    
    * Remove the MP lock from numerous system calls (mainly socket calls) that
      no longer need it.
    
    * Use proc_token in a couple of places that still need work (instead of
      the MP lock).  For example, the process group (pgrp) and several places
      which call pfind() still need to use the proc_token.
    
    * Use the per-process p->p_token in fork1(), exit1(), and lwp_exit().
      The critical portions of these paths now have significant concurrency.
    
    * Use the per-process p->p_token when traversing p->p_children, primarily
      aiding the kern_wait() code.  So the wait*() system calls should now
      have significant concurrency.
    
    * Change the fgetown() API to avoid certain races.
    
    * Add M_ZERO to the struct filedesc_to_leader allocation for safety
      purposes.

Summary of changes:
 sys/dev/drm/drm_drv.c                |    2 +-
 sys/kern/kern_descrip.c              |   81 +++++++++++++++++++++------------
 sys/kern/kern_exit.c                 |   67 +++++++++++++++++-----------
 sys/kern/kern_fork.c                 |   40 ++++++++++-------
 sys/kern/kern_ktrace.c               |   47 ++++++++++++--------
 sys/kern/kern_proc.c                 |   10 +++-
 sys/kern/kern_sig.c                  |    2 +
 sys/kern/subr_log.c                  |    4 +-
 sys/kern/sys_pipe.c                  |   10 +---
 sys/kern/sys_socket.c                |   27 +++--------
 sys/kern/tty.c                       |    2 +-
 sys/kern/uipc_syscalls.c             |   60 ++-----------------------
 sys/net/bpf.c                        |    4 +-
 sys/net/tap/if_tap.c                 |    4 +-
 sys/net/tun/if_tun.c                 |    4 +-
 sys/platform/pc32/i386/trap.c        |    4 +-
 sys/platform/pc64/x86_64/trap.c      |    4 +-
 sys/platform/vkernel/i386/trap.c     |    4 +-
 sys/platform/vkernel64/x86_64/trap.c |    4 +-
 sys/sys/filedesc.h                   |    2 +-
 20 files changed, 187 insertions(+), 195 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/b5c4d81fee4abb297f1e3c6e6514c4bfc3c68bc0


-- 
DragonFly BSD source repository





More information about the Commits mailing list