1 /* splock.S: Spinlock primitives too large to inline.
3 * Copyright (C) 2004 David S. Miller (davem@redhat.com)
10 _raw_spin_lock: /* %o0 = lock_ptr */
13 membar #StoreLoad | #StoreStore
21 .globl _raw_spin_lock_flags
22 _raw_spin_lock_flags: /* %o0 = lock_ptr, %o1 = irq_flags */
25 membar #StoreLoad | #StoreStore
29 2: rdpr %pil, %g2 ! Save PIL
30 wrpr %o1, %pil ! Set previous PIL
31 3: ldub [%o0], %g7 ! Spin on lock set
34 ba,pt %xcc, 1b ! Retry lock acquire
35 wrpr %g2, %pil ! Restore PIL