Index: sys/kern/kern_mutex.c =================================================================== --- sys/kern/kern_mutex.c (revision 216290) +++ sys/kern/kern_mutex.c (working copy) @@ -501,7 +501,7 @@ _mtx_lock_spin(struct mtx *m, uintptr_t tid, int opts, const char *file, int line) { - int i = 0; + int i = 0, prtd = 1; #ifdef LOCK_PROFILING int contested = 0; uint64_t waittime = 0; @@ -511,19 +511,34 @@ CTR1(KTR_LOCK, "_mtx_lock_spin: %p spinning", m); lock_profile_obtain_lock_failed(&m->lock_object, &contested, &waittime); + if (m == &smp_ipi_mtx && rebooting) + printf("That1: %p\n", (void *)m->mtx_lock); while (!_mtx_obtain_lock(m, tid)) { /* Give interrupts a chance while we spin. */ spinlock_exit(); + if (m == &smp_ipi_mtx && rebooting) + printf("That2: %p\n", (void *)m->mtx_lock); while (m->mtx_lock != MTX_UNOWNED) { if (i++ < 10000000) { cpu_spinwait(); continue; } - if (i < 60000000 || kdb_active || panicstr != NULL) + if (i < 60000000 || kdb_active || panicstr != NULL) { + if (m == &smp_ipi_mtx && rebooting && prtd) + printf("That3: %p\n", + (void *)m->mtx_lock); + prtd = 0; + } DELAY(1); - else + } else { + if (m == &smp_ipi_mtx && rebooting && prtd) + printf("That4: %p\n", + (void *)m->mtx_lock); + prtd = 0; + } _mtx_lock_spin_failed(m); + } cpu_spinwait(); } spinlock_enter();