Skip to content
Navigation Menu
Toggle navigation
Sign in
In this repository
All GitHub Enterprise
↵
Jump to
↵
No suggested jump to results
In this repository
All GitHub Enterprise
↵
Jump to
↵
In this organization
All GitHub Enterprise
↵
Jump to
↵
In this repository
All GitHub Enterprise
↵
Jump to
↵
Sign in
Reseting focus
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
mariux64
/
linux
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
2
Pull requests
0
Actions
Projects
0
Wiki
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security
Insights
Files
06933e3
Documentation
arch
block
crypto
drivers
firmware
fs
include
init
ipc
kernel
lib
mm
net
samples
scripts
security
sound
tools
firewire
hv
include
lguest
lib
nfsd
perf
Documentation
arch
bench
config
python
scripts
tests
attr
attr.c
attr.py
bp_signal.c
bp_signal_overflow.c
builtin-test.c
dso-data.c
evsel-roundtrip-name.c
evsel-tp-sched.c
hists_link.c
mmap-basic.c
open-syscall-all-cpus.c
open-syscall-tp-fields.c
open-syscall.c
parse-events.c
perf-record.c
pmu.c
python-use.c
rdpmc.c
tests.h
vmlinux-kallsyms.c
ui
util
.gitignore
CREDITS
MANIFEST
Makefile
bash_completion
builtin-annotate.c
builtin-bench.c
builtin-buildid-cache.c
builtin-buildid-list.c
builtin-diff.c
builtin-evlist.c
builtin-help.c
builtin-inject.c
builtin-kmem.c
builtin-kvm.c
builtin-list.c
builtin-lock.c
builtin-probe.c
builtin-record.c
builtin-report.c
builtin-sched.c
builtin-script.c
builtin-stat.c
builtin-timechart.c
builtin-top.c
builtin-trace.c
builtin.h
command-list.txt
design.txt
perf-archive.sh
perf.c
perf.h
power
scripts
testing
usb
virtio
vm
Makefile
usr
virt
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile
README
REPORTING-BUGS
Breadcrumbs
linux
/
tools
/
perf
/
tests
/
bp_signal_overflow.c
Blame
Blame
Latest commit
Jiri Olsa
and
Arnaldo Carvalho de Melo
perf tests: Test breakpoint overflow signal handler counts
Mar 15, 2013
06933e3
·
Mar 15, 2013
History
History
126 lines (99 loc) · 2.5 KB
Breadcrumbs
linux
/
tools
/
perf
/
tests
/
bp_signal_overflow.c
Top
File metadata and controls
Code
Blame
126 lines (99 loc) · 2.5 KB
Raw
/* * Originally done by Vince Weaver <vincent.weaver@maine.edu> for * perf_event_tests (git://github.com/deater/perf_event_tests) */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h> #include <time.h> #include <fcntl.h> #include <signal.h> #include <sys/mman.h> #include <linux/compiler.h> #include <linux/hw_breakpoint.h> #include "tests.h" #include "debug.h" #include "perf.h" static int overflows; __attribute__ ((noinline)) static int test_function(void) { return time(NULL); } static void sig_handler(int signum __maybe_unused, siginfo_t *oh __maybe_unused, void *uc __maybe_unused) { overflows++; } static long long bp_count(int fd) { long long count; int ret; ret = read(fd, &count, sizeof(long long)); if (ret != sizeof(long long)) { pr_debug("failed to read: %d\n", ret); return TEST_FAIL; } return count; } #define EXECUTIONS 10000 #define THRESHOLD 100 int test__bp_signal_overflow(void) { struct perf_event_attr pe; struct sigaction sa; long long count; int fd, i, fails = 0; /* setup SIGIO signal handler */ memset(&sa, 0, sizeof(struct sigaction)); sa.sa_sigaction = (void *) sig_handler; sa.sa_flags = SA_SIGINFO; if (sigaction(SIGIO, &sa, NULL) < 0) { pr_debug("failed setting up signal handler\n"); return TEST_FAIL; } memset(&pe, 0, sizeof(struct perf_event_attr)); pe.type = PERF_TYPE_BREAKPOINT; pe.size = sizeof(struct perf_event_attr); pe.config = 0; pe.bp_type = HW_BREAKPOINT_X; pe.bp_addr = (unsigned long) test_function; pe.bp_len = sizeof(long); pe.sample_period = THRESHOLD; pe.sample_type = PERF_SAMPLE_IP; pe.wakeup_events = 1; pe.disabled = 1; pe.exclude_kernel = 1; pe.exclude_hv = 1; fd = sys_perf_event_open(&pe, 0, -1, -1, 0); if (fd < 0) { pr_debug("failed opening event %llx\n", pe.config); return TEST_FAIL; } fcntl(fd, F_SETFL, O_RDWR|O_NONBLOCK|O_ASYNC); fcntl(fd, F_SETSIG, SIGIO); fcntl(fd, F_SETOWN, getpid()); ioctl(fd, PERF_EVENT_IOC_RESET, 0); ioctl(fd, PERF_EVENT_IOC_ENABLE, 0); for (i = 0; i < EXECUTIONS; i++) test_function(); ioctl(fd, PERF_EVENT_IOC_DISABLE, 0); count = bp_count(fd); close(fd); pr_debug("count %lld, overflow %d\n", count, overflows); if (count != EXECUTIONS) { pr_debug("\tWrong number of executions %lld != %d\n", count, EXECUTIONS); fails++; } if (overflows != EXECUTIONS / THRESHOLD) { pr_debug("\tWrong number of overflows %d != %d\n", overflows, EXECUTIONS / THRESHOLD); fails++; } return fails ? TEST_FAIL : TEST_OK; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
You can’t perform that action at this time.