From owner-svn-src-user@FreeBSD.ORG Sun May 15 14:32:55 2011 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C3364106566B; Sun, 15 May 2011 14:32:55 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B2F8F8FC19; Sun, 15 May 2011 14:32:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p4FEWtT7042039; Sun, 15 May 2011 14:32:55 GMT (envelope-from avg@svn.freebsd.org) Received: (from avg@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p4FEWtTw042031; Sun, 15 May 2011 14:32:55 GMT (envelope-from avg@svn.freebsd.org) Message-Id: <201105151432.p4FEWtTw042031@svn.freebsd.org> From: Andriy Gapon Date: Sun, 15 May 2011 14:32:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r221962 - in user/avg/xcpu/sys: kern sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 15 May 2011 14:32:55 -0000 Author: avg Date: Sun May 15 14:32:55 2011 New Revision: 221962 URL: http://svn.freebsd.org/changeset/base/221962 Log: better name and place for a macro that checks if curthread is panic thread Suggested by: attilio Modified: user/avg/xcpu/sys/kern/kern_mutex.c user/avg/xcpu/sys/kern/kern_rmlock.c user/avg/xcpu/sys/kern/kern_rwlock.c user/avg/xcpu/sys/kern/kern_sx.c user/avg/xcpu/sys/kern/kern_synch.c user/avg/xcpu/sys/sys/proc.h user/avg/xcpu/sys/sys/systm.h Modified: user/avg/xcpu/sys/kern/kern_mutex.c ============================================================================== --- user/avg/xcpu/sys/kern/kern_mutex.c Sun May 15 14:01:23 2011 (r221961) +++ user/avg/xcpu/sys/kern/kern_mutex.c Sun May 15 14:32:55 2011 (r221962) @@ -348,7 +348,7 @@ _mtx_lock_sleep(struct mtx *m, uintptr_t return; } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; lock_profile_obtain_lock_failed(&m->lock_object, @@ -510,7 +510,7 @@ _mtx_lock_spin(struct mtx *m, uintptr_t uint64_t waittime = 0; #endif - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; if (LOCK_LOG_TEST(&m->lock_object, opts)) @@ -584,7 +584,7 @@ retry: break; } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; lock_profile_obtain_lock_failed(&m->lock_object, @@ -673,7 +673,7 @@ _mtx_unlock_sleep(struct mtx *m, int opt return; } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; /* Modified: user/avg/xcpu/sys/kern/kern_rmlock.c ============================================================================== --- user/avg/xcpu/sys/kern/kern_rmlock.c Sun May 15 14:01:23 2011 (r221961) +++ user/avg/xcpu/sys/kern/kern_rmlock.c Sun May 15 14:32:55 2011 (r221962) @@ -279,7 +279,7 @@ _rm_rlock_hard(struct rmlock *rm, struct return (1); } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return (1); /* @@ -388,7 +388,7 @@ _rm_unlock_hard(struct thread *td,struct if (!tracker->rmp_flags) return; - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; mtx_lock_spin(&rm_spinlock); @@ -442,7 +442,7 @@ _rm_wlock(struct rmlock *rm) else mtx_lock(&rm->rm_lock_mtx); - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; if (rm->rm_writecpus != all_cpus) { Modified: user/avg/xcpu/sys/kern/kern_rwlock.c ============================================================================== --- user/avg/xcpu/sys/kern/kern_rwlock.c Sun May 15 14:01:23 2011 (r221961) +++ user/avg/xcpu/sys/kern/kern_rwlock.c Sun May 15 14:32:55 2011 (r221962) @@ -323,7 +323,7 @@ _rw_rlock(struct rwlock *rw, const char rw->lock_object.lo_name, file, line)); WITNESS_CHECKORDER(&rw->lock_object, LOP_NEWORDER, file, line, NULL); - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; for (;;) { @@ -535,7 +535,7 @@ _rw_runlock(struct rwlock *rw, const cha WITNESS_UNLOCK(&rw->lock_object, 0, file, line); LOCK_LOG_LOCK("RUNLOCK", &rw->lock_object, 0, 0, file, line); - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; /* TODO: drop "owner of record" here. */ @@ -665,7 +665,7 @@ _rw_wlock_hard(struct rwlock *rw, uintpt return; } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; if (LOCK_LOG_TEST(&rw->lock_object, 0)) @@ -829,7 +829,7 @@ _rw_wunlock_hard(struct rwlock *rw, uint return; } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; KASSERT(rw->rw_lock & (RW_LOCK_READ_WAITERS | RW_LOCK_WRITE_WAITERS), Modified: user/avg/xcpu/sys/kern/kern_sx.c ============================================================================== --- user/avg/xcpu/sys/kern/kern_sx.c Sun May 15 14:01:23 2011 (r221961) +++ user/avg/xcpu/sys/kern/kern_sx.c Sun May 15 14:32:55 2011 (r221962) @@ -493,7 +493,7 @@ _sx_xlock_hard(struct sx *sx, uintptr_t return (0); } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return (0); if (LOCK_LOG_TEST(&sx->lock_object, 0)) @@ -695,7 +695,7 @@ _sx_xunlock_hard(struct sx *sx, uintptr_ return; } - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; MPASS(sx->sx_lock & (SX_LOCK_SHARED_WAITERS | @@ -760,7 +760,7 @@ _sx_slock_hard(struct sx *sx, int opts, int64_t sleep_time = 0; #endif - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return (0); /* @@ -929,7 +929,7 @@ _sx_sunlock_hard(struct sx *sx, const ch uintptr_t x; int wakeup_swapper; - if (IS_PANIC_THREAD()) + if (THREAD_PANICED()) return; for (;;) { Modified: user/avg/xcpu/sys/kern/kern_synch.c ============================================================================== --- user/avg/xcpu/sys/kern/kern_synch.c Sun May 15 14:01:23 2011 (r221961) +++ user/avg/xcpu/sys/kern/kern_synch.c Sun May 15 14:32:55 2011 (r221962) @@ -158,7 +158,7 @@ _sleep(void *ident, struct lock_object * else class = NULL; - if (cold || IS_PANIC_THREAD()) { + if (cold || THREAD_PANICED()) { /* * During autoconfiguration, just return; * don't run any other threads or panic below, @@ -260,7 +260,7 @@ msleep_spin(void *ident, struct mtx *mtx KASSERT(p != NULL, ("msleep1")); KASSERT(ident != NULL && TD_IS_RUNNING(td), ("msleep")); - if (cold || IS_PANIC_THREAD()) { + if (cold || THREAD_PANICED()) { /* * During autoconfiguration, just return; * don't run any other threads or panic below, Modified: user/avg/xcpu/sys/sys/proc.h ============================================================================== --- user/avg/xcpu/sys/sys/proc.h Sun May 15 14:01:23 2011 (r221961) +++ user/avg/xcpu/sys/sys/proc.h Sun May 15 14:32:55 2011 (r221962) @@ -775,6 +775,16 @@ MALLOC_DECLARE(M_SUBPROC); curthread->td_pflags &= ~TDP_NOSLEEPING; \ } while (0) +/* + * If we have already panic'd and this is the thread that called + * panic(), then don't block on any mutexes but silently succeed. + * Otherwise, the kernel will deadlock since the scheduler isn't + * going to run the thread that holds the lock we need. + */ +#define THREAD_PANICED() \ + (panicstr != NULL && (curthread->td_flags & TDF_INPANIC) != 0) + + #define PIDHASH(pid) (&pidhashtbl[(pid) & pidhash]) extern LIST_HEAD(pidhashhead, proc) *pidhashtbl; extern u_long pidhash; Modified: user/avg/xcpu/sys/sys/systm.h ============================================================================== --- user/avg/xcpu/sys/sys/systm.h Sun May 15 14:01:23 2011 (r221961) +++ user/avg/xcpu/sys/sys/systm.h Sun May 15 14:32:55 2011 (r221962) @@ -109,15 +109,6 @@ enum VM_GUEST { VM_GUEST_NO = 0, VM_GUES ((uintptr_t)&(var) & (sizeof(void *) - 1)) == 0, msg) /* - * If we have already panic'd and this is the thread that called - * panic(), then don't block on any mutexes but silently succeed. - * Otherwise, the kernel will deadlock since the scheduler isn't - * going to run the thread that holds the lock we need. - */ -#define IS_PANIC_THREAD() \ - (panicstr != NULL && (curthread->td_flags & TDF_INPANIC) != 0) - -/* * XXX the hints declarations are even more misplaced than most declarations * in this file, since they are needed in one file (per arch) and only used * in two files.