the R10000 needs an LL/SC Workaround. If not applied all R10k before rev 3.0 misbehave on atomic ops and rev 2.6 and lower (e.g. SGI IP28) die after very few seconds with a deadlock due to even more erratas. --- ports/sysdeps/mips/bits/atomic.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --- a/ports/sysdeps/mips/bits/atomic.h +++ b/ports/sysdeps/mips/bits/atomic.h @@ -74,7 +74,7 @@ "bne %0,%2,2f\n\t" \ "move %1,%3\n\t" \ "sc %1,%4\n\t" \ - "beqz %1,1b\n" \ + "beqzl %1,1b\n" \ acq "\n\t" \ ".set pop\n" \ "2:\n\t" \ @@ -98,7 +98,7 @@ "bne %0,%2,2f\n\t" \ "move %1,%3\n\t" \ "scd %1,%4\n\t" \ - "beqz %1,1b\n" \ + "beqzl %1,1b\n" \ acq "\n\t" \ ".set pop\n" \ "2:\n\t" \ @@ -192,7 +192,7 @@ "ll %0,%3\n\t" \ "move %1,%2\n\t" \ "sc %1,%3\n\t" \ - "beqz %1,1b\n" \ + "beqzl %1,1b\n" \ acq "\n\t" \ ".set pop\n" \ "2:\n\t" \ @@ -216,7 +216,7 @@ "lld %0,%3\n\t" \ "move %1,%2\n\t" \ "scd %1,%3\n\t" \ - "beqz %1,1b\n" \ + "beqzl %1,1b\n" \ acq "\n\t" \ ".set pop\n" \ "2:\n\t" \ @@ -251,7 +251,7 @@ "ll %0,%3\n\t" \ "addu %1,%0,%2\n\t" \ "sc %1,%3\n\t" \ - "beqz %1,1b\n" \ + "beqzl %1,1b\n" \ acq "\n\t" \ ".set pop\n" \ "2:\n\t" \ @@ -275,7 +275,7 @@ "lld %0,%3\n\t" \ "daddu %1,%0,%2\n\t" \ "scd %1,%3\n\t" \ - "beqz %1,1b\n" \ + "beqzl %1,1b\n" \ acq "\n\t" \ ".set pop\n" \ "2:\n\t" \