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

smp.h (1377B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_SMP_H
      3#define __ASM_SMP_H
      4
      5#include <linux/threads.h>
      6#include <linux/cpumask.h>
      7#include <linux/bitops.h>
      8#include <asm/pal.h>
      9
     10/* HACK: Cabrio WHAMI return value is bogus if more than 8 bits used.. :-( */
     11
     12static __inline__ unsigned char
     13__hard_smp_processor_id(void)
     14{
     15	register unsigned char __r0 __asm__("$0");
     16	__asm__ __volatile__(
     17		"call_pal %1 #whami"
     18		: "=r"(__r0)
     19		:"i" (PAL_whami)
     20		: "$1", "$22", "$23", "$24", "$25");
     21	return __r0;
     22}
     23
     24#ifdef CONFIG_SMP
     25
     26#include <asm/irq.h>
     27
     28struct cpuinfo_alpha {
     29	unsigned long loops_per_jiffy;
     30	unsigned long last_asn;
     31	int need_new_asn;
     32	int asn_lock;
     33	unsigned long ipi_count;
     34	unsigned long prof_multiplier;
     35	unsigned long prof_counter;
     36	unsigned char mcheck_expected;
     37	unsigned char mcheck_taken;
     38	unsigned char mcheck_extra;
     39} __attribute__((aligned(64)));
     40
     41extern struct cpuinfo_alpha cpu_data[NR_CPUS];
     42
     43#define hard_smp_processor_id()	__hard_smp_processor_id()
     44#define raw_smp_processor_id()	(current_thread_info()->cpu)
     45
     46extern int smp_num_cpus;
     47
     48extern void arch_send_call_function_single_ipi(int cpu);
     49extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
     50
     51#else /* CONFIG_SMP */
     52
     53#define hard_smp_processor_id()		0
     54#define smp_call_function_on_cpu(func,info,wait,cpu)    ({ 0; })
     55
     56#endif /* CONFIG_SMP */
     57
     58#define NO_PROC_ID	(-1)
     59
     60#endif