-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 339010 b: refs/heads/master c: d3b59a3 h: refs/heads/master v: v3
- Loading branch information
Jiri Olsa
authored and
Arnaldo Carvalho de Melo
committed
Nov 14, 2012
1 parent
9cfd8d9
commit 979766d
Showing
6 changed files
with
104 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 0a4e1ae6808a28a92573550603121b146b11312e | ||
refs/heads/master: d3b59a38bcdab4248134023c2c5dfabee5a4878e |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
#include "thread_map.h" | ||
#include "evsel.h" | ||
#include "debug.h" | ||
#include "tests.h" | ||
|
||
int test__open_syscall_event(void) | ||
{ | ||
int err = -1, fd; | ||
struct thread_map *threads; | ||
struct perf_evsel *evsel; | ||
struct perf_event_attr attr; | ||
unsigned int nr_open_calls = 111, i; | ||
int id = trace_event__id("sys_enter_open"); | ||
|
||
if (id < 0) { | ||
pr_debug("is debugfs mounted on /sys/kernel/debug?\n"); | ||
return -1; | ||
} | ||
|
||
threads = thread_map__new(-1, getpid(), UINT_MAX); | ||
if (threads == NULL) { | ||
pr_debug("thread_map__new\n"); | ||
return -1; | ||
} | ||
|
||
memset(&attr, 0, sizeof(attr)); | ||
attr.type = PERF_TYPE_TRACEPOINT; | ||
attr.config = id; | ||
evsel = perf_evsel__new(&attr, 0); | ||
if (evsel == NULL) { | ||
pr_debug("perf_evsel__new\n"); | ||
goto out_thread_map_delete; | ||
} | ||
|
||
if (perf_evsel__open_per_thread(evsel, threads) < 0) { | ||
pr_debug("failed to open counter: %s, " | ||
"tweak /proc/sys/kernel/perf_event_paranoid?\n", | ||
strerror(errno)); | ||
goto out_evsel_delete; | ||
} | ||
|
||
for (i = 0; i < nr_open_calls; ++i) { | ||
fd = open("/etc/passwd", O_RDONLY); | ||
close(fd); | ||
} | ||
|
||
if (perf_evsel__read_on_cpu(evsel, 0, 0) < 0) { | ||
pr_debug("perf_evsel__read_on_cpu\n"); | ||
goto out_close_fd; | ||
} | ||
|
||
if (evsel->counts->cpu[0].val != nr_open_calls) { | ||
pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls, got %" PRIu64 "\n", | ||
nr_open_calls, evsel->counts->cpu[0].val); | ||
goto out_close_fd; | ||
} | ||
|
||
err = 0; | ||
out_close_fd: | ||
perf_evsel__close_fd(evsel, 1, threads->nr); | ||
out_evsel_delete: | ||
perf_evsel__delete(evsel); | ||
out_thread_map_delete: | ||
thread_map__delete(threads); | ||
return err; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,11 @@ | ||
#ifndef TESTS_H | ||
#define TESTS_H | ||
|
||
/* Tests */ | ||
int test__vmlinux_matches_kallsyms(void); | ||
int test__open_syscall_event(void); | ||
|
||
/* Util */ | ||
int trace_event__id(const char *evname); | ||
|
||
#endif /* TESTS_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#include <stdio.h> | ||
#include <unistd.h> | ||
#include <stdlib.h> | ||
#include <sys/types.h> | ||
#include <sys/stat.h> | ||
#include <fcntl.h> | ||
#include "tests.h" | ||
#include "debugfs.h" | ||
|
||
int trace_event__id(const char *evname) | ||
{ | ||
char *filename; | ||
int err = -1, fd; | ||
|
||
if (asprintf(&filename, | ||
"%s/syscalls/%s/id", | ||
tracing_events_path, evname) < 0) | ||
return -1; | ||
|
||
fd = open(filename, O_RDONLY); | ||
if (fd >= 0) { | ||
char id[16]; | ||
if (read(fd, id, sizeof(id)) > 0) | ||
err = atoi(id); | ||
close(fd); | ||
} | ||
|
||
free(filename); | ||
return err; | ||
} |