Deleted Added
full compact
kern_lock.c (164212) kern_lock.c (164246)
1/*-
2 * Copyright (c) 1995
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Copyright (C) 1997
6 * John S. Dyson. All rights reserved.
7 *
8 * This code contains ideas from software contributed to Berkeley by

--- 27 unchanged lines hidden (view full) ---

36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 *
40 * @(#)kern_lock.c 8.18 (Berkeley) 5/21/95
41 */
42
43#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1995
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Copyright (C) 1997
6 * John S. Dyson. All rights reserved.
7 *
8 * This code contains ideas from software contributed to Berkeley by

--- 27 unchanged lines hidden (view full) ---

36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 *
40 * @(#)kern_lock.c 8.18 (Berkeley) 5/21/95
41 */
42
43#include <sys/cdefs.h>
44__FBSDID("$FreeBSD: head/sys/kern/kern_lock.c 164212 2006-11-12 03:30:01Z kmacy $");
44__FBSDID("$FreeBSD: head/sys/kern/kern_lock.c 164246 2006-11-13 05:41:46Z kmacy $");
45
46#include "opt_ddb.h"
47#include "opt_global.h"
48
49#include <sys/param.h>
50#include <sys/kdb.h>
51#include <sys/kernel.h>
52#include <sys/ktr.h>

--- 4 unchanged lines hidden (view full) ---

57#include <sys/systm.h>
58#include <sys/lock_profile.h>
59#ifdef DEBUG_LOCKS
60#include <sys/stack.h>
61#endif
62
63#ifdef DDB
64#include <ddb/ddb.h>
45
46#include "opt_ddb.h"
47#include "opt_global.h"
48
49#include <sys/param.h>
50#include <sys/kdb.h>
51#include <sys/kernel.h>
52#include <sys/ktr.h>

--- 4 unchanged lines hidden (view full) ---

57#include <sys/systm.h>
58#include <sys/lock_profile.h>
59#ifdef DEBUG_LOCKS
60#include <sys/stack.h>
61#endif
62
63#ifdef DDB
64#include <ddb/ddb.h>
65static void db_show_lockmgr(struct lock_object *lock);
65#endif
66
66#endif
67
68
69struct lock_class lock_class_lockmgr = {
70 "lockmgr",
71 LC_SLEEPLOCK | LC_SLEEPABLE | LC_RECURSABLE | LC_UPGRADABLE,
72#ifdef DDB
73 db_show_lockmgr
74#endif
75};
76
77
67/*
68 * Locking primitives implementation.
69 * Locks provide shared/exclusive sychronization.
70 */
71
72#define COUNT(td, x) if ((td)) (td)->td_locks += (x)
73#define LK_ALL (LK_HAVE_EXCL | LK_WANT_EXCL | LK_WANT_UPGRADE | \
74 LK_SHARE_NONZERO | LK_WAIT_NONZERO)

--- 86 unchanged lines hidden (view full) ---

161
162 error = 0;
163 if (td == NULL)
164 thr = LK_KERNPROC;
165 else
166 thr = td;
167
168 lock_profile_waitstart(&waitstart);
78/*
79 * Locking primitives implementation.
80 * Locks provide shared/exclusive sychronization.
81 */
82
83#define COUNT(td, x) if ((td)) (td)->td_locks += (x)
84#define LK_ALL (LK_HAVE_EXCL | LK_WANT_EXCL | LK_WANT_UPGRADE | \
85 LK_SHARE_NONZERO | LK_WAIT_NONZERO)

--- 86 unchanged lines hidden (view full) ---

