summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mips/kernel/entry.S6
-rw-r--r--arch/mips/kernel/r2300_misc.S9
-rw-r--r--include/asm-mips/semaphore.h50
3 files changed, 19 insertions, 46 deletions
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S
index 53a5bf0ba..b6987cf42 100644
--- a/arch/mips/kernel/entry.S
+++ b/arch/mips/kernel/entry.S
@@ -7,7 +7,7 @@
*
* Copyright (C) 1994, 1995 by Ralf Baechle
*
- * $Id: entry.S,v 1.17 1999/12/04 03:58:59 ralf Exp $
+ * $Id: entry.S,v 1.18 1999/12/06 23:13:20 ralf Exp $
*/
/*
@@ -41,10 +41,10 @@
.set push
.set reorder
EXPORT(ret_from_fork)
- jal schedule_tail
move a0, v0 # prev
+ jal schedule_tail
j ret_from_sys_call
- nop
+
EXPORT(handle_bottom_half)
jal do_bottom_half
b 9f
diff --git a/arch/mips/kernel/r2300_misc.S b/arch/mips/kernel/r2300_misc.S
index 82635c11f..149012a1f 100644
--- a/arch/mips/kernel/r2300_misc.S
+++ b/arch/mips/kernel/r2300_misc.S
@@ -1,4 +1,4 @@
-/* $Id: r2300_misc.S,v 1.6 1999/09/27 11:13:47 raiko Exp $
+/* $Id: r2300_misc.S,v 1.7 1999/10/09 00:00:58 ralf Exp $
* misc.S: Misc. exception handling code for R3000/R2000.
*
* Copyright (C) 1994, 1995, 1996 by Ralf Baechle and Andreas Busse
@@ -39,13 +39,10 @@
*/
#define LOAD_PTE(pte, ptr) \
mfc0 pte, CP0_BADVADDR; \
- _GET_CURRENT(ptr); \
+ lw ptr, current_pgd; \
srl pte, pte, 22; \
- lw ptr, TASK_MM(ptr); \
- nop; \
- lw ptr, MM_PGD(ptr); \
sll pte, pte, 2; \
- addu ptr, pte, ptr; \
+ addu ptr, ptr, pte; \
mfc0 pte, CP0_CONTEXT; \
lw ptr, (ptr); \
andi pte, pte, 0xffc; \
diff --git a/include/asm-mips/semaphore.h b/include/asm-mips/semaphore.h
index 40e51b09e..433c3b862 100644
--- a/include/asm-mips/semaphore.h
+++ b/include/asm-mips/semaphore.h
@@ -1,4 +1,4 @@
-/* $Id: semaphore.h,v 1.10 1999/10/09 00:01:43 ralf Exp $
+/* $Id: semaphore.h,v 1.11 1999/10/20 21:10:58 ralf Exp $
*
* SMP- and interrupt-safe semaphores..
*
@@ -20,8 +20,13 @@
#include <linux/config.h>
struct semaphore {
+#ifdef __MIPSEB__
atomic_t count;
atomic_t waking;
+#else
+ atomic_t waking;
+ atomic_t count;
+#endif
wait_queue_head_t wait;
#if WAITQUEUE_DEBUG
long __magic;
@@ -35,9 +40,15 @@ struct semaphore {
# define __SEM_DEBUG_INIT(name)
#endif
+#ifdef __MIPSEB__
#define __SEMAPHORE_INITIALIZER(name,count) \
{ ATOMIC_INIT(count), ATOMIC_INIT(0), __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
__SEM_DEBUG_INIT(name) }
+#else
+#define __SEMAPHORE_INITIALIZER(name,count) \
+{ ATOMIC_INIT(0), ATOMIC_INIT(count), __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
+ __SEM_DEBUG_INIT(name) }
+#endif
#define __MUTEX_INITIALIZER(name) \
__SEMAPHORE_INITIALIZER(name,1)
@@ -135,7 +146,7 @@ extern inline int down_trylock(struct semaphore * sem)
#if WAITQUEUE_DEBUG
CHECK_MAGIC(sem->__magic);
#endif
-#ifdef __MIPSEB__
+
__asm__ __volatile__("
.set mips3
@@ -160,41 +171,6 @@ extern inline int down_trylock(struct semaphore * sem)
: "m"(*sem)
: "memory");
-#elif defined(__MIPSEL__)
-
- __asm__ __volatile__("
- .set mips3
-
- 0: lld %1, %4
- li %0, 0
- sll %2, %1, 0
- addiu %2, %2, -1
- bgez %2, 2f
- bltz %1, 1f
- dsll32 %2, %2, 0
- dsrl32 %2, %2, 0
- dli %3, 0x0000000100000000
- dsubu %1, %3
- b 2f
- 1:
- li %0, 1
- b 3f
- 2:
- dsrl32 %1, %1, 0
- dsll32 %1, %1, 0
- or %1, %1, %2
- 3:
- scd %1, %4
- beqz %1, 0b
-
- .set mips0"
- : "=&r"(ret), "=&r"(tmp), "=&r"(tmp2), "=&r"(sub)
- : "m"(*sem)
- : "memory");
-#else
-#error "MIPS but neither __MIPSEL__ nor __MIPSEB__"
-#endif
-
return ret;
}