cvs commit: src/sys/kern kern_sig.c kern_synch.c src/sys/machine/pc32/i386 machdep.c src/sys/machine/vkernel/i386 cpu_regs.c fork_tramp.s trap.c src/sys/machine/vkernel/include globaldata.h md_var.h src/sys/machine/vkernel/platform systimer.c ...

Matthew Dillon dillon at
Sun Jan 14 00:00:12 PST 2007

dillon      2007/01/13 23:59:09 PST

DragonFly src repository

  Modified files:
    sys/kern             kern_sig.c kern_synch.c 
    sys/machine/pc32/i386 machdep.c 
    sys/machine/vkernel/i386 cpu_regs.c fork_tramp.s trap.c 
    sys/machine/vkernel/include globaldata.h md_var.h 
    sys/machine/vkernel/platform systimer.c 
    sys/sys              proc.h signal.h signalvar.h 
    sys/vm               vm_vmspace.c 
  Implement a new signal delivery mechanism, SA_MAILBOX.  If specified the
  sigaction structure's sa_mailbox pointer (field is unioned with sa_handler)
  points to a location in user memory.  When the signal occurs, the location
  is overwritten with the signal number and the next system call made (or
  the current one running) will return EINTR.  NO SIGNAL STATE IS PUSHED,
  NO SIGNAL VECTOR IS DISPATCHED.  This makes mailbox signaling very fast.
  Userland can interlock against the mailbox simply by polling and clearing
  the mailbox prior to doing a system call.  The mailbox signal will be
  properly interlocked against the system call.  Userland does not need to
  make any other system calls (no sigblock() or sigsetmask() calls) to
  properly interlock delivery.  The kernel interrupts at most one system call
  per signal delivered via this mechanism, even if the userland does not
  clear the mailbox.
  As of this implementatino, mailbox delivery can cause an extra 'false'
  interruption of a system call.  system calls do not currently poll installed
  mailboxes to deal with false hits.  Mailbox signaling is meant to be used
  under tightly managed conditions.
  Move the virtual kernel check from sendsig() to postsig().  Mailbox
  delivery must do any virtual kernel swaps prior to posting a mailbox signal.
  Adjust go_user() to take an interrupt frame instead of a trap frame.
  Replace the sigblock() based idle loop interlock with a mailbox interlock.
  Add mailbox checks to the go_user() vmspace_ctl() loop (currently a bit of
  a hack).
  Revision  Changes    Path
  1.61      +80 -18    src/sys/kern/kern_sig.c
  1.71      +27 -6     src/sys/kern/kern_synch.c
  1.115     +0 -11     src/sys/machine/pc32/i386/machdep.c
  1.10      +5 -13     src/sys/machine/vkernel/i386/cpu_regs.c
  1.2       +2 -0      src/sys/machine/vkernel/i386/fork_tramp.s
  1.12      +28 -29    src/sys/machine/vkernel/i386/trap.c
  1.5       +1 -1      src/sys/machine/vkernel/include/globaldata.h
  1.13      +2 -1      src/sys/machine/vkernel/include/md_var.h
  1.7       +20 -2     src/sys/machine/vkernel/platform/systimer.c
  1.90      +1 -1      src/sys/sys/proc.h
  1.6       +7 -2      src/sys/sys/signal.h
  1.16      +1 -0      src/sys/sys/signalvar.h
  1.10      +8 -0      src/sys/vm/vm_vmspace.c

More information about the Commits mailing list