|
@@ -115,68 +115,6 @@ static __inline__ long local_sub_return(long i, local_t * l)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * local_sub_if_positive - conditionally subtract integer from atomic variable
|
|
|
- * @i: integer value to subtract
|
|
|
- * @l: pointer of type local_t
|
|
|
- *
|
|
|
- * Atomically test @l and subtract @i if @l is greater or equal than @i.
|
|
|
- * The function returns the old value of @l minus @i.
|
|
|
- */
|
|
|
-static __inline__ long local_sub_if_positive(long i, local_t * l)
|
|
|
-{
|
|
|
- unsigned long result;
|
|
|
-
|
|
|
- if (cpu_has_llsc && R10000_LLSC_WAR) {
|
|
|
- unsigned long temp;
|
|
|
-
|
|
|
- __asm__ __volatile__(
|
|
|
- " .set mips3 \n"
|
|
|
- "1:" __LL "%1, %2 # local_sub_if_positive\n"
|
|
|
- " dsubu %0, %1, %3 \n"
|
|
|
- " bltz %0, 1f \n"
|
|
|
- __SC "%0, %2 \n"
|
|
|
- " .set noreorder \n"
|
|
|
- " beqzl %0, 1b \n"
|
|
|
- " dsubu %0, %1, %3 \n"
|
|
|
- " .set reorder \n"
|
|
|
- "1: \n"
|
|
|
- " .set mips0 \n"
|
|
|
- : "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
|
|
|
- : "Ir" (i), "m" (l->a.counter)
|
|
|
- : "memory");
|
|
|
- } else if (cpu_has_llsc) {
|
|
|
- unsigned long temp;
|
|
|
-
|
|
|
- __asm__ __volatile__(
|
|
|
- " .set mips3 \n"
|
|
|
- "1:" __LL "%1, %2 # local_sub_if_positive\n"
|
|
|
- " dsubu %0, %1, %3 \n"
|
|
|
- " bltz %0, 1f \n"
|
|
|
- __SC "%0, %2 \n"
|
|
|
- " .set noreorder \n"
|
|
|
- " beqz %0, 1b \n"
|
|
|
- " dsubu %0, %1, %3 \n"
|
|
|
- " .set reorder \n"
|
|
|
- "1: \n"
|
|
|
- " .set mips0 \n"
|
|
|
- : "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
|
|
|
- : "Ir" (i), "m" (l->a.counter)
|
|
|
- : "memory");
|
|
|
- } else {
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- local_irq_save(flags);
|
|
|
- result = l->a.counter;
|
|
|
- result -= i;
|
|
|
- if (result >= 0)
|
|
|
- l->a.counter = result;
|
|
|
- local_irq_restore(flags);
|
|
|
- }
|
|
|
-
|
|
|
- return result;
|
|
|
-}
|
|
|
-
|
|
|
#define local_cmpxchg(l, o, n) \
|
|
|
((long)cmpxchg_local(&((l)->a.counter), (o), (n)))
|
|
|
#define local_xchg(l, n) (xchg_local(&((l)->a.counter),(n)))
|
|
@@ -234,12 +172,6 @@ static __inline__ long local_sub_if_positive(long i, local_t * l)
|
|
|
*/
|
|
|
#define local_dec_and_test(l) (local_sub_return(1, (l)) == 0)
|
|
|
|
|
|
-/*
|
|
|
- * local_dec_if_positive - decrement by 1 if old value positive
|
|
|
- * @l: pointer of type local_t
|
|
|
- */
|
|
|
-#define local_dec_if_positive(l) local_sub_if_positive(1, l)
|
|
|
-
|
|
|
/*
|
|
|
* local_add_negative - add and test if negative
|
|
|
* @l: pointer of type local_t
|