linux/arch/powerpc/include/asm/runlatch.h
<<
>>
Prefs
   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                        unsigned long msr = mfmsr();            \
  23                        __hard_irq_disable();                   \
  24                        __ppc64_runlatch_off();                 \
  25                        if (msr & MSR_EE)                       \
  26                                __hard_irq_enable();            \
  27                }                                               \
  28        } while (0)
  29
  30#define ppc64_runlatch_on()                                     \
  31        do {                                                    \
  32                if (cpu_has_feature(CPU_FTR_CTRL) &&            \
  33                    !test_thread_local_flags(_TLF_RUNLATCH)) {  \
  34                        unsigned long msr = mfmsr();            \
  35                        __hard_irq_disable();                   \
  36                        __ppc64_runlatch_on();                  \
  37                        if (msr & MSR_EE)                       \
  38                                __hard_irq_enable();            \
  39                }                                               \
  40        } while (0)
  41#else
  42#define ppc64_runlatch_on()
  43#define ppc64_runlatch_off()
  44#endif /* CONFIG_PPC64 */
  45
  46#endif /* _ASM_POWERPC_RUNLATCH_H */
  47