Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
runlatch.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1999 Cort Dougan <[email protected]>
3  */
4 #ifndef _ASM_POWERPC_RUNLATCH_H
5 #define _ASM_POWERPC_RUNLATCH_H
6 
7 #ifdef CONFIG_PPC64
8 
9 extern void __ppc64_runlatch_on(void);
10 extern void __ppc64_runlatch_off(void);
11 
12 /*
13  * We manually hard enable-disable, this is called
14  * in the idle loop and we don't want to mess up
15  * with soft-disable/enable & interrupt replay.
16  */
17 #define ppc64_runlatch_off() \
18  do { \
19  if (cpu_has_feature(CPU_FTR_CTRL) && \
20  test_thread_local_flags(_TLF_RUNLATCH)) { \
21  unsigned long msr = mfmsr(); \
22  __hard_irq_disable(); \
23  __ppc64_runlatch_off(); \
24  if (msr & MSR_EE) \
25  __hard_irq_enable(); \
26  } \
27  } while (0)
28 
29 #define ppc64_runlatch_on() \
30  do { \
31  if (cpu_has_feature(CPU_FTR_CTRL) && \
32  !test_thread_local_flags(_TLF_RUNLATCH)) { \
33  unsigned long msr = mfmsr(); \
34  __hard_irq_disable(); \
35  __ppc64_runlatch_on(); \
36  if (msr & MSR_EE) \
37  __hard_irq_enable(); \
38  } \
39  } while (0)
40 #else
41 #define ppc64_runlatch_on()
42 #define ppc64_runlatch_off()
43 #endif /* CONFIG_PPC64 */
44 
45 #endif /* _ASM_POWERPC_RUNLATCH_H */