summaryrefslogtreecommitdiffstats
path: root/sys/ia64/include
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2002-04-01 23:51:23 +0000
committerdillon <dillon@FreeBSD.org>2002-04-01 23:51:23 +0000
commit3ad295d41646d81ef12f3b5e99af833ef91f660f (patch)
treeec7d3de3f9fac7137b9779c10d8281315efa3647 /sys/ia64/include
parenta683bcc9224326e9d7bbf72dc76abaefe8a1d62b (diff)
downloadFreeBSD-src-3ad295d41646d81ef12f3b5e99af833ef91f660f.zip
FreeBSD-src-3ad295d41646d81ef12f3b5e99af833ef91f660f.tar.gz
Stage-2 commit of the critical*() code. This re-inlines cpu_critical_enter()
and cpu_critical_exit() and moves associated critical prototypes into their own header file, <arch>/<arch>/critical.h, which is only included by the three MI source files that need it. Backout and re-apply improperly comitted syntactical cleanups made to files that were still under active development. Backout improperly comitted program structure changes that moved localized declarations to the top of two procedures. Partially re-apply one of the program structure changes to move 'mask' into an intermediate block rather then in three separate sub-blocks to make the code more readable. Re-integrate bug fixes that Jake made to the sparc64 code. Note: In general, developers should not gratuitously move declarations out of sub-blocks. They are where they are for reasons of structure, grouping, readability, compiler-localizability, and to avoid developer-introduced bugs similar to several found in recent years in the VFS and VM code. Reviewed by: jake
Diffstat (limited to 'sys/ia64/include')
-rw-r--r--sys/ia64/include/cpufunc.h5
-rw-r--r--sys/ia64/include/critical.h73
2 files changed, 73 insertions, 5 deletions
diff --git a/sys/ia64/include/cpufunc.h b/sys/ia64/include/cpufunc.h
index e7cf818..5569ab0 100644
--- a/sys/ia64/include/cpufunc.h
+++ b/sys/ia64/include/cpufunc.h
@@ -300,11 +300,6 @@ intr_restore(critical_t psr)
__asm __volatile ("mov psr.l=%0;; srlz.d" :: "r" (psr));
}
-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/ia64/include/critical.h b/sys/ia64/include/critical.h
new file mode 100644
index 0000000..265edab
--- /dev/null
+++ b/sys/ia64/include/critical.h
@@ -0,0 +1,73 @@
+/*-
+ * 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