| ripped from Debian |
| |
| 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(-) |
| |
| diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/mips/bits/atomic.h glibc-2.10.1/glibc-ports-2.10.1/sysdeps/mips/bits/atomic.h |
| --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/mips/bits/atomic.h 2009-05-16 10:36:20.000000000 +0200 |
| +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/mips/bits/atomic.h 2009-11-13 00:51:34.000000000 +0100 |
| @@ -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" \ |
| diff -durN glibc-2.10.1.orig/ports/sysdeps/mips/bits/atomic.h glibc-2.10.1/ports/sysdeps/mips/bits/atomic.h |