Messages in this thread |  | | Date | Thu, 11 Oct 2001 11:28:10 -0700 | From | Richard Henderson <> | Subject | Re: [patch 2.4.11-pre5] atomic_dec_and_lock() for alpha |
| |
On Tue, Oct 09, 2001 at 02:30:13PM +0400, Ivan Kokshaysky wrote: > OK. I prefer the latter - rewriting in assembly won't allow DEBUG_SPINLOCK > stuff in this function. OTOH, moving the return outside an asm statement > adds only one instruction - conditional branch that falls through in the > fast path.
Hmm. What about a mixture:
asm (".text \n\ .global atomic_dec_and_lock \n\ .ent atomic_dec_and_lock \n\ atomic_dec_and_lock: \n\ .prologue 0 \n\ 1: ldl_l $1, 0($16) \n\ subl $1, 1, $1 \n\ beq 2f \n\ stl_c $1, 0($16) \n\ beq $1, 3f \n\ mb \n\ ret \n\ .align 4 \n\ 3: br 1b \n\ 2: lda $27, atomic_dec_and_lock_1");
/* FALLTHRU */ static int atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock) { /* Slow path */ spin_lock(lock); if (atomic_dec_and_test(atomic)) return 1; spin_unlock(lock); return 0; }
r~ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |