cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

runlatch.h (1184B)


      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 */