Changeset 59e07c91 in mainline


Ignore:
Timestamp:
2005-11-10T13:56:26Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0172eba
Parents:
13fe013
Message:

Define atomic_t type.

Files:
12 edited

Legend:

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

    r13fe013 r59e07c91  
    3232#include <arch/types.h>
    3333
    34 static inline void atomic_inc(volatile int *val) {
     34typedef volatile __u32 atomic_t;
     35
     36static inline void atomic_inc(atomic_t *val) {
    3537#ifdef CONFIG_SMP
    3638        __asm__ volatile ("lock incl %0\n" : "=m" (*val));
     
    4042}
    4143
    42 static inline void atomic_dec(volatile int *val) {
     44static inline void atomic_dec(atomic_t *val) {
    4345#ifdef CONFIG_SMP
    4446        __asm__ volatile ("lock decl %0\n" : "=m" (*val));
  • arch/ia64/include/atomic.h

    r13fe013 r59e07c91  
    3030#define __ia64_ATOMIC_H__
    3131
    32 /*
    33  * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec.
    34  * WARNING: the following functions cause the code to be preemption-unsafe !!!
     32#include <arch/types.h>
     33
     34typedef volatile __u64 atomic_t;
     35
     36static inline atomic_t atomic_add(atomic_t *val, int imm)
     37{
     38        atomic_t v;
     39
     40/*     
     41 *      __asm__ volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), "=m" (val) : "i" (imm));
    3542 */
    36 
    37 static inline atomic_inc(volatile int *val) {
    38         *val++;
     43        *val += imm;
     44       
     45        return v;
    3946}
    4047
    41 static inline atomic_dec(volatile int *val) {
    42         *val--;
    43 }
     48static inline atomic_t atomic_inc(atomic_t *val) { return atomic_add(val, 1); }
     49static inline atomic_t atomic_dec(atomic_t *val) { return atomic_add(val, -1); }
    4450
    4551#endif
  • arch/mips32/include/atomic.h

    r13fe013 r59e07c91  
    3030#define __mips32_ATOMIC_H__
    3131
     32#include <arch/types.h>
     33
    3234#define atomic_inc(x)   (a_add(x,1))
    3335#define atomic_dec(x)   (a_sub(x,1))
     36
     37typedef volatile __u32 atomic_t;
    3438
    3539/*
     
    4246 * the same location, the SC (store-conditional) instruction fails.
    4347 */
    44 static inline int a_add( volatile int *val, int i)
     48static inline atomic_t a_add(atomic_t *val, int i)
    4549{
    46         int tmp, tmp2;
     50        atomic_t tmp, tmp2;
    4751
    4852        asm volatile (
     
    7074 * Implemented in the same manner as a_add, except we substract the value.
    7175 */
    72 static inline int a_sub( volatile int *val, int i)
     76static inline atomic_t a_sub(atomic_t *val, int i)
    7377
    7478{
    75         int tmp, tmp2;
     79        atomic_t tmp, tmp2;
    7680
    7781        asm volatile (
  • arch/ppc32/include/atomic.h

    r13fe013 r59e07c91  
    3030#define __ppc32_ATOMIC_H__
    3131
     32#include <arch/types.h>
     33
     34typedef volatile __u32 atomic_t;
     35
    3236/*
    3337 * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec.
     
    3539 */
    3640
    37 static inline atomic_inc(volatile int *val) {
     41static inline void atomic_inc(atomic_t *val) {
    3842        *val++;
    3943}
    4044
    41 static inline atomic_dec(volatile int *val) {
     45static inline void atomic_dec(atomic_t *val) {
    4246        *val--;
    4347}
  • arch/sparc64/include/atomic.h

    r13fe013 r59e07c91  
    3030#define __sparc64_ATOMIC_H__
    3131
     32#include <arch/types.h>
     33
     34typedef volatile __u64 atomic_t;
     35
    3236/*
    3337 * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec.
     
    3539 */
    3640
    37 static inline atomic_inc(volatile int *val) {
     41static inline void atomic_inc(atomic_t *val) {
    3842        *val++;
    3943}
    4044
    41 static inline atomic_dec(volatile int *val) {
     45static inline void atomic_dec(atomic_t *val) {
    4246        *val--;
    4347}
  • generic/include/proc/scheduler.h

    r13fe013 r59e07c91  
    3333#include <time/clock.h>         /* HZ */
    3434#include <typedefs.h>
     35#include <arch/atomic.h>
    3536#include <list.h>
    3637
     
    4445};
    4546
    46 extern volatile count_t nrdy;
     47extern atomic_t nrdy;
    4748extern void scheduler_init(void);
    4849
  • generic/src/proc/scheduler.c

    r13fe013 r59e07c91  
    4949#include <debug.h>
    5050
    51 volatile count_t nrdy;
     51atomic_t nrdy;
    5252
    5353
     
    182182                spinlock_unlock(&CPU->lock);
    183183
    184                 atomic_dec((int *) &nrdy);
     184                atomic_dec(&nrdy);
    185185                r->n--;
    186186
     
    558558                                        spinlock_unlock(&cpu->lock);
    559559
    560                                         atomic_dec((int *)&nrdy);
     560                                        atomic_dec(&nrdy);
    561561
    562562                                        r->n--;
  • generic/src/proc/thread.c

    r13fe013 r59e07c91  
    137137        spinlock_unlock(&r->lock);
    138138
    139         atomic_inc((int *) &nrdy);
     139        atomic_inc(&nrdy);
    140140        avg = nrdy / config.cpu_active;
    141141
  • test/synch/rwlock4/test.c

    r13fe013 r59e07c91  
    5050static waitq_t can_start;
    5151
    52 __u32 seed = 0xdeadbeaf;
     52__u32 seed = 0xdeadbeef;
    5353
    5454static __u32 random(__u32 max);
  • test/synch/rwlock5/test.c

    r13fe013 r59e07c91  
    4242
    4343static waitq_t can_start;
    44 static volatile int items_read;
    45 static volatile int items_written;
     44static atomic_t items_read;
     45static atomic_t items_written;
    4646
    4747static void writer(void *arg);
  • test/synch/semaphore1/test.c

    r13fe013 r59e07c91  
    4343
    4444static waitq_t can_start;
    45 static volatile int items_produced;
    46 static volatile int items_consumed;
     45static atomic_t items_produced;
     46static atomic_t items_consumed;
    4747
    4848static void consumer(void *arg);
  • test/synch/semaphore2/test.c

    r13fe013 r59e07c91  
    4545static waitq_t can_start;
    4646
    47 __u32 seed = 0xdeadbeaf;
     47__u32 seed = 0xdeadbeef;
    4848
    4949static __u32 random(__u32 max);
Note: See TracChangeset for help on using the changeset viewer.