Changeset e4ddfa8 in mainline for arch/ppc32/include/atomic.h


Ignore:
Timestamp:
2006-03-14T19:06:16Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1065603e
Parents:
edc89bd
Message:

ppc32: initial stack, memory barriers, atomic operations, stack offset fix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/include/atomic.h

    redc89bd re4ddfa8  
    3434typedef struct { volatile __u32 count; } atomic_t;
    3535
    36 /*
    37  * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec.
    38  * WARNING: the following functions cause the code to be preemption-unsafe !!!
    39  */
     36static inline void atomic_inc(atomic_t *val) {
     37        __u32 tmp;
    4038
    41 static inline void atomic_inc(atomic_t *val) {
    42         val->count++;
     39        asm __volatile__ (
     40                "1:\n"
     41                "lwarx %0, 0, %2\n"
     42                "addic %0, %0, 1\n"
     43                "stwcx. %0, 0, %2\n"
     44                "bne- 1b"
     45                : "=&r" (tmp), "=m" (val->count)
     46                : "r" (&val->count), "m" (val->count)
     47                : "cc");
    4348}
    4449
    4550static inline void atomic_dec(atomic_t *val) {
    46         val->count--;
     51        __u32 tmp;
     52
     53        asm __volatile__(
     54                "1:\n"
     55                "lwarx %0, 0, %2\n"
     56                "addic %0, %0, -1\n"
     57                "stwcx. %0, 0, %2\n"
     58                "bne- 1b"
     59                : "=&r" (tmp), "=m" (val->count)
     60                : "r" (&val->count), "m" (val->count)
     61                : "cc");
    4762}
    4863
Note: See TracChangeset for help on using the changeset viewer.