cvs commit: src/sys/kern kern_timeout.c

Ed Maste emaste at FreeBSD.org
Wed Jul 30 20:22:31 UTC 2008


emaste      2008-07-30 20:22:21 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_6)
    sys/kern             kern_timeout.c 
  Log:
  SVN rev 181012 on 2008-07-30 20:22:21Z by emaste
  
  MFC improved and simplified callout_drain logic and improved ktr(4)
  logging.
  
  r155957:
    Use the recently added msleep_spin() function to simplify the
    callout_drain() logic.  We no longer need a separate non-spin mutex to
    do sleep/wakeup with, instead we can now just use the one spin mutex
    to manage all the callout functionality.
  
  r163246:
    Improve ktr(4) logging for callout(9) subsystem. Log all inserts and
    removals, including failures, into the callwheel.
  
  r171053:
    Fix an old standing LOR between callout_lock and sleepqueues chain
    (which could lead to a deadlock).
    - sleepq_set_timeout acquires callout_lock (via callout_reset()) only
      with sleepq chain lock held
    - msleep_spin in _callout_stop_safe lock the sleepqueue chain with
      callout_lock held
  
    In order to solve this don't use msleep_spin in _callout_stop_safe()
    but use directly sleepqueues as inline msleep_spin code. Rearrange the
    wakeup path in order to have it consistent too.
  
  r172025:
    Close a race that snuck in with the recent changes to fix a LOR
    between the callout_lock spin lock and the sleepqueue spin locks.
    In the fix, callout_drain() has to drop the callout_lock so it can
    acquire the sleepqueue lock.  The state of the callout can change
    while the callout_lock is held however (for example, it can be
    rescheduled via callout_reset()).  The previous code assumed that the
    only state change that could happen is that the callout could finish
    executing.  This change alters callout_drain() to effectively restart
    and recheck everything after it acquires the sleepqueue lock thus
    handling all the possible states that the callout could be in after
    any changes while callout_lock was dropped.
  
  Revision  Changes    Path
  1.97.2.3  +106 -60   src/sys/kern/kern_timeout.c


More information about the cvs-src mailing list