On Wednesday, August 08, 2012 8:26:56 pm mnln.l4 wrote: > I finally have some time to take a closer look at this issue. Yes, it > is caused by SMI#. DragonflyBSD has tried to fix the similar problem > (see http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/bb467734fc407e2c2de7f8314c63dd9f708f4df4) > > But Windows and Linux don't cause such problem on my machine. > > I compared MP initialization code between FreeBSD, Linux and NetBSD. I > believe the problem is FreeBSD doesn't wait for 10ms between IPI_INIT > assert and IPI_INIT deassert (though FreeBSD waits for 10ms after > IPI_INIT deassert). After inserting 10ms wait time, the issue is > solved. BTW, Intel's MP spec 1.4 doesn't explain very well either.
I think the confusion is that we have an extra IPI step (deassert INIT IPI) that we did have the wait after. Your patch is correct and I've committed it (well, a variant, I put the DELAY() after the lapic_ipi_wait()). I think we should actually just remove the deassert INIT IPI entirely as I can find no reference in either the MP spec or otherwise that says that it should be used. It is also ignored on all modern processors. -- John Baldwin _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-stable To unsubscribe, send any mail to "[email protected]"
