OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [alpha/] [lib/] [dec_and_lock.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * arch/alpha/lib/dec_and_lock.c
3
 *
4
 * ll/sc version of atomic_dec_and_lock()
5
 *
6
 */
7
 
8
#include <linux/spinlock.h>
9
#include <asm/atomic.h>
10
 
11
  asm (".text                                   \n\
12
        .global atomic_dec_and_lock             \n\
13
        .ent atomic_dec_and_lock                \n\
14
        .align  4                               \n\
15
atomic_dec_and_lock:                            \n\
16
        .prologue 0                             \n\
17
1:      ldl_l   $1, 0($16)                      \n\
18
        subl    $1, 1, $1                       \n\
19
        beq     $1, 2f                          \n\
20
        stl_c   $1, 0($16)                      \n\
21
        beq     $1, 4f                          \n\
22
        mb                                      \n\
23
        clr     $0                              \n\
24
        ret                                     \n\
25
2:      br      $29, 3f                         \n\
26
3:      ldgp    $29, 0($29)                     \n\
27
        br      $atomic_dec_and_lock_1..ng      \n\
28
        .subsection 2                           \n\
29
4:      br      1b                              \n\
30
        .previous                               \n\
31
        .end atomic_dec_and_lock");
32
 
33
static int __attribute__((unused))
34
atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock)
35
{
36
        /* Slow path */
37
        spin_lock(lock);
38
        if (atomic_dec_and_test(atomic))
39
                return 1;
40
        spin_unlock(lock);
41
        return 0;
42
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.