On Tue, Jan 15, 2008 at 12:27:19PM +0100, Florian Lohoff wrote: > Simple testcase for me is: now even simpler: ---------------------------------------------------------------------- void spin(void *a0) { while (1) { asm volatile( " .set mips3 \n" " sync \n" "1: ll $5, 0($4) \n" " sc $3, 0($4) \n" " beqz $3, 1b \n" " .word 0x7c03e83b \n" /* rdhwr */ " lw $3, 0($4) \n" " nop \n" ); } } int main() { int a; spin(&a); } ---------------------------------------------------------------------- this kills my IP28 after a few seconds. If I drop rdhwr or sync the machine hasn't locked up after running for several minutes. Looks like we are hiting a strange condition. This sort of code could be found in glibc 2.7 all over the place... Thomas. PS: Using rdhwr_noopt doesn't make a difference... -- Crap can work. Given enough thrust pigs will fly, but it's not necessary a good idea. [ RFC1925, 2.3 ]