diff options
| author | Matthew Dillon <dillon@FreeBSD.org> | 2002-04-01 23:51:23 +0000 |
|---|---|---|
| committer | Matthew Dillon <dillon@FreeBSD.org> | 2002-04-01 23:51:23 +0000 |
| commit | 182da8209d4cda12e2d510e06f9e4b516171f9b6 (patch) | |
| tree | ec7d3de3f9fac7137b9779c10d8281315efa3647 /sys/powerpc | |
| parent | ad68ab89e2c36e378d03ab777464dcc8a24a43a0 (diff) | |
Notes
Diffstat (limited to 'sys/powerpc')
| -rw-r--r-- | sys/powerpc/include/cpufunc.h | 6 | ||||
| -rw-r--r-- | sys/powerpc/include/critical.h | 76 | ||||
| -rw-r--r-- | sys/powerpc/powerpc/critical.c | 20 |
3 files changed, 76 insertions, 26 deletions
diff --git a/sys/powerpc/include/cpufunc.h b/sys/powerpc/include/cpufunc.h index b788aa6935aa..429e83bd7ec7 100644 --- a/sys/powerpc/include/cpufunc.h +++ b/sys/powerpc/include/cpufunc.h @@ -132,12 +132,6 @@ powerpc_get_pcpup(void) return(ret); } -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/powerpc/include/critical.h b/sys/powerpc/include/critical.h new file mode 100644 index 000000000000..08184bd58208 --- /dev/null +++ b/sys/powerpc/include/critical.h @@ -0,0 +1,76 @@ +/*- + * 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) +{ + u_int msr; + struct thread *td = curthread; + + msr = mfmsr(); + td->td_md.md_savecrit = msr; + msr &= ~(PSL_EE | PSL_RI); + mtmsr(msr); +} + +/* + * 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 = curthread; + + mtmsr(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_ */ + diff --git a/sys/powerpc/powerpc/critical.c b/sys/powerpc/powerpc/critical.c index cb800627dc3a..873498cd7624 100644 --- a/sys/powerpc/powerpc/critical.c +++ b/sys/powerpc/powerpc/critical.c @@ -19,26 +19,6 @@ #include <sys/sysctl.h> #include <sys/ucontext.h> -void -cpu_critical_enter(void) -{ - u_int msr; - struct thread *td = curthread; - - msr = mfmsr(); - td->td_md.md_savecrit = msr; - msr &= ~(PSL_EE | PSL_RI); - mtmsr(msr); -} - -void -cpu_critical_exit(void) -{ - struct thread *td = curthread; - - mtmsr(td->td_md.md_savecrit); -} - /* * cpu_critical_fork_exit() - cleanup after fork */ |
