Generic semaphore implementation
Semaphores are no longer performance-critical, so a generic C implementation is better for maintainability, debuggability and extensibility. Thanks to Peter Zijlstra for fixing the lockdep warning. Thanks to Harvey Harrison for pointing out that the unlikely() was unnecessary. Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Acked-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:

committed by
Matthew Wilcox

parent
e48b3deee4
commit
64ac24e738
@@ -5,4 +5,4 @@
|
||||
EXTRA_AFLAGS := -traditional
|
||||
|
||||
lib-y := ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
|
||||
checksum.o string.o semaphore.o uaccess.o
|
||||
checksum.o string.o uaccess.o
|
||||
|
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* linux/arch/m68k/lib/semaphore.S
|
||||
*
|
||||
* Copyright (C) 1996 Linus Torvalds
|
||||
*
|
||||
* m68k version by Andreas Schwab
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/semaphore.h>
|
||||
|
||||
/*
|
||||
* The semaphore operations have a special calling sequence that
|
||||
* allow us to do a simpler in-line version of them. These routines
|
||||
* need to convert that sequence back into the C sequence when
|
||||
* there is contention on the semaphore.
|
||||
*/
|
||||
ENTRY(__down_failed)
|
||||
moveml %a0/%d0/%d1,-(%sp)
|
||||
movel %a1,-(%sp)
|
||||
jbsr __down
|
||||
movel (%sp)+,%a1
|
||||
moveml (%sp)+,%a0/%d0/%d1
|
||||
rts
|
||||
|
||||
ENTRY(__down_failed_interruptible)
|
||||
movel %a0,-(%sp)
|
||||
movel %d1,-(%sp)
|
||||
movel %a1,-(%sp)
|
||||
jbsr __down_interruptible
|
||||
movel (%sp)+,%a1
|
||||
movel (%sp)+,%d1
|
||||
movel (%sp)+,%a0
|
||||
rts
|
||||
|
||||
ENTRY(__down_failed_trylock)
|
||||
movel %a0,-(%sp)
|
||||
movel %d1,-(%sp)
|
||||
movel %a1,-(%sp)
|
||||
jbsr __down_trylock
|
||||
movel (%sp)+,%a1
|
||||
movel (%sp)+,%d1
|
||||
movel (%sp)+,%a0
|
||||
rts
|
||||
|
||||
ENTRY(__up_wakeup)
|
||||
moveml %a0/%d0/%d1,-(%sp)
|
||||
movel %a1,-(%sp)
|
||||
jbsr __up
|
||||
movel (%sp)+,%a1
|
||||
moveml (%sp)+,%a0/%d0/%d1
|
||||
rts
|
||||
|
Reference in New Issue
Block a user