summaryrefslogtreecommitdiffstats
path: root/include/asm-sparc
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2001-01-11 04:02:40 +0000
committerRalf Baechle <ralf@linux-mips.org>2001-01-11 04:02:40 +0000
commite47f00743fc4776491344f2c618cc8dc2c23bcbc (patch)
tree13e03a113a82a184c51c19c209867cfd3a59b3b9 /include/asm-sparc
parentb2ad5f821b1381492d792ca10b1eb7a107b48f14 (diff)
Merge with Linux 2.4.0.
Diffstat (limited to 'include/asm-sparc')
-rw-r--r--include/asm-sparc/atomic.h2
-rw-r--r--include/asm-sparc/contregs.h2
-rw-r--r--include/asm-sparc/delay.h4
-rw-r--r--include/asm-sparc/processor.h2
-rw-r--r--include/asm-sparc/semaphore-helper.h169
-rw-r--r--include/asm-sparc/semaphore.h30
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)