cvs commit: src/sys/ddb db_ps.c src/sys/kern lwkt_thread.c lwkt_token.c src/sys/sys spinlock2.h thread.h

Matthew Dillon dillon at crater.dragonflybsd.org
Fri May 19 11:30:47 PDT 2006


dillon      2006/05/19 11:26:29 PDT

DragonFly src repository

  Modified files:
    sys/ddb              db_ps.c 
    sys/kern             lwkt_thread.c lwkt_token.c 
    sys/sys              spinlock2.h thread.h 
  Log:
  Recent lwkt_token work broke UP builds.  Fix the token code to operate
  properly for both UP and SMP builds.  The SMP build uses spinlocks to
  control access and also to do the preemption check.  The tokens are
  explicitly obtained when a thread is switched in and released when a
  thread is (non-preemptively) switched out.  Spinlocks cannot be
  used for this purpose on UP because they are coded to a degenerate
  case on a UP build.
  
  On a UP build an explicit preemption check is needed, but no spinlock or
  per-thread counter is required because the definition of a token is that
  it is only 'held' while a thread is actually running or preempted.  So,
  by definition, a token can always be obtained and held by a thread on UP
  EXCEPT in the case where a preempting thread is trying to obtain a token
  held by the preempted thread.
  
  Conditionalize elements in the lwkt_token structure definition to guarentee
  that SMP fields cannot be used in UP builds or vise-versa.  The lwkt_token
  structure is made the same size for both builds.  Also remove some of
  the degenerate spinlock functions (spin_trylock() and spin_tryunlock())
  for UP builds to force a compile-time error if an attempt is made to use
  them.  spin_lock*() and spin_unlock*() are retained as degenerate cases
  on UP.
  
  Reported-by: Sascha Wildner <saw at xxxxxxxxx>, walt <wa1ter at xxxxxxxxxxxxx>
  
  Revision  Changes    Path
  1.17      +2 -0      src/sys/ddb/db_ps.c
  1.95      +2 -0      src/sys/kern/lwkt_thread.c
  1.25      +74 -6     src/sys/kern/lwkt_token.c
  1.7       +10 -16    src/sys/sys/spinlock2.h
  1.79      +20 -3     src/sys/sys/thread.h


http://www.dragonflybsd.org/cvsweb/src/sys/ddb/db_ps.c.diff?r1=1.16&r2=1.17&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/lwkt_thread.c.diff?r1=1.94&r2=1.95&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/lwkt_token.c.diff?r1=1.24&r2=1.25&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/spinlock2.h.diff?r1=1.6&r2=1.7&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/thread.h.diff?r1=1.78&r2=1.79&f=u





More information about the Commits mailing list