summaryrefslogtreecommitdiffstats
path: root/sys/amd64/include
diff options
context:
space:
mode:
Diffstat (limited to 'sys/amd64/include')
-rw-r--r--sys/amd64/include/cpufunc.h11
-rw-r--r--sys/amd64/include/mutex.h50
2 files changed, 15 insertions, 46 deletions
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h
index 4a9300a..a4f57cb 100644
--- a/sys/amd64/include/cpufunc.h
+++ b/sys/amd64/include/cpufunc.h
@@ -41,6 +41,7 @@
#define _MACHINE_CPUFUNC_H_
#include <sys/cdefs.h>
+#include <machine/psl.h>
__BEGIN_DECLS
#define readb(va) (*(volatile u_int8_t *) (va))
@@ -51,6 +52,8 @@ __BEGIN_DECLS
#define writew(va, d) (*(volatile u_int16_t *) (va) = (d))
#define writel(va, d) (*(volatile u_int32_t *) (va) = (d))
+#define CRITICAL_FORK (read_eflags() | PSL_I)
+
#ifdef __GNUC__
#ifdef SWTCH_OPTIM_STATS
@@ -548,7 +551,7 @@ load_dr7(u_int sel)
}
static __inline critical_t
-critical_enter(void)
+cpu_critical_enter(void)
{
critical_t eflags;
@@ -558,7 +561,7 @@ critical_enter(void)
}
static __inline void
-critical_exit(critical_t eflags)
+cpu_critical_exit(critical_t eflags)
{
write_eflags(eflags);
}
@@ -597,8 +600,8 @@ u_int rfs __P((void));
u_int rgs __P((void));
void load_fs __P((u_int sel));
void load_gs __P((u_int sel));
-critical_t critical_enter __P((void));
-void critical_exit __P((critical_t eflags));
+critical_t cpu_critical_enter __P((void));
+void cpu_critical_exit __P((critical_t eflags));
#endif /* __GNUC__ */
diff --git a/sys/amd64/include/mutex.h b/sys/amd64/include/mutex.h
index ae37b23..e68bce7 100644
--- a/sys/amd64/include/mutex.h
+++ b/sys/amd64/include/mutex.h
@@ -35,13 +35,10 @@
#ifndef LOCORE
#ifdef _KERNEL
-#include <machine/psl.h>
/* Global locks */
extern struct mtx clock_lock;
-#define mtx_intr_enable(mutex) do (mutex)->mtx_savecrit |= PSL_I; while (0)
-
/*
* Assembly macros (for internal use only)
*------------------------------------------------------------------------------
@@ -246,51 +243,20 @@ extern struct mtx clock_lock;
* locks) in the near future, however.
*/
#define MTX_LOCK_SPIN(lck, flags) \
- pushl %eax ; \
- pushl %ecx ; \
- pushl %ebx ; \
- movl $(MTX_UNOWNED) , %eax ; \
- movl PCPU(CURTHREAD), %ebx ; \
- pushfl ; \
- popl %ecx ; \
- cli ; \
- MPLOCKED cmpxchgl %ebx, lck+MTX_LOCK ; \
- jz 2f ; \
- cmpl lck+MTX_LOCK, %ebx ; \
- je 3f ; \
pushl $0 ; \
pushl $0 ; \
- pushl %ecx ; \
pushl $flags ; \
pushl $lck ; \
- call _mtx_lock_spin ; \
- addl $0x14, %esp ; \
- jmp 1f ; \
-3: movl lck+MTX_RECURSECNT, %ebx ; \
- incl %ebx ; \
- movl %ebx, lck+MTX_RECURSECNT ; \
- jmp 1f ; \
-2: movl %ecx, lck+MTX_SAVECRIT ; \
-1: popl %ebx ; \
- popl %ecx ; \
- popl %eax
+ call _mtx_lock_spin_flags ; \
+ addl $0x10, %esp ; \
#define MTX_UNLOCK_SPIN(lck) \
- pushl %edx ; \
- pushl %eax ; \
- movl lck+MTX_SAVECRIT, %edx ; \
- movl lck+MTX_RECURSECNT, %eax ; \
- testl %eax, %eax ; \
- jne 2f ; \
- movl $(MTX_UNOWNED), %eax ; \
- xchgl %eax, lck+MTX_LOCK ; \
- pushl %edx ; \
- popfl ; \
- jmp 1f ; \
-2: decl %eax ; \
- movl %eax, lck+MTX_RECURSECNT ; \
-1: popl %eax ; \
- popl %edx
+ pushl $0 ; \
+ pushl $0 ; \
+ pushl $0 ; \
+ pushl $lck ; \
+ call _mtx_unlock_spin_flags ; \
+ addl $0x10, %esp ; \
/*
* XXX: These two are broken right now and need to be made to work for
OpenPOWER on IntegriCloud