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

perf_regs.c (889B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. */
      3
      4#include <linux/errno.h>
      5#include <linux/kernel.h>
      6#include <linux/perf_event.h>
      7#include <linux/bug.h>
      8#include <asm/perf_regs.h>
      9#include <asm/ptrace.h>
     10
     11u64 perf_reg_value(struct pt_regs *regs, int idx)
     12{
     13	if (WARN_ON_ONCE((u32)idx >= PERF_REG_RISCV_MAX))
     14		return 0;
     15
     16	return ((unsigned long *)regs)[idx];
     17}
     18
     19#define REG_RESERVED (~((1ULL << PERF_REG_RISCV_MAX) - 1))
     20
     21int perf_reg_validate(u64 mask)
     22{
     23	if (!mask || mask & REG_RESERVED)
     24		return -EINVAL;
     25
     26	return 0;
     27}
     28
     29u64 perf_reg_abi(struct task_struct *task)
     30{
     31#if __riscv_xlen == 64
     32	return PERF_SAMPLE_REGS_ABI_64;
     33#else
     34	return PERF_SAMPLE_REGS_ABI_32;
     35#endif
     36}
     37
     38void perf_get_regs_user(struct perf_regs *regs_user,
     39			struct pt_regs *regs)
     40{
     41	regs_user->regs = task_pt_regs(current);
     42	regs_user->abi = perf_reg_abi(current);
     43}