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

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  10 extern void __ppc64_runlatch_on(void);
  11 extern 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 */

/* [<][>][^][v][top][bottom][index][help] */