172
173 error = 0;
174 if (td == NULL)
175 thr = LK_KERNPROC;
176 else
177 thr = td;
178
179 lock_profile_waitstart(&waitstart);
169
170 lkp->lk_object.lo_type = "lockmgr";
171 if ((flags & LK_INTERNAL) == 0)
172 mtx_lock(lkp->lk_interlock);
173 CTR6(KTR_LOCK,
174 "lockmgr(): lkp == %p (lk_wmesg == \"%s\"), owner == %p, exclusivecount == %d, flags == 0x%x, "
175 "td == %p", lkp, lkp->lk_wmesg, lkp->lk_lockholder,
176 lkp->lk_exclusivecount, flags, td);
177#ifdef DEBUG_LOCKS
178 {

--- 339 unchanged lines hidden (view full) ---

518 lkp->lk_prio = prio;
519 lkp->lk_wmesg = wmesg;
520 lkp->lk_timo = timo;
521 lkp->lk_lockholder = LK_NOPROC;
522 lkp->lk_newlock = NULL;
523#ifdef DEBUG_LOCKS
524 stack_zero(&lkp->lk_stack);
525#endif
180 if ((flags & LK_INTERNAL) == 0)
181 mtx_lock(lkp->lk_interlock);
182 CTR6(KTR_LOCK,
183 "lockmgr(): lkp == %p (lk_wmesg == \"%s\"), owner == %p, exclusivecount == %d, flags == 0x%x, "
184 "td == %p", lkp, lkp->lk_wmesg, lkp->lk_lockholder,
185 lkp->lk_exclusivecount, flags, td);
186#ifdef DEBUG_LOCKS
187 {

--- 339 unchanged lines hidden (view full) ---

527 lkp->lk_prio = prio;
528 lkp->lk_wmesg = wmesg;
529 lkp->lk_timo = timo;
530 lkp->lk_lockholder = LK_NOPROC;
531 lkp->lk_newlock = NULL;
532#ifdef DEBUG_LOCKS
533 stack_zero(&lkp->lk_stack);
534#endif
526 lock_profile_object_init(&lkp->lk_object, wmesg);
535 lock_profile_object_init(&lkp->lk_object, &lock_class_lockmgr, wmesg);
527}
528
529/*
530 * Destroy a lock.
531 */
532void
533lockdestroy(lkp)
534 struct lock *lkp;

--- 108 unchanged lines hidden (view full) ---

643 *ownerp = NULL;
644 } else {
645 db_printf("EXCL (count %d)\n", lkp->lk_exclusivecount);
646 *ownerp = lkp->lk_lockholder;
647 }
648 return (1);
649}
650
536}
537
538/*
539 * Destroy a lock.
540 */
541void
542lockdestroy(lkp)
543 struct lock *lkp;

--- 108 unchanged lines hidden (view full) ---

652 *ownerp = NULL;
653 } else {
654 db_printf("EXCL (count %d)\n", lkp->lk_exclusivecount);
655 *ownerp = lkp->lk_lockholder;
656 }
657 return (1);
658}
659
651DB_SHOW_COMMAND(lockmgr, db_show_lockmgr)
660void
661db_show_lockmgr(struct lock_object *lock)
652{
653 struct thread *td;
654 struct lock *lkp;
655
662{
663 struct thread *td;
664 struct lock *lkp;
665
656 if (!have_addr)
657 return;
658 lkp = (struct lock *)addr;
666 lkp = (struct lock *)lock;
659
660 db_printf("lock type: %s\n", lkp->lk_wmesg);
661 db_printf("state: ");
662 if (lkp->lk_sharecount)
663 db_printf("SHARED (count %d)\n", lkp->lk_sharecount);
664 else if (lkp->lk_flags & LK_HAVE_EXCL) {
665 td = lkp->lk_lockholder;
666 db_printf("EXCL (count %d) %p ", lkp->lk_exclusivecount, td);
667 db_printf("(tid %d, pid %d, \"%s\")\n", td->td_tid,
668 td->td_proc->p_pid, td->td_proc->p_comm);
669 } else
670 db_printf("UNLOCKED\n");
671 if (lkp->lk_waitcount > 0)
672 db_printf("waiters: %d\n", lkp->lk_waitcount);
673}
674#endif
667
668 db_printf("lock type: %s\n", lkp->lk_wmesg);
669 db_printf("state: ");
670 if (lkp->lk_sharecount)
671 db_printf("SHARED (count %d)\n", lkp->lk_sharecount);
672 else if (lkp->lk_flags & LK_HAVE_EXCL) {
673 td = lkp->lk_lockholder;
674 db_printf("EXCL (count %d) %p ", lkp->lk_exclusivecount, td);
675 db_printf("(tid %d, pid %d, \"%s\")\n", td->td_tid,
676 td->td_proc->p_pid, td->td_proc->p_comm);
677 } else
678 db_printf("UNLOCKED\n");
679 if (lkp->lk_waitcount > 0)
680 db_printf("waiters: %d\n", lkp->lk_waitcount);
681}
682#endif