summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/critical.c19
-rw-r--r--sys/alpha/include/cpufunc.h5
-rw-r--r--sys/alpha/include/critical.h72
3 files changed, 73 insertions, 23 deletions
diff --git a/sys/alpha/alpha/critical.c b/sys/alpha/alpha/critical.c
index 0bf9e9b..c7e705d 100644
--- a/sys/alpha/alpha/critical.c
+++ b/sys/alpha/alpha/critical.c
@@ -18,24 +18,7 @@
#include <sys/mutex.h>
#include <sys/sysctl.h>
#include <sys/ucontext.h>
-
-void
-cpu_critical_enter(void)
-{
- struct thread *td;
-
- td = curthread;
- td->td_md.md_savecrit = intr_disable();
-}
-
-void
-cpu_critical_exit(void)
-{
- struct thread *td;
-
- td = curthread;
- intr_restore(td->td_md.md_savecrit);
-}
+#include <machine/critical.h>
/*
* cpu_critical_fork_exit() - cleanup after fork
diff --git a/sys/alpha/include/cpufunc.h b/sys/alpha/include/cpufunc.h
index 95d7e10..05bdbd4 100644
--- a/sys/alpha/include/cpufunc.h
+++ b/sys/alpha/include/cpufunc.h
@@ -59,11 +59,6 @@ intr_restore(register_t ipl)
alpha_pal_swpipl(ipl);
}
-void cpu_critical_enter(void);
-void cpu_critical_exit(void);
-void cpu_critical_fork_exit(void);
-void cpu_thread_link(struct thread *td);
-
#endif /* _KERNEL */
#endif /* !_MACHINE_CPUFUNC_H_ */
diff --git a/sys/alpha/include/critical.h b/sys/alpha/include/critical.h
new file mode 100644
index 0000000..dc5119c
--- /dev/null
+++ b/sys/alpha/include/critical.h
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 2002 Matthew Dillon. This code is distributed under
+ * the BSD copyright, /usr/src/COPYRIGHT.
+ *
+ * This file contains prototypes and high-level inlines related to
+ * machine-level critical function support:
+ *
+ * cpu_critical_enter() - inlined
+ * cpu_critical_exit() - inlined
+ * cpu_critical_fork_exit() - prototyped
+ * cpu_thread_link() - prototyped
+ * related support functions residing
+ * in <arch>/<arch>/critical.c - prototyped
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_CRITICAL_H_
+#define _MACHINE_CRITICAL_H_
+
+__BEGIN_DECLS
+
+/*
+ * Prototypes - see <arch>/<arch>/critical.c
+ */
+void cpu_critical_fork_exit(void);
+void cpu_thread_link(struct thread *td);
+
+#ifdef __GNUC__
+
+/*
+ * cpu_critical_enter:
+ *
+ * This routine is called from critical_enter() on the 0->1 transition
+ * of td_critnest, prior to it being incremented to 1.
+ */
+static __inline void
+cpu_critical_enter(void)
+{
+ struct thread *td;
+
+ td = curthread;
+ td->td_md.md_savecrit = intr_disable();
+}
+
+/*
+ * cpu_critical_exit:
+ *
+ * This routine is called from critical_exit() on a 1->0 transition
+ * of td_critnest, after it has been decremented to 0. We are
+ * exiting the last critical section.
+ */
+static __inline void
+cpu_critical_exit(void)
+{
+ struct thread *td;
+
+ td = curthread;
+ intr_restore(td->td_md.md_savecrit);
+}
+
+#else /* !__GNUC__ */
+
+void cpu_critical_enter(void)
+void cpu_critical_exit(void)
+
+#endif /* __GNUC__ */
+
+__END_DECLS
+
+#endif /* !_MACHINE_CRITICAL_H_ */
+
OpenPOWER on IntegriCloud