I've made some progress with this issue.
This is what happens:
start_other_cpus() is called, to start the other cpus (cores) in the system.
cpu1 runs mp_startup(). In mp_startup() we're calling init_cpu_info()
which tries to print something to the systems console/log using a
cmn_err(CE_NOTE, ...) call. cmn_err() -> cprintf() -> log_sendmsg().
In log_sendmsg() we have this piece of code:
606 log_enter();
607
608 lc->ltime = lbolt;
609 lc->ttime = gethrestime_sec();
Using prom_printf() calls, I've found out that we're stuck inside the
gethrestime_sec() call, with the log_rwlock held (log_enter()).
The attempt to print "cpu 1 failed to start" from cpu0 fails,
because the log_rwlock is held.
So the root cause is that we're stuck in gethrestime_sec() somehow.
gethrestime_sec() calls gethrestime() -> *gethrestimef() -> pc_gethrestime().
http://cvs.opensolaris.org/source/xref/on/usr/src/uts/i86pc/os/machdep.c#pc_gethrestime
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code