PageRenderTime 20ms CodeModel.GetById 14ms app.highlight 2ms RepoModel.GetById 2ms app.codeStats 0ms

/arch/powerpc/include/asm/runlatch.h

https://github.com/aicjofs/android_kernel_lge_v500_20d_f2fs
C Header | 45 lines | 32 code | 5 blank | 8 comment | 6 complexity | f9327400302e5c047d560337f08a690a MD5 | raw file
 1/*
 2 * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
 3 */
 4#ifndef _ASM_POWERPC_RUNLATCH_H
 5#define _ASM_POWERPC_RUNLATCH_H
 6
 7#ifdef CONFIG_PPC64
 8
 9extern void __ppc64_runlatch_on(void);
10extern 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 */