1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Performance events: 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 2008-2011, Red Hat, Inc., Ingo Molnar 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 2008-2011, Red Hat, Inc., Peter Zijlstra 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Data type definitions, declarations, prototypes. 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Started by: Thomas Gleixner and Ingo Molnar 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * For licencing details see kernel-base/COPYING 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef _UAPI_LINUX_PERF_EVENT_H 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define _UAPI_LINUX_PERF_EVENT_H 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <linux/types.h> 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <linux/ioctl.h> 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <asm/byteorder.h> 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * User-space ABI bits: 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * attr.type 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_type_id { 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_HARDWARE = 0, 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_SOFTWARE = 1, 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_TRACEPOINT = 2, 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_HW_CACHE = 3, 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_RAW = 4, 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_BREAKPOINT = 5, 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_TYPE_MAX, /* non-ABI */ 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Generalized performance event event_id types, used by the 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * attr.event_id parameter of the sys_perf_event_open() 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * syscall: 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_hw_id { 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Common hardware events, generalized by the kernel: 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CPU_CYCLES = 0, 49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_INSTRUCTIONS = 1, 50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_REFERENCES = 2, 51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MISSES = 3, 52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4, 53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_BRANCH_MISSES = 5, 54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_BUS_CYCLES = 6, 55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7, 56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8, 57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_REF_CPU_CYCLES = 9, 58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_MAX, /* non-ABI */ 60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Generalized hardware cache events: 64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { L1-D, L1-I, LLC, ITLB, DTLB, BPU, NODE } x 66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { read, write, prefetch } x 67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { accesses, misses } 68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_hw_cache_id { 70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_L1D = 0, 71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_L1I = 1, 72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_LL = 2, 73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_DTLB = 3, 74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_ITLB = 4, 75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_BPU = 5, 76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_NODE = 6, 77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_MAX, /* non-ABI */ 79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_hw_cache_op_id { 82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_OP_READ = 0, 83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_OP_WRITE = 1, 84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_OP_PREFETCH = 2, 85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_OP_MAX, /* non-ABI */ 87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_hw_cache_op_result_id { 90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0, 91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_RESULT_MISS = 1, 92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_HW_CACHE_RESULT_MAX, /* non-ABI */ 94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Special "software" events provided by the kernel, even if the hardware 98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * does not support performance events. These events measure various 99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * physical and sw events of the kernel (and allow the profiling of them as 100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * well): 101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_sw_ids { 103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_CPU_CLOCK = 0, 104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_TASK_CLOCK = 1, 105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_PAGE_FAULTS = 2, 106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_CONTEXT_SWITCHES = 3, 107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_CPU_MIGRATIONS = 4, 108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_PAGE_FAULTS_MIN = 5, 109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6, 110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_ALIGNMENT_FAULTS = 7, 111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_EMULATION_FAULTS = 8, 112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_DUMMY = 9, 113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_COUNT_SW_MAX, /* non-ABI */ 115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Bits that can be set in attr.sample_type to request information 119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * in the overflow packets. 120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_event_sample_format { 122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_IP = 1U << 0, 123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_TID = 1U << 1, 124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_TIME = 1U << 2, 125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_ADDR = 1U << 3, 126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_READ = 1U << 4, 127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_CALLCHAIN = 1U << 5, 128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_ID = 1U << 6, 129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_CPU = 1U << 7, 130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_PERIOD = 1U << 8, 131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_STREAM_ID = 1U << 9, 132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_RAW = 1U << 10, 133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_STACK = 1U << 11, 134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_REGS_USER = 1U << 12, 135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_STACK_USER = 1U << 13, 136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_WEIGHT = 1U << 14, 137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_DATA_SRC = 1U << 15, 138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_IDENTIFIER = 1U << 16, 139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_MAX = 1U << 17, /* non-ABI */ 141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * values to program into branch_sample_type when PERF_SAMPLE_BRANCH is set 145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * If the user does not pass priv level information via branch_sample_type, 147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * the kernel uses the event's priv level. Branch and event priv levels do 148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * not have to match. Branch priv level is checked for permissions. 149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * The branch types can be combined, however BRANCH_ANY covers all types 151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * of branches and therefore it supersedes all the other types. 152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_branch_sample_type { 154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_USER = 1U << 0, /* user branches */ 155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_KERNEL = 1U << 1, /* kernel branches */ 156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_HV = 1U << 2, /* hypervisor branches */ 157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_ANY = 1U << 3, /* any branch types */ 159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_ANY_CALL = 1U << 4, /* any call branch */ 160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_ANY_RETURN = 1U << 5, /* any return branch */ 161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_IND_CALL = 1U << 6, /* indirect calls */ 162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_ABORT_TX = 1U << 7, /* transaction aborts */ 163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_IN_TX = 1U << 8, /* in transaction */ 164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_NO_TX = 1U << 9, /* not in transaction */ 165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_MAX = 1U << 10, /* non-ABI */ 167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_SAMPLE_BRANCH_PLM_ALL \ 170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng (PERF_SAMPLE_BRANCH_USER|\ 171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_KERNEL|\ 172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_BRANCH_HV) 173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Values to determine ABI of the registers dump. 176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_sample_regs_abi { 178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_REGS_ABI_NONE = 0, 179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_REGS_ABI_32 = 1, 180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_SAMPLE_REGS_ABI_64 = 2, 181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * The format of the data returned by read() on a perf event fd, 185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * as specified by attr.read_format: 186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct read_format { 188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 value; 189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED 190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING 191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 id; } && PERF_FORMAT_ID 192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * } && !PERF_FORMAT_GROUP 193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 nr; 195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED 196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING 197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 value; 198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 id; } && PERF_FORMAT_ID 199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * } cntr[nr]; 200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * } && PERF_FORMAT_GROUP 201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_event_read_format { 204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, 205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, 206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_FORMAT_ID = 1U << 2, 207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_FORMAT_GROUP = 1U << 3, 208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_FORMAT_MAX = 1U << 4, /* non-ABI */ 210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ 213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_ATTR_SIZE_VER1 72 /* add: config2 */ 214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_ATTR_SIZE_VER2 80 /* add: branch_sample_type */ 215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_ATTR_SIZE_VER3 96 /* add: sample_regs_user */ 216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* add: sample_stack_user */ 217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Hardware event_id to monitor via a performance monitoring event: 220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_event_attr { 222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Major type: hardware/software/tracepoint/etc. 225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 type; 227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Size of the attr structure, for fwd/bwd compat. 230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 size; 232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Type specific configuration information. 235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 config; 237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng union { 239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 sample_period; 240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 sample_freq; 241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }; 242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 sample_type; 244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 read_format; 245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 disabled : 1, /* off by default */ 247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng inherit : 1, /* children inherit it */ 248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng pinned : 1, /* must always be on PMU */ 249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclusive : 1, /* only group on PMU */ 250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_user : 1, /* don't count user */ 251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_kernel : 1, /* ditto kernel */ 252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_hv : 1, /* ditto hypervisor */ 253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_idle : 1, /* don't count when idle */ 254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mmap : 1, /* include mmap data */ 255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng comm : 1, /* include comm data */ 256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng freq : 1, /* use freq, not period */ 257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng inherit_stat : 1, /* per task counts */ 258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng enable_on_exec : 1, /* next exec enables */ 259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng task : 1, /* trace fork/exit */ 260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng watermark : 1, /* wakeup_watermark */ 261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * precise_ip: 263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 0 - SAMPLE_IP can have arbitrary skid 265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 1 - SAMPLE_IP must have constant skid 266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 2 - SAMPLE_IP requested to have 0 skid 267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 3 - SAMPLE_IP must have 0 skid 268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * See also PERF_RECORD_MISC_EXACT_IP 270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng precise_ip : 2, /* skid constraint */ 272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mmap_data : 1, /* non-exec mmap data */ 273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sample_id_all : 1, /* sample_type all events */ 274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_host : 1, /* don't count in host */ 276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_guest : 1, /* don't count in guest */ 277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_callchain_kernel : 1, /* exclude kernel callchains */ 279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng exclude_callchain_user : 1, /* exclude user callchains */ 280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mmap2 : 1, /* include mmap with inode data */ 281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __reserved_1 : 40; 283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng union { 285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 wakeup_events; /* wakeup every n events */ 286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 wakeup_watermark; /* bytes before wakeup */ 287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }; 288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 bp_type; 290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng union { 291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 bp_addr; 292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 config1; /* extension of config */ 293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }; 294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng union { 295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 bp_len; 296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 config2; /* extension of config1 */ 297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }; 298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 branch_sample_type; /* enum perf_branch_sample_type */ 299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Defines set of user regs to dump on samples. 302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * See asm/perf_regs.h for details. 303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 sample_regs_user; 305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Defines size of the user stack to dump on samples. 308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 sample_stack_user; 310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* Align to u64. */ 312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 __reserved_2; 313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define perf_flags(attr) (*(&(attr)->read_format + 1)) 316e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 317e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 318e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Ioctls that can be done on a perf event fd: 319e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 320e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_ENABLE _IO ('$', 0) 321e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_DISABLE _IO ('$', 1) 322e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_REFRESH _IO ('$', 2) 323e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_RESET _IO ('$', 3) 324e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_PERIOD _IOW('$', 4, __u64) 325e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) 326e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *) 327e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_EVENT_IOC_ID _IOR('$', 7, __u64 *) 328e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 329e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_event_ioc_flags { 330e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_IOC_FLAG_GROUP = 1U << 0, 331e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 332e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 333e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 334e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Structure of the page that can be mapped via mmap 335e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 336e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_event_mmap_page { 337e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 version; /* version number of this structure */ 338e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 compat_version; /* lowest version this is compat with */ 339e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 340e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 341e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Bits needed to read the hw events in user-space. 342e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 343e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 seq, time_mult, time_shift, idx, width; 344e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 count, enabled, running; 345e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 cyc, time_offset; 346e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * s64 pmc = 0; 347e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 348e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * do { 349e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * seq = pc->lock; 350e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * barrier() 351e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 352e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * enabled = pc->time_enabled; 353e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * running = pc->time_running; 354e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 355e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * if (pc->cap_usr_time && enabled != running) { 356e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * cyc = rdtsc(); 357e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * time_offset = pc->time_offset; 358e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * time_mult = pc->time_mult; 359e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * time_shift = pc->time_shift; 360e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * } 361e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 362e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * idx = pc->index; 363e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * count = pc->offset; 364e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * if (pc->cap_usr_rdpmc && idx) { 365e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * width = pc->pmc_width; 366e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * pmc = rdpmc(idx - 1); 367e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * } 368e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 369e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * barrier(); 370e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * } while (pc->lock != seq); 371e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 372e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * NOTE: for obvious reason this only works on self-monitoring 373e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * processes. 374e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 375e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 lock; /* seqlock for synchronization */ 376e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 index; /* hardware event identifier */ 377e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __s64 offset; /* add to hardware event value */ 378e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 time_enabled; /* time event active */ 379e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 time_running; /* time event on cpu */ 380e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng union { 381e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 capabilities; 382e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct { 383e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 cap_bit0 : 1, /* Always 0, deprecated, see commit 860f085b74e9 */ 384e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cap_bit0_is_deprecated : 1, /* Always 1, signals that bit 0 is zero */ 385e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 386e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cap_user_rdpmc : 1, /* The RDPMC instruction can be used to read counts */ 387e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cap_user_time : 1, /* The time_* fields are used */ 388e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cap_user_time_zero : 1, /* The time_zero field is used */ 389e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cap_____res : 59; 390e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }; 391e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }; 392e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 393e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 394e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * If cap_usr_rdpmc this field provides the bit-width of the value 395e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * read using the rdpmc() or equivalent instruction. This can be used 396e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * to sign extend the result like: 397e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 398e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * pmc <<= 64 - width; 399e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * pmc >>= 64 - width; // signed shift right 400e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * count += pmc; 401e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 402e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u16 pmc_width; 403e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 404e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 405e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * If cap_usr_time the below fields can be used to compute the time 406e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * delta since time_enabled (in ns) using rdtsc or similar. 407e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 408e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 quot, rem; 409e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 delta; 410e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 411e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * quot = (cyc >> time_shift); 412e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * rem = cyc & ((1 << time_shift) - 1); 413e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * delta = time_offset + quot * time_mult + 414e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * ((rem * time_mult) >> time_shift); 415e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 416e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Where time_offset,time_mult,time_shift and cyc are read in the 417e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * seqcount loop described above. This delta can then be added to 418e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * enabled and possible running (if idx), improving the scaling: 419e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 420e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * enabled += delta; 421e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * if (idx) 422e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * running += delta; 423e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 424e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * quot = count / running; 425e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * rem = count % running; 426e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * count = quot * enabled + (rem * enabled) / running; 427e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 428e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u16 time_shift; 429e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 time_mult; 430e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 time_offset; 431e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 432e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * If cap_usr_time_zero, the hardware clock (e.g. TSC) can be calculated 433e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * from sample timestamps. 434e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 435e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * time = timestamp - time_zero; 436e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * quot = time / time_mult; 437e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * rem = time % time_mult; 438e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * cyc = (quot << time_shift) + (rem << time_shift) / time_mult; 439e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 440e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * And vice versa: 441e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 442e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * quot = cyc >> time_shift; 443e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * rem = cyc & ((1 << time_shift) - 1); 444e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * timestamp = time_zero + quot * time_mult + 445e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * ((rem * time_mult) >> time_shift); 446e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 447e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 time_zero; 448e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 size; /* Header size up to __reserved[] fields. */ 449e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 450e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 451e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Hole for extension of the self monitor capabilities 452e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 453e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 454e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u8 __reserved[118*8+4]; /* align to 1k. */ 455e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 456e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 457e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Control data for the mmap() data buffer. 458e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 459e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * User-space reading the @data_head value should issue an smp_rmb(), 460e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * after reading this value. 461e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 462e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * When the mapping is PROT_WRITE the @data_tail value should be 463e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * written by userspace to reflect the last read data, after issueing 464e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * an smp_mb() to separate the data read from the ->data_tail store. 465e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * In this case the kernel will not over-write unread data. 466e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 467e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * See perf_output_put_handle() for the data ordering. 468e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 469e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 data_head; /* head in the data section */ 470e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 data_tail; /* user-space written tail */ 471e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 472e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 473e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_CPUMODE_MASK (7 << 0) 474e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_CPUMODE_UNKNOWN (0 << 0) 475e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_KERNEL (1 << 0) 476e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_USER (2 << 0) 477e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_HYPERVISOR (3 << 0) 478e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_GUEST_KERNEL (4 << 0) 479e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_GUEST_USER (5 << 0) 480e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 481e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_MMAP_DATA (1 << 13) 482e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 483e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Indicates that the content of PERF_SAMPLE_IP points to 484e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * the actual instruction that triggered the event. See also 485e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * perf_event_attr::precise_ip. 486e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 487e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_EXACT_IP (1 << 14) 488e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 489e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Reserve the last bit to indicate some extended misc field 490e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 491e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_RECORD_MISC_EXT_RESERVED (1 << 15) 492e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 493e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_event_header { 494e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u32 type; 495e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u16 misc; 496e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u16 size; 497e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 498e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 499e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_event_type { 500e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 501e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 502e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * If perf_event_attr.sample_id_all is set then all event types will 503e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * have the sample_type selected fields related to where/when 504e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * (identity) an event took place (TID, TIME, ID, STREAM_ID, CPU, 505e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * IDENTIFIER) described in PERF_RECORD_SAMPLE below, it will be stashed 506e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * just after the perf_event_header and the fields already present for 507e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * the existing fields, i.e. at the end of the payload. That way a newer 508e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * perf.data file will be supported by older perf tools, with these new 509e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * optional fields being ignored. 510e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 511e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id { 512e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u32 pid, tid; } && PERF_SAMPLE_TID 513e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 time; } && PERF_SAMPLE_TIME 514e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 id; } && PERF_SAMPLE_ID 515e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID 516e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u32 cpu, res; } && PERF_SAMPLE_CPU 517e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 id; } && PERF_SAMPLE_IDENTIFIER 518e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * } && perf_event_attr::sample_id_all 519e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 520e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID. The 521e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * advantage of PERF_SAMPLE_IDENTIFIER is that its position is fixed 522e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * relative to header.size. 523e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 524e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 525e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 526e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * The MMAP events record the PROT_EXEC mappings so that we can 527e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * correlate userspace IPs to code. They have the following structure: 528e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 529e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 530e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 531e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 532e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 pid, tid; 533e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 addr; 534e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 len; 535e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 pgoff; 536e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * char filename[]; 537e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 538e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 539e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 540e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_MMAP = 1, 541e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 542e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 543e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 544e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 545e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 id; 546e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 lost; 547e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 548e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 549e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 550e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_LOST = 2, 551e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 552e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 553e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 554e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 555e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 556e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 pid, tid; 557e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * char comm[]; 558e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 559e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 560e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 561e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_COMM = 3, 562e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 563e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 564e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 565e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 566e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 pid, ppid; 567e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 tid, ptid; 568e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 time; 569e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 570e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 571e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 572e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_EXIT = 4, 573e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 574e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 575e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 576e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 577e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 time; 578e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 id; 579e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 stream_id; 580e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 581e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 582e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 583e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_THROTTLE = 5, 584e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_UNTHROTTLE = 6, 585e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 586e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 587e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 588e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 589e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 pid, ppid; 590e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 tid, ptid; 591e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 time; 592e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 593e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 594e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 595e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_FORK = 7, 596e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 597e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 598e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 599e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 600e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 pid, tid; 601e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 602e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct read_format values; 603e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 604e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 605e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 606e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_READ = 8, 607e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 608e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 609e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 610e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 611e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 612e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # 613e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID. 614e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # The advantage of PERF_SAMPLE_IDENTIFIER is that its position 615e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # is fixed relative to header. 616e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # 617e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 618e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 id; } && PERF_SAMPLE_IDENTIFIER 619e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 ip; } && PERF_SAMPLE_IP 620e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u32 pid, tid; } && PERF_SAMPLE_TID 621e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 time; } && PERF_SAMPLE_TIME 622e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 addr; } && PERF_SAMPLE_ADDR 623e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 id; } && PERF_SAMPLE_ID 624e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID 625e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u32 cpu, res; } && PERF_SAMPLE_CPU 626e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 period; } && PERF_SAMPLE_PERIOD 627e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 628e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { struct read_format values; } && PERF_SAMPLE_READ 629e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 630e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 nr, 631e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN 632e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 633e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # 634e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # The RAW record below is opaque data wrt the ABI 635e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # 636e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # That is, the ABI doesn't make any promises wrt to 637e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # the stability of its content, it may vary depending 638e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # on event, hardware, kernel version and phase of 639e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # the moon. 640e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # 641e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # In other words, PERF_SAMPLE_RAW contents are not an ABI. 642e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * # 643e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 644e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u32 size; 645e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * char data[size];}&& PERF_SAMPLE_RAW 646e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 647e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 nr; 648e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 from, to, flags } lbr[nr];} && PERF_SAMPLE_BRANCH_STACK 649e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 650e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 abi; # enum perf_sample_regs_abi 651e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 regs[weight(mask)]; } && PERF_SAMPLE_REGS_USER 652e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 653e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 size; 654e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * char data[size]; 655e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 dyn_size; } && PERF_SAMPLE_STACK_USER 656e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 657e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 weight; } && PERF_SAMPLE_WEIGHT 658e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * { u64 data_src; } && PERF_SAMPLE_DATA_SRC 659e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 660e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 661e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_SAMPLE = 9, 662e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 663e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 664e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * The MMAP2 records are an augmented version of MMAP, they add 665e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * maj, min, ino numbers to be used to uniquely identify each mapping 666e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 667e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct { 668e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct perf_event_header header; 669e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 670e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 pid, tid; 671e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 addr; 672e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 len; 673e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 pgoff; 674e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 maj; 675e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u32 min; 676e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 ino; 677e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * u64 ino_generation; 678e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * char filename[]; 679e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * struct sample_id sample_id; 680e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * }; 681e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 682e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_MMAP2 = 10, 683e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 684e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_RECORD_MAX, /* non-ABI */ 685e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 686e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 687e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MAX_STACK_DEPTH 127 688e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 689e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_callchain_context { 690e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_CONTEXT_HV = (__u64)-32, 691e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_CONTEXT_KERNEL = (__u64)-128, 692e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_CONTEXT_USER = (__u64)-512, 693e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 694e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_CONTEXT_GUEST = (__u64)-2048, 695e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_CONTEXT_GUEST_KERNEL = (__u64)-2176, 696e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_CONTEXT_GUEST_USER = (__u64)-2560, 697e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 698e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_CONTEXT_MAX = (__u64)-4095, 699e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 700e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 701e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_FLAG_FD_NO_GROUP (1U << 0) 702e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_FLAG_FD_OUTPUT (1U << 1) 703e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_FLAG_PID_CGROUP (1U << 2) /* pid=cgroup id, per-cpu mode only */ 704e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 705e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengunion perf_mem_data_src { 706e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 val; 707e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng struct { 708e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 mem_op:5, /* type of opcode */ 709e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mem_lvl:14, /* memory hierarchy level */ 710e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mem_snoop:5, /* snoop mode */ 711e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mem_lock:2, /* lock instr */ 712e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mem_dtlb:7, /* tlb access */ 713e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mem_rsvd:31; 714e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }; 715e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 716e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 717e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* type of opcode (load/store/prefetch,code) */ 718e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_OP_NA 0x01 /* not available */ 719e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_OP_LOAD 0x02 /* load instruction */ 720e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_OP_STORE 0x04 /* store instruction */ 721e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_OP_PFETCH 0x08 /* prefetch */ 722e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_OP_EXEC 0x10 /* code (execution) */ 723e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_OP_SHIFT 0 724e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 725e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* memory hierarchy (memory level, hit or miss) */ 726e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_NA 0x01 /* not available */ 727e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_HIT 0x02 /* hit level */ 728e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_MISS 0x04 /* miss level */ 729e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_L1 0x08 /* L1 */ 730e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_LFB 0x10 /* Line Fill Buffer */ 731e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_L2 0x20 /* L2 */ 732e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_L3 0x40 /* L3 */ 733e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_LOC_RAM 0x80 /* Local DRAM */ 734e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_REM_RAM1 0x100 /* Remote DRAM (1 hop) */ 735e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_REM_RAM2 0x200 /* Remote DRAM (2 hops) */ 736e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_REM_CCE1 0x400 /* Remote Cache (1 hop) */ 737e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_REM_CCE2 0x800 /* Remote Cache (2 hops) */ 738e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_IO 0x1000 /* I/O memory */ 739e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_UNC 0x2000 /* Uncached memory */ 740e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LVL_SHIFT 5 741e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 742e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* snoop mode */ 743e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_SNOOP_NA 0x01 /* not available */ 744e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_SNOOP_NONE 0x02 /* no snoop */ 745e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_SNOOP_HIT 0x04 /* snoop hit */ 746e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_SNOOP_MISS 0x08 /* snoop miss */ 747e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_SNOOP_HITM 0x10 /* snoop hit modified */ 748e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_SNOOP_SHIFT 19 749e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 750e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* locked instruction */ 751e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LOCK_NA 0x01 /* not available */ 752e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LOCK_LOCKED 0x02 /* locked transaction */ 753e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_LOCK_SHIFT 24 754e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 755e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* TLB access */ 756e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_NA 0x01 /* not available */ 757e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_HIT 0x02 /* hit level */ 758e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_MISS 0x04 /* miss level */ 759e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_L1 0x08 /* L1 */ 760e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_L2 0x10 /* L2 */ 761e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_WK 0x20 /* Hardware Walker*/ 762e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_OS 0x40 /* OS fault handler */ 763e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_TLB_SHIFT 26 764e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 765e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define PERF_MEM_S(a, s) \ 766e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng (((u64)PERF_MEM_##a##_##s) << PERF_MEM_##a##_SHIFT) 767e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 768e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 769e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * single taken branch record layout: 770e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 771e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * from: source instruction (may not always be a branch insn) 772e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * to: branch target 773e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * mispred: branch target was mispredicted 774e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * predicted: branch target was predicted 775e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 776e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * support for mispred, predicted is optional. In case it 777e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * is not supported mispred = predicted = 0. 778e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 779e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * in_tx: running in a hardware transaction 780e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * abort: aborting a hardware transaction 781e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 782e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_branch_entry { 783e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 from; 784e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 to; 785e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __u64 mispred:1, /* target mispredicted */ 786e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng predicted:1,/* target predicted */ 787e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng in_tx:1, /* in transaction */ 788e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng abort:1, /* transaction abort */ 789e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng reserved:60; 790e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 791e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 792e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* _UAPI_LINUX_PERF_EVENT_H */ 793