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

Reply via email to