summaryrefslogtreecommitdiffstats
path: root/arch/i386/lib/semaphore.S
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-06-01 03:16:17 +0000
committerRalf Baechle <ralf@linux-mips.org>1997-06-01 03:16:17 +0000
commitd8d9b8f76f22b7a16a83e261e64f89ee611f49df (patch)
tree3067bc130b80d52808e6390c9fc7fc087ec1e33c /arch/i386/lib/semaphore.S
parent19c9bba94152148523ba0f7ef7cffe3d45656b11 (diff)
Initial revision
Diffstat (limited to 'arch/i386/lib/semaphore.S')
-rw-r--r--arch/i386/lib/semaphore.S8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/i386/lib/semaphore.S b/arch/i386/lib/semaphore.S
index ff2443c40..faddbf4ec 100644
--- a/arch/i386/lib/semaphore.S
+++ b/arch/i386/lib/semaphore.S
@@ -13,16 +13,17 @@
* there is contention on the semaphore.
*/
ENTRY(__down_failed)
- pushl %eax /* return address */
+ pushl %eax /* save %eax */
pushl %edx /* save %edx */
pushl %ecx /* save %ecx (and argument) */
call SYMBOL_NAME(__down)
popl %ecx /* restore %ecx (count on __down not changing it) */
popl %edx /* restore %edx */
+ popl %eax /* restore %eax */
ret
+/* Don't save/restore %eax, because that will be our return value */
ENTRY(__down_failed_interruptible)
- pushl %eax /* return address */
pushl %edx /* save %edx */
pushl %ecx /* save %ecx (and argument) */
call SYMBOL_NAME(__down_interruptible)
@@ -31,10 +32,11 @@ ENTRY(__down_failed_interruptible)
ret
ENTRY(__up_wakeup)
- pushl %eax /* return address */
+ pushl %eax /* save %eax */
pushl %edx /* save %edx */
pushl %ecx /* save %ecx (and argument) */
call SYMBOL_NAME(__up)
popl %ecx /* restore %ecx (count on __up not changing it) */
popl %edx /* restore %edx */
+ popl %eax /* restore %eax */
ret