Blame view

tools/perf/perf.h 4.07 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
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   Peter Zijlstra   perf_counter: Fix...
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   Martin Schwidefsky   [S390] Enable tic...
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   Paul Mundt   perf_counter tool...
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   Kyle McMartin   parisc: perf: wir...
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   Jens Axboe   sparc: add basic ...
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   Michael Cree   perf tools, Alpha...
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   Tony Luck   perf tools: Add i...
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   Jamie Iles   perf tools: Allow...
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   Will Deacon   perf, ARM: Modify...
63
  #define rmb()		((void(*)(void))0xffff0fa0)()
58e9f9413   Jamie Iles   perf tools: Allow...
64
65
  #define cpu_relax()	asm volatile("":::"memory")
  #endif
c1e028ef4   Deng-Cheng Zhu   perf, MIPS: Suppo...
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   Peter Zijlstra   perf_counter: Fix...
79
80
81
82
  #include <time.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <sys/syscall.h>
cdd6c482c   Ingo Molnar   perf: Do the big ...
83
  #include "../../include/linux/perf_event.h"
7c6a1c65b   Peter Zijlstra   perf_counter tool...
84
  #include "util/types.h"
8035458fb   Arnaldo Carvalho de Melo   perf options: Typ...
85
  #include <stdbool.h>
1a482f38c   Peter Zijlstra   perf_counter: Fix...
86

70082dd92   Arnaldo Carvalho de Melo   perf evsel: Intro...
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   Arnaldo Carvalho de Melo   perf record: Move...
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   Thomas Gleixner   perfcounter tools...
111
  /*
cdd6c482c   Ingo Molnar   perf: Do the big ...
112
   * prctl(PR_TASK_PERF_EVENTS_DISABLE) will (cheaply) disable all
6eda5838b   Thomas Gleixner   perfcounter tools...
113
114
   * counters in the current task.
   */
cdd6c482c   Ingo Molnar   perf: Do the big ...
115
116
  #define PR_TASK_PERF_EVENTS_DISABLE   31
  #define PR_TASK_PERF_EVENTS_ENABLE    32
6eda5838b   Thomas Gleixner   perfcounter tools...
117

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

8cb76d99d   Frederic Weisbecker   perf_counter tool...
154
155
156
  struct ip_callchain {
  	u64 nr;
  	u64 ips[0];
f5970550d   Peter Zijlstra   perf_counter tool...
157
  };
8035458fb   Arnaldo Carvalho de Melo   perf options: Typ...
158
  extern bool perf_host, perf_guest;
a1645ce12   Zhang, Yanmin   perf: 'perf kvm' ...
159

6eda5838b   Thomas Gleixner   perfcounter tools...
160
  #endif