diff --git a/sys/alpha/alpha/uio_machdep.c b/sys/alpha/alpha/uio_machdep.c index 1bcc74c769a6..656c5b6202d3 100644 --- a/sys/alpha/alpha/uio_machdep.c +++ b/sys/alpha/alpha/uio_machdep.c @@ -71,10 +71,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -119,10 +117,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/amd64/amd64/uio_machdep.c b/sys/amd64/amd64/uio_machdep.c index 63057b70484e..dfa11ab5364c 100644 --- a/sys/amd64/amd64/uio_machdep.c +++ b/sys/amd64/amd64/uio_machdep.c @@ -71,10 +71,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -118,10 +116,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/arm/arm/uio_machdep.c b/sys/arm/arm/uio_machdep.c index 5b9a7361f9a3..2fe374f8c38b 100644 --- a/sys/arm/arm/uio_machdep.c +++ b/sys/arm/arm/uio_machdep.c @@ -75,10 +75,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -122,10 +120,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/i386/i386/uio_machdep.c b/sys/i386/i386/uio_machdep.c index 6267c6cf6086..5e32ad91b1a5 100644 --- a/sys/i386/i386/uio_machdep.c +++ b/sys/i386/i386/uio_machdep.c @@ -71,10 +71,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -119,10 +117,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/ia64/ia64/uio_machdep.c b/sys/ia64/ia64/uio_machdep.c index 71da287b3e81..b6241b9062ed 100644 --- a/sys/ia64/ia64/uio_machdep.c +++ b/sys/ia64/ia64/uio_machdep.c @@ -71,10 +71,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -119,10 +117,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index 59f60ab52b25..7d90db56ac98 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -251,16 +251,14 @@ debuglockmgr(lkp, flags, interlkp, td, name, file, line) * while there is an exclusive lock holder or while an * exclusive lock request or upgrade request is in progress. * - * However, if TDF_DEADLKTREAT is set, we override exclusive + * However, if TDP_DEADLKTREAT is set, we override exclusive * lock requests or upgrade requests ( but not the exclusive * lock itself ). */ if (lkp->lk_lockholder != thr) { lockflags = LK_HAVE_EXCL; - mtx_lock_spin(&sched_lock); - if (td != NULL && !(td->td_flags & TDF_DEADLKTREAT)) + if (td != NULL && !(td->td_pflags & TDP_DEADLKTREAT)) lockflags |= LK_WANT_EXCL | LK_WANT_UPGRADE; - mtx_unlock_spin(&sched_lock); error = acquire(&lkp, extflags, lockflags); if (error) break; diff --git a/sys/kern/kern_subr.c b/sys/kern/kern_subr.c index cee2492a22a9..880b5ee0a831 100644 --- a/sys/kern/kern_subr.c +++ b/sys/kern/kern_subr.c @@ -140,10 +140,8 @@ uiomove(void *cp, int n, struct uio *uio) ("uiomove proc")); if (td) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { @@ -187,11 +185,8 @@ uiomove(void *cp, int n, struct uio *uio) n -= cnt; } out: - if (td && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/powerpc/aim/uio_machdep.c b/sys/powerpc/aim/uio_machdep.c index 1c27496bc1b3..bd1663fc8859 100644 --- a/sys/powerpc/aim/uio_machdep.c +++ b/sys/powerpc/aim/uio_machdep.c @@ -71,10 +71,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -118,10 +116,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/powerpc/powerpc/uio_machdep.c b/sys/powerpc/powerpc/uio_machdep.c index 1c27496bc1b3..bd1663fc8859 100644 --- a/sys/powerpc/powerpc/uio_machdep.c +++ b/sys/powerpc/powerpc/uio_machdep.c @@ -71,10 +71,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -118,10 +116,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/sparc64/sparc64/uio_machdep.c b/sys/sparc64/sparc64/uio_machdep.c index b096049e0287..8aef4fa960e4 100644 --- a/sys/sparc64/sparc64/uio_machdep.c +++ b/sys/sparc64/sparc64/uio_machdep.c @@ -77,10 +77,8 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, ("uiomove_fromphys proc")); if (td != NULL) { - mtx_lock_spin(&sched_lock); - save = td->td_flags & TDF_DEADLKTREAT; - td->td_flags |= TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); + save = td->td_pflags & TDP_DEADLKTREAT; + td->td_pflags |= TDP_DEADLKTREAT; } while (n > 0 && uio->uio_resid) { iov = uio->uio_iov; @@ -133,10 +131,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offset_t offset, int n, struct uio *uio) n -= cnt; } out: - if (td != NULL && save == 0) { - mtx_lock_spin(&sched_lock); - td->td_flags &= ~TDF_DEADLKTREAT; - mtx_unlock_spin(&sched_lock); - } + if (td != NULL && save == 0) + td->td_pflags &= ~TDP_DEADLKTREAT; return (error); } diff --git a/sys/sys/proc.h b/sys/sys/proc.h index 3a074dd5c450..a418bec4db98 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -355,7 +355,6 @@ struct thread { #define TDF_NEEDSIGCHK 0x020000 /* Thread may need signal delivery. */ #define TDF_UMTXWAKEUP 0x080000 /* Libthr thread must not sleep on a umtx. */ #define TDF_THRWAKEUP 0x100000 /* Libthr thread must not suspend itself. */ -#define TDF_DEADLKTREAT 0x800000 /* Lock aquisition - deadlock treatment. */ /* "Private" flags kept in td_pflags: */ #define TDP_OLDMASK 0x0001 /* Need to restore mask after suspend. */ @@ -364,6 +363,7 @@ struct thread { #define TDP_UPCALLING 0x0008 /* This thread is doing an upcall. */ #define TDP_COWINPROGRESS 0x0010 /* Snapshot copy-on-write in progress. */ #define TDP_ALTSTACK 0x0020 /* Have alternate signal stack. */ +#define TDP_DEADLKTREAT 0x0040 /* Lock aquisition - deadlock treatment. */ #define TDP_SA 0x0080 /* A scheduler activation based thread. */ #define TDI_SUSPENDED 0x0001 /* On suspension queue. */ diff --git a/sys/ufs/ffs/ffs_rawread.c b/sys/ufs/ffs/ffs_rawread.c index 3dcb33e25a95..fcc6193f8bc5 100644 --- a/sys/ufs/ffs/ffs_rawread.c +++ b/sys/ufs/ffs/ffs_rawread.c @@ -436,8 +436,8 @@ ffs_rawread(struct vnode *vp, uio->uio_iovcnt == 1 && uio->uio_segflg == UIO_USERSPACE && uio->uio_resid == uio->uio_iov->iov_len && - (((uio->uio_td != NULL) ? uio->uio_td : curthread)->td_flags & - TDF_DEADLKTREAT) == 0) { + (((uio->uio_td != NULL) ? uio->uio_td : curthread)->td_pflags & + TDP_DEADLKTREAT) == 0) { int secsize; /* Media sector size */ off_t filebytes; /* Bytes left of file */ int blockbytes; /* Bytes left of file in full blocks */