blob: ee959659b778b4a238cd0ab760003f3be917c382 [file] [log] [blame]
Thomas Gleixner6eda5832009-05-01 18:29:57 +02001#ifndef _PERF_PERF_H
2#define _PERF_PERF_H
3
Jiri Olsa43599d12014-05-05 12:53:20 +02004#include "perf-sys.h"
Peter Zijlstraa94d3422013-10-30 11:42:46 +01005
6#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
7
Peter Zijlstra1a482f32009-05-23 18:28:58 +02008#include <time.h>
9#include <unistd.h>
10#include <sys/types.h>
11#include <sys/syscall.h>
12
Borislav Petkovd944c4e2014-04-25 21:31:02 +020013#include <linux/types.h>
David Howellsd2709c72012-11-19 22:21:03 +000014#include <linux/perf_event.h>
Peter Zijlstra1a482f32009-05-23 18:28:58 +020015
Thomas Gleixnera92e702372009-05-01 18:39:47 +020016#ifndef NSEC_PER_SEC
17# define NSEC_PER_SEC 1000000000ULL
18#endif
David Ahern70f7b4a2013-08-07 21:56:38 -040019#ifndef NSEC_PER_USEC
20# define NSEC_PER_USEC 1000ULL
21#endif
Thomas Gleixnera92e702372009-05-01 18:39:47 +020022
23static inline unsigned long long rdclock(void)
24{
25 struct timespec ts;
26
27 clock_gettime(CLOCK_MONOTONIC, &ts);
28 return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
29}
Thomas Gleixner6eda5832009-05-01 18:29:57 +020030
Jiri Olsa52502bf2012-10-31 15:52:47 +010031extern bool test_attr__enabled;
32void test_attr__init(void);
33void test_attr__open(struct perf_event_attr *attr, pid_t pid, int cpu,
34 int fd, int group_fd, unsigned long flags);
35
Thomas Gleixner6eda5832009-05-01 18:29:57 +020036static inline int
Ingo Molnarcdd6c482009-09-21 12:02:48 +020037sys_perf_event_open(struct perf_event_attr *attr,
Thomas Gleixner6eda5832009-05-01 18:29:57 +020038 pid_t pid, int cpu, int group_fd,
39 unsigned long flags)
40{
Jiri Olsa52502bf2012-10-31 15:52:47 +010041 int fd;
42
43 fd = syscall(__NR_perf_event_open, attr, pid, cpu,
44 group_fd, flags);
45
46 if (unlikely(test_attr__enabled))
47 test_attr__open(attr, pid, cpu, fd, group_fd, flags);
48
49 return fd;
Thomas Gleixner6eda5832009-05-01 18:29:57 +020050}
51
Ingo Molnar85a9f922009-05-25 09:59:50 +020052#define MAX_NR_CPUS 256
Thomas Gleixner6eda5832009-05-01 18:29:57 +020053
Feng Tang70cb4e92012-10-30 11:56:02 +080054extern const char *input_name;
Arnaldo Carvalho de Melo80354582010-05-17 15:51:10 -030055extern bool perf_host, perf_guest;
Stephane Eranianfbe96f22011-09-30 15:40:40 +020056extern const char perf_version_string[];
Zhang, Yanmina1645ce2010-04-19 13:32:50 +080057
Arnaldo Carvalho de Melo3af6e332011-10-13 08:52:46 -030058void pthread__unblock_sigwinch(void);
59
Namhyung Kim12864b32012-04-26 14:15:22 +090060#include "util/target.h"
Namhyung Kimbea03402012-04-26 14:15:15 +090061
Arnaldo Carvalho de Melob4006792013-12-19 14:43:45 -030062struct record_opts {
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030063 struct target target;
Jiri Olsa26d33022012-08-07 15:20:47 +020064 int call_graph;
Jiri Olsaeb853e82014-02-03 12:44:42 +010065 bool call_graph_enabled;
Arnaldo Carvalho de Meloed80f582011-11-11 15:12:56 -020066 bool group;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020067 bool inherit_stat;
Arnaldo Carvalho de Melo509051e2014-01-14 17:52:14 -030068 bool no_buffering;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020069 bool no_inherit;
Adrian Hunter69e7e5b2013-11-18 11:55:57 +020070 bool no_inherit_set;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020071 bool no_samples;
72 bool raw_samples;
73 bool sample_address;
Andi Kleen05484292013-01-24 16:10:29 +010074 bool sample_weight;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020075 bool sample_time;
Andrew Vagin3e76ac72011-12-20 17:32:45 +030076 bool period;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020077 unsigned int freq;
Arnaldo Carvalho de Melo01c2d992011-11-09 09:16:26 -020078 unsigned int mmap_pages;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020079 unsigned int user_freq;
Stephane Eraniana00dc312012-05-25 23:13:44 +020080 u64 branch_stack;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020081 u64 default_interval;
82 u64 user_interval;
Jiri Olsa26d33022012-08-07 15:20:47 +020083 u16 stack_dump_size;
Andi Kleen475eeab2013-09-20 07:40:43 -070084 bool sample_transaction;
Andi Kleen6619a532014-01-11 13:38:27 -080085 unsigned initial_delay;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020086};
87
Thomas Gleixner6eda5832009-05-01 18:29:57 +020088#endif