FILE
perf_regs.c
File preview with syntax highlighting.
linux-6.19.14/arch/parisc/kernel/perf_regs.c
1// SPDX-License-Identifier: GPL-2.0 2 3/* Copyright (C) 2025 by Helge Deller <deller@gmx.de> */ 4 5#include <linux/perf_event.h> 6#include <linux/perf_regs.h> 7#include <asm/ptrace.h> 8 9u64 perf_reg_value(struct pt_regs *regs, int idx) 10{ 11 switch (idx) { 12 case PERF_REG_PARISC_R0 ... PERF_REG_PARISC_R31: 13 return regs->gr[idx - PERF_REG_PARISC_R0]; 14 case PERF_REG_PARISC_SR0 ... PERF_REG_PARISC_SR7: 15 return regs->sr[idx - PERF_REG_PARISC_SR0]; 16 case PERF_REG_PARISC_IASQ0 ... PERF_REG_PARISC_IASQ1: 17 return regs->iasq[idx - PERF_REG_PARISC_IASQ0]; 18 case PERF_REG_PARISC_IAOQ0 ... PERF_REG_PARISC_IAOQ1: 19 return regs->iasq[idx - PERF_REG_PARISC_IAOQ0]; 20 case PERF_REG_PARISC_SAR: /* CR11 */ 21 return regs->sar; 22 case PERF_REG_PARISC_IIR: /* CR19 */ 23 return regs->iir; 24 case PERF_REG_PARISC_ISR: /* CR20 */ 25 return regs->isr; 26 case PERF_REG_PARISC_IOR: /* CR21 */ 27 return regs->ior; 28 case PERF_REG_PARISC_IPSW: /* CR22 */ 29 return regs->ipsw; 30 } 31 WARN_ON_ONCE((u32)idx >= PERF_REG_PARISC_MAX); 32 return 0; 33} 34 35#define REG_RESERVED (~((1ULL << PERF_REG_PARISC_MAX) - 1)) 36 37int perf_reg_validate(u64 mask) 38{ 39 if (!mask || mask & REG_RESERVED) 40 return -EINVAL; 41 42 return 0; 43} 44 45u64 perf_reg_abi(struct task_struct *task) 46{ 47 if (!IS_ENABLED(CONFIG_64BIT)) 48 return PERF_SAMPLE_REGS_ABI_32; 49 50 if (test_tsk_thread_flag(task, TIF_32BIT)) 51 return PERF_SAMPLE_REGS_ABI_32; 52 53 return PERF_SAMPLE_REGS_ABI_64; 54} 55 56void perf_get_regs_user(struct perf_regs *regs_user, 57 struct pt_regs *regs) 58{ 59 regs_user->regs = task_pt_regs(current); 60 regs_user->abi = perf_reg_abi(current); 61}
~/
Read-only file preview.