Morten Larsen wrote:
>
> > As far as I can tell the branch optimization fixes in 2.6.21 introduced
> > a bug in atomic_sub_if_positive that causes it to return even when the
> > sc instruction fails. The result is that e.g. down_trylock becomes
> > unreliable as the semaphore counter is not always decremented.
>
> Previous patch was garbled by Outlook - this one should be clean:
>
> --- a/include/asm-mips/atomic.h 2008-06-25 22:38:43.159739000 -0700
> +++ b/include/asm-mips/atomic.h 2008-06-25 22:39:07.552065000 -0700
> @@ -292,10 +292,10 @@ static __inline__ int atomic_sub_if_posi
> " beqz %0, 2f \n"
> " subu %0, %1, %3 \n"
> " .set reorder \n"
> - "1: \n"
> " .subsection 2 \n"
> "2: b 1b \n"
> " .previous \n"
> + "1: \n"
AFAICS this change should make no difference to the generated code. I
suspect you assembler handles .subsection incorrectly. Can you provide
a disassembled exapmle which gets altered by this patch? Also, please
tell us the exact version of the assembler you use.
Thiemo
|