Changeset 7f341820 in mainline for kernel/arch/mips32/include/atomic.h


Ignore:
Timestamp:
2009-02-17T14:09:31Z (16 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
30e2bba
Parents:
85156d3
Message:

mips32: basic SMP support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/mips32/include/atomic.h

    r85156d3 r7f341820  
    3636#define KERN_mips32_ATOMIC_H_
    3737
    38 #define atomic_inc(x)   ((void) atomic_add(x, 1))
    39 #define atomic_dec(x)   ((void) atomic_add(x, -1))
     38#define atomic_inc(x)  ((void) atomic_add(x, 1))
     39#define atomic_dec(x)  ((void) atomic_add(x, -1))
    4040
    41 #define atomic_postinc(x) (atomic_add(x, 1) - 1)
    42 #define atomic_postdec(x) (atomic_add(x, -1) + 1)
     41#define atomic_postinc(x)  (atomic_add(x, 1) - 1)
     42#define atomic_postdec(x)  (atomic_add(x, -1) + 1)
    4343
    44 #define atomic_preinc(x) atomic_add(x, 1)
    45 #define atomic_predec(x) atomic_add(x, -1)
     44#define atomic_preinc(x)  atomic_add(x, 1)
     45#define atomic_predec(x)  atomic_add(x, -1)
    4646
    4747/* Atomic addition of immediate value.
     
    5555{
    5656        long tmp, v;
    57 
     57       
    5858        asm volatile (
    5959                "1:\n"
    6060                "       ll %0, %1\n"
    61                 "       addu %0, %0, %3\n"      /* same as addi, but never traps on overflow */
    62                 "       move %2, %0\n"
     61                "       addu %0, %0, %3\n"  /* same as addi, but never traps on overflow */
     62                "       move %2, %0\n"
    6363                "       sc %0, %1\n"
    64                 "       beq %0, %4, 1b\n"       /* if the atomic operation failed, try again */
     64                "       beq %0, %4, 1b\n"   /* if the atomic operation failed, try again */
    6565                "       nop\n"
    6666                : "=&r" (tmp), "+m" (val->count), "=&r" (v)
    6767                : "r" (i), "i" (0)
    68                 );
     68        );
     69       
     70        return v;
     71}
    6972
     73static inline uint32_t test_and_set(atomic_t *val) {
     74        uint32_t tmp, v;
     75       
     76        asm volatile (
     77                "1:\n"
     78                "       ll %2, %1\n"
     79                "       bnez %2, 2f\n"
     80                "       li %0, %3\n"
     81                "       sc %0, %1\n"
     82                "       beqz %0, 1b\n"
     83                "2:\n"
     84                : "=&r" (tmp), "+m" (val->count), "=&r" (v)
     85                : "i" (1)
     86        );
     87       
    7088        return v;
    7189}
Note: See TracChangeset for help on using the changeset viewer.