summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Burkholder <jake@FreeBSD.org>2000-12-08 08:49:36 +0000
committerJake Burkholder <jake@FreeBSD.org>2000-12-08 08:49:36 +0000
commit96d57f35b200fb0dd600dcc0086ef78ae5367aff (patch)
treea157825108ff52e4553778a997a6c6981f6bdb2b
parent06b6617e0bfc170ce8c035bba3789a481038a34f (diff)
Notes
-rw-r--r--sys/amd64/include/mutex.h24
-rw-r--r--sys/i386/include/mutex.h24
2 files changed, 26 insertions, 22 deletions
diff --git a/sys/amd64/include/mutex.h b/sys/amd64/include/mutex.h
index 1c0ea08fa2d7..34fe04e59e72 100644
--- a/sys/amd64/include/mutex.h
+++ b/sys/amd64/include/mutex.h
@@ -258,26 +258,28 @@ extern char STR_SIEN[];
#else /* !LOCORE */
/*
- * Simple assembly macros to get and release non-recursive spin locks
+ * Simple assembly macros to get and release spin locks
*/
#if defined(I386_CPU)
-#define MTX_ENTER(reg, lck) \
- pushf; \
+#define MTX_ENTER(lck, reg) \
+ movl _curproc,reg; \
+ pushfl; \
cli; \
movl reg,lck+MTX_LOCK; \
- popl lck+MTX_SAVEINTR
+ popl lck+MTX_SAVEINTR;
#define MTX_EXIT(lck, reg) \
pushl lck+MTX_SAVEINTR; \
movl $ MTX_UNOWNED,lck+MTX_LOCK; \
- popf
+ popfl;
#else /* I386_CPU */
-#define MTX_ENTER(reg, lck) \
- pushf; \
+#define MTX_ENTER(lck, reg) \
+ movl _curproc,reg; \
+ pushfl; \
cli; \
9: movl $ MTX_UNOWNED,%eax; \
MPLOCKED \
@@ -286,15 +288,15 @@ extern char STR_SIEN[];
popl lck+MTX_SAVEINTR;
/* Must use locked bus op (cmpxchg) when setting to unowned (barrier) */
-#define MTX_EXIT(lck,reg) \
+#define MTX_EXIT(lck, reg) \
pushl lck+MTX_SAVEINTR; \
movl lck+MTX_LOCK,%eax; \
movl $ MTX_UNOWNED,reg; \
MPLOCKED \
cmpxchgl reg,lck+MTX_LOCK; \
- popf
+ popfl;
-#define MTX_ENTER_WITH_RECURSION(reg, lck) \
+#define MTX_ENTER_WITH_RECURSION(lck, reg) \
pushf; \
cli; \
movl lck+MTX_LOCK,%eax; \
@@ -311,7 +313,7 @@ extern char STR_SIEN[];
8: add $4,%esp; \
9:
-#define MTX_EXIT_WITH_RECURSION(lck,reg) \
+#define MTX_EXIT_WITH_RECURSION(lck, reg) \
movl lck+MTX_RECURSE,%eax; \
decl %eax; \
js 8f; \
diff --git a/sys/i386/include/mutex.h b/sys/i386/include/mutex.h
index 1c0ea08fa2d7..34fe04e59e72 100644
--- a/sys/i386/include/mutex.h
+++ b/sys/i386/include/mutex.h
@@ -258,26 +258,28 @@ extern char STR_SIEN[];
#else /* !LOCORE */
/*
- * Simple assembly macros to get and release non-recursive spin locks
+ * Simple assembly macros to get and release spin locks
*/
#if defined(I386_CPU)
-#define MTX_ENTER(reg, lck) \
- pushf; \
+#define MTX_ENTER(lck, reg) \
+ movl _curproc,reg; \
+ pushfl; \
cli; \
movl reg,lck+MTX_LOCK; \
- popl lck+MTX_SAVEINTR
+ popl lck+MTX_SAVEINTR;
#define MTX_EXIT(lck, reg) \
pushl lck+MTX_SAVEINTR; \
movl $ MTX_UNOWNED,lck+MTX_LOCK; \
- popf
+ popfl;
#else /* I386_CPU */
-#define MTX_ENTER(reg, lck) \
- pushf; \
+#define MTX_ENTER(lck, reg) \
+ movl _curproc,reg; \
+ pushfl; \
cli; \
9: movl $ MTX_UNOWNED,%eax; \
MPLOCKED \
@@ -286,15 +288,15 @@ extern char STR_SIEN[];
popl lck+MTX_SAVEINTR;
/* Must use locked bus op (cmpxchg) when setting to unowned (barrier) */
-#define MTX_EXIT(lck,reg) \
+#define MTX_EXIT(lck, reg) \
pushl lck+MTX_SAVEINTR; \
movl lck+MTX_LOCK,%eax; \
movl $ MTX_UNOWNED,reg; \
MPLOCKED \
cmpxchgl reg,lck+MTX_LOCK; \
- popf
+ popfl;
-#define MTX_ENTER_WITH_RECURSION(reg, lck) \
+#define MTX_ENTER_WITH_RECURSION(lck, reg) \
pushf; \
cli; \
movl lck+MTX_LOCK,%eax; \
@@ -311,7 +313,7 @@ extern char STR_SIEN[];
8: add $4,%esp; \
9:
-#define MTX_EXIT_WITH_RECURSION(lck,reg) \
+#define MTX_EXIT_WITH_RECURSION(lck, reg) \
movl lck+MTX_RECURSE,%eax; \
decl %eax; \
js 8f; \