DragonFly-2.3.1.893.gd9345 master sys/bus/cam cam_sim.c cam_xpt.c sys/dev/disk/ahci ahci_dragonfly.c sys/dev/disk/aic7xxx aic_osm_lib.c sys/dev/disk/sili sili_dragonfly.c sys/dev/drm drmP.h drm_drv.c drm_lock.c radeon_cp.c sys/dev/netif/iwi if_iwi.c sys/dev/raid/aac aac.c sys/dev/sound/pcm sound.c sys/kern kern_synch.c kern_umtx.c lwkt_ipiq.c lwkt_serialize.c subr_bus.c sys_pipe.c vfs_bio.c vfs_vnops.c sys/net/tap if_tap.c sys/netproto/smb smb_subr.c sys/sys param.h sys/vfs/hammer hammer_io.c hammer_subs.c

Matthew Dillon dillon at crater.dragonflybsd.org
Tue Jul 14 19:56:31 PDT 2009


commit d9345d3a15a76b50686600e9c522f9e1ba9c855a
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Tue Jul 14 03:14:33 2009 -0700

    tsleep() - Add PINTERLOCKED flag to catch edge case.
    
    When the tsleep_interlock() + UNLOCK + tsleep() combination is used it is
    possible for an incoming wakeup IPI to be processed even if the combination
    is used within a critical section, because operations inbetween the two
    may send an IPI.  Under heavy loads sending an IPI can force incoming IPIs
    to be processed synchronously to avoid deadlocks.
    
    It is also possible for tsleep itself to create this condition when it
    releases the user process schedule prior to descheduling itself.
    
    PINTERLOCKED causes tsleep to check whether the bit set by tsleep_interlock()
    is still set.  If it is not set we simply return without sleeping.

Summary of changes:
 sys/bus/cam/cam_sim.c              |    5 +++--
 sys/bus/cam/cam_xpt.c              |    2 +-
 sys/dev/disk/ahci/ahci_dragonfly.c |    2 +-
 sys/dev/disk/aic7xxx/aic_osm_lib.c |    4 ++--
 sys/dev/disk/sili/sili_dragonfly.c |    2 +-
 sys/dev/drm/drmP.h                 |    2 +-
 sys/dev/drm/drm_drv.c              |    2 +-
 sys/dev/drm/drm_lock.c             |    4 ++--
 sys/dev/drm/radeon_cp.c            |   14 ++++++++------
 sys/dev/netif/iwi/if_iwi.c         |   11 ++++++-----
 sys/dev/raid/aac/aac.c             |    6 +++---
 sys/dev/sound/pcm/sound.c          |    2 +-
 sys/kern/kern_synch.c              |   16 ++++++++++++++++
 sys/kern/kern_umtx.c               |    3 ++-
 sys/kern/lwkt_ipiq.c               |    2 +-
 sys/kern/lwkt_serialize.c          |    4 ++--
 sys/kern/subr_bus.c                |    2 +-
 sys/kern/sys_pipe.c                |    2 +-
 sys/kern/vfs_bio.c                 |    9 +++++----
 sys/kern/vfs_vnops.c               |    2 +-
 sys/net/tap/if_tap.c               |    2 +-
 sys/netproto/smb/smb_subr.c        |    2 +-
 sys/sys/param.h                    |    1 +
 sys/vfs/hammer/hammer_io.c         |    4 ++--
 sys/vfs/hammer/hammer_subs.c       |    4 ++--
 25 files changed, 66 insertions(+), 43 deletions(-)

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


-- 
DragonFly BSD source repository





More information about the Commits mailing list