Blame view

tools/perf/perf.h 4.97 KB
6eda5838b   Thomas Gleixner   perfcounter tools...
1
2
  #ifndef _PERF_PERF_H
  #define _PERF_PERF_H
895f0edc3   Arnaldo Carvalho de Melo   perf top: Export ...
3
4
5
  struct winsize;
  
  void get_term_dimensions(struct winsize *ws);
11d1578f9   Vince Weaver   perf_counter: Add...
6
7
8
9
  #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");
fbe96f29c   Stephane Eranian   perf tools: Make ...
10
  #define CPUINFO_PROC	"model name"
11d1578f9   Vince Weaver   perf_counter: Add...
11
12
13
  #endif
  
  #if defined(__x86_64__)
1a482f38c   Peter Zijlstra   perf_counter: Fix...
14
15
16
  #include "../../arch/x86/include/asm/unistd.h"
  #define rmb()		asm volatile("lfence" ::: "memory")
  #define cpu_relax()	asm volatile("rep; nop" ::: "memory");
fbe96f29c   Stephane Eranian   perf tools: Make ...
17
  #define CPUINFO_PROC	"model name"
1a482f38c   Peter Zijlstra   perf_counter: Fix...
18
19
20
21
22
23
  #endif
  
  #ifdef __powerpc__
  #include "../../arch/powerpc/include/asm/unistd.h"
  #define rmb()		asm volatile ("sync" ::: "memory")
  #define cpu_relax()	asm volatile ("" ::: "memory");
fbe96f29c   Stephane Eranian   perf tools: Make ...
24
  #define CPUINFO_PROC	"cpu"
1a482f38c   Peter Zijlstra   perf_counter: Fix...
25
  #endif
12310e9c1   Martin Schwidefsky   [S390] Enable tic...
26
27
28
29
30
  #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   Paul Mundt   perf_counter tool...
31
32
33
34
35
36
37
38
  #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")
fbe96f29c   Stephane Eranian   perf tools: Make ...
39
  #define CPUINFO_PROC	"cpu type"
febe83453   Paul Mundt   perf_counter tool...
40
  #endif
2d4618dce   Kyle McMartin   parisc: perf: wir...
41
42
43
44
  #ifdef __hppa__
  #include "../../arch/parisc/include/asm/unistd.h"
  #define rmb()		asm volatile("" ::: "memory")
  #define cpu_relax()	asm volatile("" ::: "memory");
fbe96f29c   Stephane Eranian   perf tools: Make ...
45
  #define CPUINFO_PROC	"cpu"
2d4618dce   Kyle McMartin   parisc: perf: wir...
46
  #endif
825c9fb47   Jens Axboe   sparc: add basic ...
47
48
49
50
  #ifdef __sparc__
  #include "../../arch/sparc/include/asm/unistd.h"
  #define rmb()		asm volatile("":::"memory")
  #define cpu_relax()	asm volatile("":::"memory")
fbe96f29c   Stephane Eranian   perf tools: Make ...
51
  #define CPUINFO_PROC	"cpu"
825c9fb47   Jens Axboe   sparc: add basic ...
52
  #endif
fcd14b320   Michael Cree   perf tools, Alpha...
53
54
55
56
  #ifdef __alpha__
  #include "../../arch/alpha/include/asm/unistd.h"
  #define rmb()		asm volatile("mb" ::: "memory")
  #define cpu_relax()	asm volatile("" ::: "memory")
fbe96f29c   Stephane Eranian   perf tools: Make ...
57
  #define CPUINFO_PROC	"cpu model"
fcd14b320   Michael Cree   perf tools, Alpha...
58
  #endif
11ada26c7   Tony Luck   perf tools: Add i...
59
60
61
62
  #ifdef __ia64__
  #include "../../arch/ia64/include/asm/unistd.h"
  #define rmb()		asm volatile ("mf" ::: "memory")
  #define cpu_relax()	asm volatile ("hint @pause" ::: "memory")
fbe96f29c   Stephane Eranian   perf tools: Make ...
63
  #define CPUINFO_PROC	"model name"
11ada26c7   Tony Luck   perf tools: Add i...
64
  #endif
58e9f9413   Jamie Iles   perf tools: Allow...
65
66
67
68
69
70
  #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   Will Deacon   perf, ARM: Modify...
71
  #define rmb()		((void(*)(void))0xffff0fa0)()
58e9f9413   Jamie Iles   perf tools: Allow...
72
  #define cpu_relax()	asm volatile("":::"memory")
fbe96f29c   Stephane Eranian   perf tools: Make ...
73
  #define CPUINFO_PROC	"Processor"
58e9f9413   Jamie Iles   perf tools: Allow...
74
  #endif
c1e028ef4   Deng-Cheng Zhu   perf, MIPS: Suppo...
75
76
77
78
79
80
81
82
83
84
85
86
  #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")
fbe96f29c   Stephane Eranian   perf tools: Make ...
87
  #define CPUINFO_PROC	"cpu model"
c1e028ef4   Deng-Cheng Zhu   perf, MIPS: Suppo...
88
  #endif
