diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2001-01-11 04:02:40 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2001-01-11 04:02:40 +0000 |
commit | e47f00743fc4776491344f2c618cc8dc2c23bcbc (patch) | |
tree | 13e03a113a82a184c51c19c209867cfd3a59b3b9 /include/asm-sparc | |
parent | b2ad5f821b1381492d792ca10b1eb7a107b48f14 (diff) |
Merge with Linux 2.4.0.
Diffstat (limited to 'include/asm-sparc')
-rw-r--r-- | include/asm-sparc/atomic.h | 2 | ||||
-rw-r--r-- | include/asm-sparc/contregs.h | 2 | ||||
-rw-r--r-- | include/asm-sparc/delay.h | 4 | ||||
-rw-r--r-- | include/asm-sparc/processor.h | 2 | ||||
-rw-r--r-- | include/asm-sparc/semaphore-helper.h | 169 | ||||
-rw-r--r-- | include/asm-sparc/semaphore.h | 30 |
6 files changed, 21 insertions, 188 deletions
diff --git a/include/asm-sparc/atomic.h b/include/asm-sparc/atomic.h index 4a55a8929..1e07b88f7 100644 --- a/include/asm-sparc/atomic.h +++ b/include/asm-sparc/atomic.h @@ -133,6 +133,8 @@ static __inline__ int atomic_sub_return(int i, atomic_t *v) #define atomic_inc(v) atomic_add(1,(v)) #define atomic_dec(v) atomic_sub(1,(v)) +#define atomic_add_negative(i, v) (atomic_add_return((i), (v)) < 0) + #endif /* !(__KERNEL__) */ #endif /* !(__ARCH_SPARC_ATOMIC__) */ diff --git a/include/asm-sparc/contregs.h b/include/asm-sparc/contregs.h index 3e4f5075e..0e05afe02 100644 --- a/include/asm-sparc/contregs.h +++ b/include/asm-sparc/contregs.h @@ -1,4 +1,4 @@ -/* $Id: contregs.h,v 1.7 1998/01/30 10:59:48 jj Exp $ */ +/* $Id: contregs.h,v 1.8 2000/12/28 22:49:11 davem Exp $ */ #ifndef _SPARC_CONTREGS_H #define _SPARC_CONTREGS_H diff --git a/include/asm-sparc/delay.h b/include/asm-sparc/delay.h index dcb477a6c..e3994705a 100644 --- a/include/asm-sparc/delay.h +++ b/include/asm-sparc/delay.h @@ -1,4 +1,4 @@ -/* $Id: delay.h,v 1.10 1997/11/07 18:24:30 mj Exp $ +/* $Id: delay.h,v 1.11 2001/01/01 01:46:15 davem Exp $ * delay.h: Linux delay routines on the Sparc. * * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu). @@ -7,7 +7,7 @@ #ifndef __SPARC_DELAY_H #define __SPARC_DELAY_H -extern unsigned long loops_per_sec; +extern unsigned long loops_per_jiffy; extern __inline__ void __delay(unsigned long loops) { diff --git a/include/asm-sparc/processor.h b/include/asm-sparc/processor.h index 2be6f36f0..092f1ca25 100644 --- a/include/asm-sparc/processor.h +++ b/include/asm-sparc/processor.h @@ -1,4 +1,4 @@ -/* $Id: processor.h,v 1.78 2000/11/30 08:37:31 anton Exp $ +/* $Id: processor.h,v 1.80 2000/12/31 10:05:43 davem Exp $ * include/asm-sparc/processor.h * * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu) diff --git a/include/asm-sparc/semaphore-helper.h b/include/asm-sparc/semaphore-helper.h deleted file mode 100644 index a4dd421be..000000000 --- a/include/asm-sparc/semaphore-helper.h +++ /dev/null @@ -1,169 +0,0 @@ -#ifndef _SPARC_SEMAPHORE_HELPER_H -#define _SPARC_SEMAPHORE_HELPER_H - -#include <linux/config.h> - -/* - * (barely) SMP- and interrupt-safe semaphore helper functions, sparc version. - * - * (C) Copyright 1999 David S. Miller (davem@redhat.com) - * (C) Copyright 1999 Jakub Jelinek (jj@ultra.linux.cz) - */ -#define wake_one_more(sem) atomic_inc(&(sem)->waking) -static __inline__ int waking_non_zero(struct semaphore *sem) -{ - int ret; - -#ifdef CONFIG_SMP - int tmp; - - __asm__ __volatile__(" - rd %%psr, %%g1 - or %%g1, %3, %0 - wr %0, 0x0, %%psr - nop; nop; nop; -1: ldstub [%2 + 3], %0 - tst %0 - bne 1b - ld [%2], %0 - andn %0, 0xff, %1 - subcc %0, 0x1ff, %0 - bl,a 1f - mov 0, %0 - mov %0, %1 - mov 1, %0 -1: st %1, [%2] - wr %%g1, 0x0, %%psr - nop; nop; nop\n" - : "=&r" (ret), "=&r" (tmp) - : "r" (&sem->waking), "i" (PSR_PIL) - : "g1", "memory", "cc"); -#else - __asm__ __volatile__(" - rd %%psr, %%g1 - or %%g1, %2, %0 - wr %0, 0x0, %%psr - nop; nop; nop; - ld [%1], %0 - subcc %0, 1, %0 - bl,a 1f - mov 0, %0 - st %0, [%1] - mov 1, %0 -1: wr %%g1, 0x0, %%psr - nop; nop; nop\n" - : "=&r" (ret) - : "r" (&sem->waking), "i" (PSR_PIL) - : "g1", "memory", "cc"); -#endif - return ret; -} - -static __inline__ int waking_non_zero_interruptible(struct semaphore *sem, - struct task_struct *tsk) -{ - int ret; - -#ifdef CONFIG_SMP - int tmp; - - __asm__ __volatile__(" - rd %%psr, %%g1 - or %%g1, %3, %0 - wr %0, 0x0, %%psr - nop; nop; nop; -1: ldstub [%2 + 3], %0 - tst %0 - bne 1b - ld [%2], %0 - andn %0, 0xff, %1 - subcc %0, 0x1ff, %0 - bl,a 1f - mov 0, %0 - mov %0, %1 - mov 1, %0 -1: st %1, [%2] - wr %%g1, 0x0, %%psr - nop; nop; nop\n" - : "=&r" (ret), "=&r" (tmp) - : "r" (&sem->waking), "i" (PSR_PIL) - : "g1", "memory", "cc"); -#else - __asm__ __volatile__(" - rd %%psr, %%g1 - or %%g1, %2, %0 - wr %0, 0x0, %%psr - nop; nop; nop; - ld [%1], %0 - subcc %0, 1, %0 - bl,a 1f - mov 0, %0 - st %0, [%1] - mov 1, %0 -1: wr %%g1, 0x0, %%psr - nop; nop; nop\n" - : "=&r" (ret) - : "r" (&sem->waking), "i" (PSR_PIL) - : "g1", "memory", "cc"); -#endif - if(ret == 0 && signal_pending(tsk)) { - atomic_inc(&sem->count); - ret = -EINTR; - } - return ret; -} - -static __inline__ int waking_non_zero_trylock(struct semaphore *sem) -{ - int ret; - -#ifdef CONFIG_SMP - int tmp; - - __asm__ __volatile__(" - rd %%psr, %%g1 - or %%g1, %3, %0 - wr %0, 0x0, %%psr - nop; nop; nop; -1: ldstub [%2 + 3], %0 - tst %0 - bne 1b - ld [%2], %0 - andn %0, 0xff, %1 - subcc %0, 0x1ff, %0 - bl,a 1f - mov 0, %0 - mov %0, %1 - mov 1, %0 -1: st %1, [%2] - wr %%g1, 0x0, %%psr - nop; nop; nop\n" - : "=&r" (ret), "=&r" (tmp) - : "r" (&sem->waking), "i" (PSR_PIL) - : "g1", "memory", "cc"); -#else - __asm__ __volatile__(" - rd %%psr, %%g1 - or %%g1, %2, %0 - wr %0, 0x0, %%psr - nop; nop; nop; - ld [%1], %0 - subcc %0, 1, %0 - bl,a 1f - mov 0, %0 - st %0, [%1] - mov 1, %0 -1: wr %%g1, 0x0, %%psr - nop; nop; nop\n" - : "=&r" (ret) - : "r" (&sem->waking), "i" (PSR_PIL) - : "g1", "memory", "cc"); -#endif - ret = !ret; - if(ret == 1) - atomic_inc(&sem->count); - return ret; -} - -#endif /* !(_SPARC_SEMAPHORE_HELPER_H) */ - diff --git a/include/asm-sparc/semaphore.h b/include/asm-sparc/semaphore.h index ec2471223..cee9745b6 100644 --- a/include/asm-sparc/semaphore.h +++ b/include/asm-sparc/semaphore.h @@ -10,7 +10,7 @@ struct semaphore { atomic_t count; - atomic_t waking; + int sleepers; wait_queue_head_t wait; #if WAITQUEUE_DEBUG long __magic; @@ -25,7 +25,7 @@ struct semaphore { #endif #define __SEMAPHORE_INITIALIZER(name,count) \ -{ ATOMIC_INIT(count), ATOMIC_INIT(0), __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ +{ ATOMIC_INIT(count), 0, __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ __SEM_DEBUG_INIT(name) } #define __MUTEX_INITIALIZER(name) \ @@ -37,10 +37,10 @@ struct semaphore { #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) +static inline void sema_init (struct semaphore *sem, int val) { atomic_set(&sem->count, val); - atomic_set(&sem->waking, 0); + sem->sleepers = 0; init_waitqueue_head(&sem->wait); #if WAITQUEUE_DEBUG sem->__magic = (long)&sem->__magic; @@ -62,7 +62,7 @@ extern int __down_interruptible(struct semaphore * sem); extern int __down_trylock(struct semaphore * sem); extern void __up(struct semaphore * sem); -extern inline void down(struct semaphore * sem) +static inline void down(struct semaphore * sem) { register atomic_t *ptr asm("g1"); register int increment asm("g2"); @@ -97,7 +97,7 @@ extern inline void down(struct semaphore * sem) : "g3", "g4", "g7", "memory", "cc"); } -extern inline int down_interruptible(struct semaphore * sem) +static inline int down_interruptible(struct semaphore * sem) { register atomic_t *ptr asm("g1"); register int increment asm("g2"); @@ -135,7 +135,7 @@ extern inline int down_interruptible(struct semaphore * sem) return increment; } -extern inline int down_trylock(struct semaphore * sem) +static inline int down_trylock(struct semaphore * sem) { register atomic_t *ptr asm("g1"); register int increment asm("g2"); @@ -173,7 +173,7 @@ extern inline int down_trylock(struct semaphore * sem) return increment; } -extern inline void up(struct semaphore * sem) +static inline void up(struct semaphore * sem) { register atomic_t *ptr asm("g1"); register int increment asm("g2"); @@ -262,7 +262,7 @@ struct rw_semaphore { #define DECLARE_RWSEM_READ_LOCKED(name) __DECLARE_RWSEM_GENERIC(name,RW_LOCK_BIAS-1) #define DECLARE_RWSEM_WRITE_LOCKED(name) __DECLARE_RWSEM_GENERIC(name,0) -extern inline void init_rwsem(struct rw_semaphore *sem) +static inline void init_rwsem(struct rw_semaphore *sem) { sem->count = RW_LOCK_BIAS; sem->lock = 0; @@ -282,7 +282,7 @@ extern void ___down_write(/* Special calling convention */ void); extern void ___up_read(/* Special calling convention */ void); extern void ___up_write(/* Special calling convention */ void); -extern inline void down_read(struct rw_semaphore *sem) +static inline void down_read(struct rw_semaphore *sem) { register atomic_t *ptr asm("g1"); @@ -308,7 +308,7 @@ extern inline void down_read(struct rw_semaphore *sem) #endif } -extern inline void down_write(struct rw_semaphore *sem) +static inline void down_write(struct rw_semaphore *sem) { register atomic_t *ptr asm("g1"); @@ -342,7 +342,7 @@ extern inline void down_write(struct rw_semaphore *sem) * case is when there was a writer waiting, and we've * bumped the count to 0: we must wake the writer up. */ -extern inline void __up_read(struct rw_semaphore *sem) +static inline void __up_read(struct rw_semaphore *sem) { register atomic_t *ptr asm("g1"); @@ -360,7 +360,7 @@ extern inline void __up_read(struct rw_semaphore *sem) /* releasing the writer is easy -- just release it and * wake up any sleepers. */ -extern inline void __up_write(struct rw_semaphore *sem) +static inline void __up_write(struct rw_semaphore *sem) { register atomic_t *ptr asm("g1"); @@ -375,7 +375,7 @@ extern inline void __up_write(struct rw_semaphore *sem) : "g2", "g3", "g4", "g7", "memory", "cc"); } -extern inline void up_read(struct rw_semaphore *sem) +static inline void up_read(struct rw_semaphore *sem) { #if WAITQUEUE_DEBUG if (!sem->write_not_granted) @@ -387,7 +387,7 @@ extern inline void up_read(struct rw_semaphore *sem) __up_read(sem); } -extern inline void up_write(struct rw_semaphore *sem) +static inline void up_write(struct rw_semaphore *sem) { #if WAITQUEUE_DEBUG if (!sem->read_not_granted) |