summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm/runlatch.h
diff options
context:
space:
mode:
authorDavid Howells2012-03-28 19:30:02 +0200
committerDavid Howells2012-03-28 19:30:02 +0200
commitae3a197e3d0bfe3f4bf1693723e82dc018c096f3 (patch)
tree12a222c01afd73dbc3ebb6859952083e2eb96441 /arch/powerpc/include/asm/runlatch.h
parentDisintegrate asm/system.h for PA-RISC (diff)
downloadkernel-qcow2-linux-ae3a197e3d0bfe3f4bf1693723e82dc018c096f3.tar.gz
kernel-qcow2-linux-ae3a197e3d0bfe3f4bf1693723e82dc018c096f3.tar.xz
kernel-qcow2-linux-ae3a197e3d0bfe3f4bf1693723e82dc018c096f3.zip
Disintegrate asm/system.h for PowerPC
Disintegrate asm/system.h for PowerPC. Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> cc: linuxppc-dev@lists.ozlabs.org
Diffstat (limited to 'arch/powerpc/include/asm/runlatch.h')
-rw-r--r--arch/powerpc/include/asm/runlatch.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/runlatch.h b/arch/powerpc/include/asm/runlatch.h
new file mode 100644
index 000000000000..54e9b963876e
--- /dev/null
+++ b/arch/powerpc/include/asm/runlatch.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
+ */
+#ifndef _ASM_POWERPC_RUNLATCH_H
+#define _ASM_POWERPC_RUNLATCH_H
+
+#ifdef CONFIG_PPC64
+
+extern void __ppc64_runlatch_on(void);
+extern void __ppc64_runlatch_off(void);
+
+/*
+ * We manually hard enable-disable, this is called
+ * in the idle loop and we don't want to mess up
+ * with soft-disable/enable & interrupt replay.
+ */
+#define ppc64_runlatch_off() \
+ do { \
+ if (cpu_has_feature(CPU_FTR_CTRL) && \
+ test_thread_local_flags(_TLF_RUNLATCH)) { \
+ unsigned long msr = mfmsr(); \
+ __hard_irq_disable(); \
+ __ppc64_runlatch_off(); \
+ if (msr & MSR_EE) \
+ __hard_irq_enable(); \
+ } \
+ } while (0)
+
+#define ppc64_runlatch_on() \
+ do { \
+ if (cpu_has_feature(CPU_FTR_CTRL) && \
+ !test_thread_local_flags(_TLF_RUNLATCH)) { \
+ unsigned long msr = mfmsr(); \
+ __hard_irq_disable(); \
+ __ppc64_runlatch_on(); \
+ if (msr & MSR_EE) \
+ __hard_irq_enable(); \
+ } \
+ } while (0)
+#else
+#define ppc64_runlatch_on()
+#define ppc64_runlatch_off()
+#endif /* CONFIG_PPC64 */
+
+#endif /* _ASM_POWERPC_RUNLATCH_H */