1a482f38c   Peter Zijlstra   perf_counter: Fix...
89
90
91
92
  #include <time.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <sys/syscall.h>
cdd6c482c   Ingo Molnar   perf: Do the big ...
93
  #include "../../include/linux/perf_event.h"
7c6a1c65b   Peter Zijlstra   perf_counter tool...
94
  #include "util/types.h"
8035458fb   Arnaldo Carvalho de Melo   perf options: Typ...
95
  #include <stdbool.h>
1a482f38c   Peter Zijlstra   perf_counter: Fix...
96

70082dd92   Arnaldo Carvalho de Melo   perf evsel: Intro...
97
98
99
100
101
102
103
104
105
106
107
108
109
  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   Arnaldo Carvalho de Melo   perf record: Move...
110
111
112
113
114
115
116
117
118
119
120
  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   Thomas Gleixner   perfcounter tools...
121
  /*
cdd6c482c   Ingo Molnar   perf: Do the big ...
122
   * prctl(PR_TASK_PERF_EVENTS_DISABLE) will (cheaply) disable all
6eda5838b   Thomas Gleixner   perfcounter tools...
123
124
   * counters in the current task.
   */
cdd6c482c   Ingo Molnar   perf: Do the big ...
125
126
  #define PR_TASK_PERF_EVENTS_DISABLE   31
  #define PR_TASK_PERF_EVENTS_ENABLE    32
6eda5838b   Thomas Gleixner   perfcounter tools...
127

a92e70237   Thomas Gleixner   perfcounter tools...
128
129
130
131
132
133
134
135
136
137
138
  #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   Thomas Gleixner   perfcounter tools...
139
140
141
142
143
144
  
  /*
   * Pick up some kernel type conventions:
   */
  #define __user
  #define asmlinkage
6eda5838b   Thomas Gleixner   perfcounter tools...
145
146
147
148
149
150
151
152
  #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   Ingo Molnar   perf: Do the big ...
153
  sys_perf_event_open(struct perf_event_attr *attr,
6eda5838b   Thomas Gleixner   perfcounter tools...
154
155
156
  		      pid_t pid, int cpu, int group_fd,
  		      unsigned long flags)
  {
974802eaa   Peter Zijlstra   perf_counter: Add...
157
  	attr->size = sizeof(*attr);
cdd6c482c   Ingo Molnar   perf: Do the big ...
158
  	return syscall(__NR_perf_event_open, attr, pid, cpu,
6eda5838b   Thomas Gleixner   perfcounter tools...
159
160
  		       group_fd, flags);
  }
85a9f9200   Ingo Molnar   perf_counter tool...
161
162
  #define MAX_COUNTERS			256
  #define MAX_NR_CPUS			256
6eda5838b   Thomas Gleixner   perfcounter tools...
163

8cb76d99d   Frederic Weisbecker   perf_counter tool...
164
165
166
  struct ip_callchain {
  	u64 nr;
  	u64 ips[0];
f5970550d   Peter Zijlstra   perf_counter tool...
167
  };
8035458fb   Arnaldo Carvalho de Melo   perf options: Typ...
168
  extern bool perf_host, perf_guest;
fbe96f29c   Stephane Eranian   perf tools: Make ...
169
  extern const char perf_version_string[];
a1645ce12   Zhang, Yanmin   perf: 'perf kvm' ...
170

3af6e3386   Arnaldo Carvalho de Melo   perf ui browser: ...
171
  void pthread__unblock_sigwinch(void);
0f82ebc45   Arnaldo Carvalho de Melo   perf evsel: Intro...
172
173
174
175
  struct perf_record_opts {
  	pid_t	     target_pid;
  	pid_t	     target_tid;
  	bool	     call_graph;
ed80f5813   Arnaldo Carvalho de Melo   perf record: Move...
176
  	bool	     group;
0f82ebc45   Arnaldo Carvalho de Melo   perf evsel: Intro...
177
178
179
180
  	bool	     inherit_stat;
  	bool	     no_delay;
  	bool	     no_inherit;
  	bool	     no_samples;
35b9d88ec   Arnaldo Carvalho de Melo   perf evlist: Intr...
181
  	bool	     pipe_output;
0f82ebc45   Arnaldo Carvalho de Melo   perf evsel: Intro...
182
183
184
185
186
  	bool	     raw_samples;
  	bool	     sample_address;
  	bool	     sample_time;
  	bool	     sample_id_all_avail;
  	bool	     system_wide;
3e76ac78b   Andrew Vagin   perf record: Add ...
187
  	bool	     period;
0f82ebc45   Arnaldo Carvalho de Melo   perf evsel: Intro...
188
  	unsigned int freq;
01c2d99bc   Arnaldo Carvalho de Melo   perf record: Move...
189
  	unsigned int mmap_pages;
0f82ebc45   Arnaldo Carvalho de Melo   perf evsel: Intro...
190
191
192
193
194
  	unsigned int user_freq;
  	u64	     default_interval;
  	u64	     user_interval;
  	const char   *cpu_list;
  };
6eda5838b   Thomas Gleixner   perfcounter tools...
195
  #endif