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