Blame view
tools/perf/perf.h
4.07 KB
6eda5838b
|
1 2 |
#ifndef _PERF_PERF_H #define _PERF_PERF_H |
895f0edc3
|
3 4 5 |
struct winsize; void get_term_dimensions(struct winsize *ws); |
11d1578f9
|
6 7 8 9 10 11 12 |
#if defined(__i386__) #include "../../arch/x86/include/asm/unistd.h" #define rmb() asm volatile("lock; addl $0,0(%%esp)" ::: "memory") #define cpu_relax() asm volatile("rep; nop" ::: "memory"); #endif #if defined(__x86_64__) |
1a482f38c
|
13 14 15 16 17 18 19 20 21 22 |
#include "../../arch/x86/include/asm/unistd.h" #define rmb() asm volatile("lfence" ::: "memory") #define cpu_relax() asm volatile("rep; nop" ::: "memory"); #endif #ifdef __powerpc__ #include "../../arch/powerpc/include/asm/unistd.h" #define rmb() asm volatile ("sync" ::: "memory") #define cpu_relax() asm volatile ("" ::: "memory"); #endif |
12310e9c1
|
23 24 25 26 27 |
#ifdef __s390__ #include "../../arch/s390/include/asm/unistd.h" #define rmb() asm volatile("bcr 15,0" ::: "memory") #define cpu_relax() asm volatile("" ::: "memory"); #endif |
febe83453
|
28 29 30 31 32 33 34 35 36 |
#ifdef __sh__ #include "../../arch/sh/include/asm/unistd.h" #if defined(__SH4A__) || defined(__SH5__) # define rmb() asm volatile("synco" ::: "memory") #else # define rmb() asm volatile("" ::: "memory") #endif #define cpu_relax() asm volatile("" ::: "memory") #endif |
2d4618dce
|
37 38 39 40 41 |
#ifdef __hppa__ #include "../../arch/parisc/include/asm/unistd.h" #define rmb() asm volatile("" ::: "memory") #define cpu_relax() asm volatile("" ::: "memory"); #endif |
825c9fb47
|
42 43 44 45 46 |
#ifdef __sparc__ #include "../../arch/sparc/include/asm/unistd.h" #define rmb() asm volatile("":::"memory") #define cpu_relax() asm volatile("":::"memory") #endif |
fcd14b320
|
47 48 49 50 51 |
#ifdef __alpha__ #include "../../arch/alpha/include/asm/unistd.h" #define rmb() asm volatile("mb" ::: "memory") #define cpu_relax() asm volatile("" ::: "memory") #endif |
11ada26c7
|
52 53 54 55 56 |
#ifdef __ia64__ #include "../../arch/ia64/include/asm/unistd.h" #define rmb() asm volatile ("mf" ::: "memory") #define cpu_relax() asm volatile ("hint @pause" ::: "memory") #endif |
58e9f9413
|
57 58 59 60 61 62 |
#ifdef __arm__ #include "../../arch/arm/include/asm/unistd.h" /* * Use the __kuser_memory_barrier helper in the CPU helper page. See * arch/arm/kernel/entry-armv.S in the kernel source for details. */ |
da7196e1f
|
63 |
#define rmb() ((void(*)(void))0xffff0fa0)() |
58e9f9413
|
64 65 |
#define cpu_relax() asm volatile("":::"memory") #endif |
c1e028ef4
|
66 67 68 69 70 71 72 73 74 75 76 77 78 |
#ifdef __mips__ #include "../../arch/mips/include/asm/unistd.h" #define rmb() asm volatile( \ ".set mips2 \t" \ "sync \t" \ ".set mips0" \ : /* no output */ \ : /* no input */ \ : "memory") #define cpu_relax() asm volatile("" ::: "memory") #endif |
1a482f38c
|
79 80 81 82 |
#include <time.h> #include <unistd.h> #include <sys/types.h> #include <sys/syscall.h> |
cdd6c482c
|
83 |
#include "../../include/linux/perf_event.h" |
7c6a1c65b
|
84 |
#include "util/types.h" |
8035458fb
|
85 |
#include <stdbool.h> |
1a482f38c
|
86 |
|
70082dd92
|
87 88 89 90 91 92 93 94 95 96 97 98 99 |
struct perf_mmap { void *base; int mask; unsigned int prev; }; static inline unsigned int perf_mmap__read_head(struct perf_mmap *mm) { struct perf_event_mmap_page *pc = mm->base; int head = pc->data_head; rmb(); return head; } |
115d2d896
|
100 101 102 103 104 105 106 107 108 109 110 |
static inline void perf_mmap__write_tail(struct perf_mmap *md, unsigned long tail) { struct perf_event_mmap_page *pc = md->base; /* * ensure all reads are done before we write the tail out. */ /* mb(); */ pc->data_tail = tail; } |
6eda5838b
|
111 |
/* |
cdd6c482c
|
112 |
* prctl(PR_TASK_PERF_EVENTS_DISABLE) will (cheaply) disable all |
6eda5838b
|
113 114 |
* counters in the current task. */ |
cdd6c482c
|
115 116 |
#define PR_TASK_PERF_EVENTS_DISABLE 31 #define PR_TASK_PERF_EVENTS_ENABLE 32 |
6eda5838b
|
117 |
|
a92e70237
|
118 119 120 121 122 123 124 125 126 127 128 |
#ifndef NSEC_PER_SEC # define NSEC_PER_SEC 1000000000ULL #endif static inline unsigned long long rdclock(void) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return ts.tv_sec * 1000000000ULL + ts.tv_nsec; } |
6eda5838b
|
129 130 131 132 133 134 |
/* * Pick up some kernel type conventions: */ #define __user #define asmlinkage |
6eda5838b
|
135 136 137 138 139 140 141 142 |
#define unlikely(x) __builtin_expect(!!(x), 0) #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) static inline int |
cdd6c482c
|
143 |
sys_perf_event_open(struct perf_event_attr *attr, |
6eda5838b
|
144 145 146 |
pid_t pid, int cpu, int group_fd, unsigned long flags) { |
974802eaa
|
147 |
attr->size = sizeof(*attr); |
cdd6c482c
|
148 |
return syscall(__NR_perf_event_open, attr, pid, cpu, |
6eda5838b
|
149 150 |
group_fd, flags); } |
85a9f9200
|
151 152 |
#define MAX_COUNTERS 256 #define MAX_NR_CPUS 256 |
6eda5838b
|
153 |
|
8cb76d99d
|
154 155 156 |
struct ip_callchain { u64 nr; u64 ips[0]; |
f5970550d
|
157 |
}; |
8035458fb
|
158 |
extern bool perf_host, perf_guest; |
a1645ce12
|
159 |
|
6eda5838b
|
160 |
#endif |