diff options
-rw-r--r-- | arch/mips/kernel/entry.S | 6 | ||||
-rw-r--r-- | arch/mips/kernel/r2300_misc.S | 9 | ||||
-rw-r--r-- | include/asm-mips/semaphore.h | 50 |
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; } |