PowerPC: Fix build due missing lll_robust_trylock

Commit 887865f remove the lll_robust_trylock definition on all
architectures, however for powerpc both __lll_trylock and
__lll_cond_trylock were based on lll_robust_trylock definition.
This patch restore it with a different name.
This commit is contained in:
Adhemerval Zanella 2014-07-10 16:42:51 -05:00
parent 6a42be57e8
commit bc1da1765e
2 changed files with 24 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2014-07-10 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h (__lll_base_trylock):
New define.
(__lll_trylock): Use __lll_base_trylock.
(__lll_cond_trylock): Likewise.
2014-07-10 Roland McGrath <roland@hack.frob.com>
* nptl/pthread_create.c (start_thread): Use atomic_or and

View File

@ -190,13 +190,28 @@
# endif
#endif
/* Set *futex to ID if it is 0, atomically. Returns the old value */
#define __lll_base_trylock(futex, id) \
({ int __val; \
__asm __volatile ("1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
" cmpwi 0,%0,0\n" \
" bne 2f\n" \
" stwcx. %3,0,%2\n" \
" bne- 1b\n" \
"2: " __lll_acq_instr \
: "=&r" (__val), "=m" (*futex) \
: "r" (futex), "r" (id), "m" (*futex) \
: "cr0", "memory"); \
__val; \
})
/* Set *futex to 1 if it is 0, atomically. Returns the old value */
#define __lll_trylock(futex) __lll_robust_trylock (futex, 1)
#define __lll_trylock(futex) __lll_base_trylock (futex, 1)
#define lll_trylock(lock) __lll_trylock (&(lock))
/* Set *futex to 2 if it is 0, atomically. Returns the old value */
#define __lll_cond_trylock(futex) __lll_robust_trylock (futex, 2)
#define __lll_cond_trylock(futex) __lll_base_trylock (futex, 2)
#define lll_cond_trylock(lock) __lll_cond_trylock (&(lock))