Home | History | Annotate | Download | only in kern

Lines Matching refs:ld

149 	const lockdebug_t *ld = n;
150 const uintptr_t a = (uintptr_t)ld->ld_lock;
172 lockdebug_t *ld;
177 ld = rb_tree_find_node(&ld_rb_tree, (void *)(intptr_t)lock);
179 if (ld == NULL) {
182 __cpu_simple_lock(&ld->ld_spinlock);
184 return ld;
218 lockdebug_t *ld;
221 ld = lockdebug_lookup1(lock);
224 if (__predict_false(ld == NULL)) {
228 return ld;
240 lockdebug_t *ld;
250 ld = ld_prime;
251 for (i = 1, ld++; i < LD_BATCH; i++, ld++) {
252 __cpu_simple_lock_init(&ld->ld_spinlock);
253 TAILQ_INSERT_TAIL(&ld_free, ld, ld_chain);
254 TAILQ_INSERT_TAIL(&ld_all, ld, ld_achain);
271 lockdebug_t *ld;
281 if (__predict_false((ld = lockdebug_lookup1(lock)) != NULL)) {
283 lockdebug_abort1(func, line, ld, s, "already initialized",
309 if (__predict_false((ld = TAILQ_FIRST(&ld_free)) == NULL)) {
314 TAILQ_REMOVE(&ld_free, ld, ld_chain);
318 if (__predict_false(ld->ld_lock != NULL)) {
319 panic("%s,%zu: corrupt table ld %p", func, line, ld);
323 ld->ld_lock = lock;
324 ld->ld_lockops = lo;
325 ld->ld_locked = 0;
326 ld->ld_unlocked = 0;
327 ld->ld_lwp = NULL;
328 ld->ld_initaddr = initaddr;
329 ld->ld_flags = (lo->lo_type == LOCKOPS_SLEEP ? LD_SLEEPER : 0);
331 (void)rb_tree_insert_node(&ld_rb_tree, __UNVOLATILE(ld));
347 lockdebug_t *ld;
355 ld = lockdebug_lookup(func, line, lock,
357 if (__predict_false(ld == NULL)) {
360 "(ld_lock=%p)", func, line, lock, ld->ld_lock);
363 if (__predict_false((ld->ld_flags & LD_LOCKED) != 0 ||
364 ld->ld_shares != 0)) {
366 lockdebug_abort1(func, line, ld, s, "is locked or in use",
371 rb_tree_remove_node(&ld_rb_tree, __UNVOLATILE(ld));
373 ld->ld_lock = NULL;
374 TAILQ_INSERT_TAIL(&ld_free, ld, ld_chain);
376 __cpu_simple_unlock(&ld->ld_spinlock);
390 lockdebug_t *ld;
421 ld = block;
428 for (i = base; i < m; i++, ld++) {
429 __cpu_simple_lock_init(&ld->ld_spinlock);
430 TAILQ_INSERT_TAIL(&ld_free, ld, ld_chain);
431 TAILQ_INSERT_TAIL(&ld_all, ld, ld_achain);
452 lockdebug_t *ld;
463 if ((ld = lockdebug_lookup(func, line, lock, where)) == NULL) {
467 if ((ld->ld_flags & LD_LOCKED) != 0 || ld->ld_shares != 0) {
468 if ((ld->ld_flags & LD_SLEEPER) != 0) {
469 if (ld->ld_lwp == l)
471 } else if (ld->ld_cpu == (uint16_t)cpu_index(curcpu()))
475 if (__predict_false((ld->ld_flags & LD_SLEEPER) != 0)) {
476 lockdebug_abort1(func, line, ld, s,
483 ld->ld_shwant++;
485 ld->ld_exwant++;
487 lockdebug_abort1(func, line, ld, s, "locking against myself",
492 l->l_ld_wanted = ld;
494 __cpu_simple_unlock(&ld->ld_spinlock);
508 lockdebug_t *ld;
515 if ((ld = lockdebug_lookup(func, line, lock, where)) == NULL) {
521 ld->ld_locked = where;
522 ld->ld_shares++;
523 ld->ld_shwant--;
525 if (__predict_false((ld->ld_flags & LD_LOCKED) != 0)) {
526 lockdebug_abort1(func, line, ld, s, "already locked",
530 ld->ld_flags |= LD_LOCKED;
531 ld->ld_locked = where;
532 ld->ld_exwant--;
533 if ((ld->ld_flags & LD_SLEEPER) != 0) {
534 TAILQ_INSERT_TAIL(&l->l_ld_locks, ld, ld_chain);
537 ld, ld_chain);
540 ld->ld_cpu = (uint16_t)cpu_index(curcpu());
541 ld->ld_lwp = l;
542 __cpu_simple_unlock(&ld->ld_spinlock);
543 if (l->l_ld_wanted == ld) {
559 lockdebug_t *ld;
566 if ((ld = lockdebug_lookup(func, line, lock, where)) == NULL) {
572 lockdebug_abort1(func, line, ld, s,
576 if (__predict_false(ld->ld_shares == 0)) {
577 lockdebug_abort1(func, line, ld, s,
582 ld->ld_shares--;
583 if (ld->ld_lwp == l) {
584 ld->ld_unlocked = where;
585 ld->ld_lwp = NULL;
587 if (ld->ld_cpu == (uint16_t)cpu_index(curcpu()))
588 ld->ld_cpu = (uint16_t)-1;
590 if (__predict_false((ld->ld_flags & LD_LOCKED) == 0)) {
591 lockdebug_abort1(func, line, ld, s, "not locked", true);
595 if ((ld->ld_flags & LD_SLEEPER) != 0) {
596 if (__predict_false(ld->ld_lwp != curlwp)) {
597 lockdebug_abort1(func, line, ld, s,
601 TAILQ_REMOVE(&l->l_ld_locks, ld, ld_chain);
604 if (__predict_false(ld->ld_cpu != idx)) {
605 lockdebug_abort1(func, line, ld, s,
609 TAILQ_REMOVE(&curcpu()->ci_data.cpu_ld_locks, ld,
612 ld->ld_flags &= ~LD_LOCKED;
613 ld->ld_unlocked = where;
614 ld->ld_lwp = NULL;
616 __cpu_simple_unlock(&ld->ld_spinlock);
631 lockdebug_t *ld;
639 TAILQ_FOREACH(ld, &curcpu()->ci_data.cpu_ld_locks, ld_chain) {
640 if (ld->ld_lock == onelock) {
643 __cpu_simple_lock(&ld->ld_spinlock);
644 lockdebug_abort1(func, line, ld, s,
653 ld = TAILQ_FIRST(&l->l_ld_locks);
654 if (__predict_false(ld != NULL && ld->ld_lock != onelock)) {
655 __cpu_simple_lock(&ld->ld_spinlock);
656 lockdebug_abort1(func, line, ld, s, "sleep lock held", true);
661 TAILQ_FOREACH(ld, &ld_all, ld_achain) {
662 if (ld->ld_lock == onelock) {
665 if (ld->ld_lwp == l)
666 lockdebug_dump(l, ld, printf);
682 lockdebug_t *ld;
694 ld = (lockdebug_t *)rb_tree_find_node_geq(&ld_rb_tree, base);
695 if (ld != NULL) {
696 const uintptr_t lock = (uintptr_t)ld->ld_lock;
699 panic("%s,%zu: corrupt tree ld=%p, base=%p, sz=%zu",
700 func, line, ld, base, sz);
702 ld = NULL;
705 if (__predict_false(ld != NULL)) {
706 __cpu_simple_lock(&ld->ld_spinlock);
707 lockdebug_abort1(func, line, ld, s,
724 lockdebug_dump(lwp_t *l, lockdebug_t *ld, void (*pr)(const char *, ...)
727 int sleeper = (ld->ld_flags & LD_SLEEPER);
728 lockops_t *lo = ld->ld_lockops;
732 db_symstr(locksym, sizeof(locksym), (db_expr_t)(intptr_t)ld->ld_lock,
734 db_symstr(initsym, sizeof(initsym), (db_expr_t)ld->ld_initaddr,
736 db_symstr(lockedsym, sizeof(lockedsym), (db_expr_t)ld->ld_locked,
738 db_symstr(unlockedsym, sizeof(unlockedsym), (db_expr_t)ld->ld_unlocked,
742 (unsigned long)ld->ld_lock);
744 (unsigned long)ld->ld_initaddr);
746 (unsigned long)ld->ld_locked);
748 (unsigned long)ld->ld_unlocked);
761 db_read_bytes((db_addr_t)ld->ld_lockops, sizeof(los), (char *)lo);
770 (unsigned)ld->ld_shares, ((ld->ld_flags & LD_LOCKED) != 0),
771 (unsigned)ld->ld_shwant, (unsigned)ld->ld_exwant,
772 (unsigned)cpu_index(l->l_cpu), (unsigned)ld->ld_cpu,
773 (long)l, (long)ld->ld_lwp,
774 ((ld->ld_flags & LD_LOCKED) ? '*' : ' '),
776 ((ld->ld_flags & LD_LOCKED) ? ' ' : '*'),
781 (*lo->lo_dump)(ld->ld_lock, pr);
784 turnstile_print(ld->ld_lock, pr);
796 lockdebug_abort1(const char *func, size_t line, lockdebug_t *ld, int s,
806 __cpu_simple_unlock(&ld->ld_spinlock);
811 printf("%s error: %s,%zu: %s\n\n", ld->ld_lockops->lo_name,
813 lockdebug_dump(curlwp, ld, printf);
814 __cpu_simple_unlock(&ld->ld_spinlock);
819 ld->ld_lockops->lo_name, func, line, msg);
836 lockdebug_t *ld, lds;
838 TAILQ_FOREACH(ld, &ld_all, ld_achain) {
839 db_read_bytes((db_addr_t)ld, sizeof(lds), __UNVOLATILE(&lds));
840 ld = &lds;
841 if (ld->ld_lock == NULL)
843 if (addr == NULL || ld->ld_lock == addr) {
844 lockdebug_dump(curlwp, ld, pr);
868 lockdebug_show_one(lwp_t *l, lockdebug_t *ld, int i,
874 db_symstr(sym, sizeof(sym), (db_expr_t)ld->ld_initaddr, DB_STGY_PROC);
876 snprintf(sym, sizeof(sym), "%p", (void *)ld->ld_initaddr);
879 lockdebug_dump(l, ld, pr);
899 lockdebug_t *ld;
910 TAILQ_FOREACH(ld, &l->l_ld_locks, ld_chain) {
912 lockdebug_show_one(l, ld, i++, pr);
937 lockdebug_t *ld;
946 TAILQ_FOREACH(ld, &ci->ci_data.cpu_ld_locks, ld_chain) {
949 lockdebug_show_one(ci->ci_curlwp, ld, i++, pr);
953 lockdebug_show_one(curlwp, ld, i++, pr);
989 lockdebug_t *ld;
998 ld = _ld;
999 if (ld->ld_lock == NULL) {
1003 if (ld->ld_lockops->lo_name[0] == 'M') {
1004 if (ld->ld_lockops->lo_type == LOCKOPS_SLEEP)
1010 if (ld->ld_lockops->lo_name[0] == 'R') {
1055 lockdebug_t *ld;
1059 if ((ld = lockdebug_lookup(func, line, lock,
1061 lockdebug_abort1(func, line, ld, s, msg, true);