--- include/asm-ppc/semaphore.h.alt Mon May 24 15:16:03 1999 +++ include/asm-ppc/semaphore.h Mon May 24 17:16:08 1999 @@ -9,6 +9,7 @@ */ #include +#include struct semaphore { atomic_t count; @@ -16,17 +17,42 @@ wait_queue_head_t wait; }; -#define sema_init(sem, val) atomic_set(&((sem)->count), (val)) - -#define MUTEX ((struct semaphore) \ - { ATOMIC_INIT(1), ATOMIC_INIT(0), NULL }) -#define MUTEX_LOCKED ((struct semaphore) \ - { ATOMIC_INIT(0), ATOMIC_INIT(0), NULL }) +#define __SEM_DEBUG_INIT(name) extern void __down(struct semaphore * sem); extern int __down_interruptible(struct semaphore * sem); extern int __down_trylock(struct semaphore * sem); extern void __up(struct semaphore * sem); + +#define __SEMAPHORE_INITIALIZER(name,count) \ +{ ATOMIC_INIT(count), 0,__WAITQUEUE_HEAD_INITIALIZER((name).wait) \ + __SEM_DEBUG_INIT(name) } + +#define __MUTEX_INITIALIZER(name) \ + __SEMAPHORE_INITIALIZER(name,1) + +#define __DECLARE_SEMAPHORE_GENERIC(name,count) \ + struct semaphore name = __SEMAPHORE_INITIALIZER(name,count) + +#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1) +#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0) + +extern inline void sema_init (struct semaphore *sem, int val) +{ +atomic_set(&sem->count, val); +atomic_set(&sem->waking, 0); +init_waitqueue_head(&sem->wait); +} + +static inline void init_MUTEX (struct semaphore *sem) +{ + sema_init(sem, 1); +} + +static inline void init_MUTEX_LOCKED (struct semaphore *sem) +{ + sema_init(sem, 0); +} extern inline void down(struct semaphore * sem) { --- kernel/fork.c.alt Mon May 24 15:01:26 1999 +++ kernel/fork.c Mon May 24 17:10:47 1999 @@ -21,6 +21,7 @@ #include #include #include +#include /* The idle tasks do not count.. */ int nr_tasks=0;