Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
4 */
5#ifndef _ASM_POWERPC_RUNLATCH_H
6#define _ASM_POWERPC_RUNLATCH_H
7
8#ifdef CONFIG_PPC64
9
10extern void __ppc64_runlatch_on(void);
11extern void __ppc64_runlatch_off(void);
12
13/*
14 * We manually hard enable-disable, this is called
15 * in the idle loop and we don't want to mess up
16 * with soft-disable/enable & interrupt replay.
17 */
18#define ppc64_runlatch_off() \
19 do { \
20 if (cpu_has_feature(CPU_FTR_CTRL) && \
21 test_thread_local_flags(_TLF_RUNLATCH)) { \
22 __hard_irq_disable(); \
23 __ppc64_runlatch_off(); \
24 if (!(local_paca->irq_happened & PACA_IRQ_HARD_DIS)) \
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 __hard_irq_disable(); \
34 __ppc64_runlatch_on(); \
35 if (!(local_paca->irq_happened & PACA_IRQ_HARD_DIS)) \
36 __hard_irq_enable(); \
37 } \
38 } while (0)
39#else
40#define ppc64_runlatch_on()
41#define ppc64_runlatch_off()
42#endif /* CONFIG_PPC64 */
43
44#endif /* _ASM_POWERPC_RUNLATCH_H */