]>
git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - tools/perf/tests/openat-syscall-tp-fields.c
1 // SPDX-License-Identifier: GPL-2.0
4 #include <linux/string.h>
10 #include "thread_map.h"
14 #include "util/mmap.h"
18 #define O_DIRECTORY 00200000
24 int test__syscall_openat_tp_fields(struct test
*test __maybe_unused
, int subtest __maybe_unused
)
26 struct record_opts opts
= {
36 const char *filename
= "/etc/passwd";
37 int flags
= O_RDONLY
| O_DIRECTORY
;
38 struct evlist
*evlist
= evlist__new();
40 int err
= -1, i
, nr_events
= 0, nr_polls
= 0;
41 char sbuf
[STRERR_BUFSIZE
];
44 pr_debug("%s: perf_evlist__new\n", __func__
);
48 evsel
= perf_evsel__newtp("syscalls", "sys_enter_openat");
50 pr_debug("%s: perf_evsel__newtp\n", __func__
);
51 goto out_delete_evlist
;
54 evlist__add(evlist
, evsel
);
56 err
= perf_evlist__create_maps(evlist
, &opts
.target
);
58 pr_debug("%s: perf_evlist__create_maps\n", __func__
);
59 goto out_delete_evlist
;
62 perf_evsel__config(evsel
, &opts
, NULL
);
64 perf_thread_map__set_pid(evlist
->core
.threads
, 0, getpid());
66 err
= evlist__open(evlist
);
68 pr_debug("perf_evlist__open: %s\n",
69 str_error_r(errno
, sbuf
, sizeof(sbuf
)));
70 goto out_delete_evlist
;
73 err
= evlist__mmap(evlist
, UINT_MAX
);
75 pr_debug("evlist__mmap: %s\n",
76 str_error_r(errno
, sbuf
, sizeof(sbuf
)));
77 goto out_delete_evlist
;
80 evlist__enable(evlist
);
85 openat(AT_FDCWD
, filename
, flags
);
88 int before
= nr_events
;
90 for (i
= 0; i
< evlist
->nr_mmaps
; i
++) {
91 union perf_event
*event
;
94 md
= &evlist
->mmap
[i
];
95 if (perf_mmap__read_init(md
) < 0)
98 while ((event
= perf_mmap__read_event(md
)) != NULL
) {
99 const u32 type
= event
->header
.type
;
101 struct perf_sample sample
;
105 if (type
!= PERF_RECORD_SAMPLE
) {
106 perf_mmap__consume(md
);
110 err
= perf_evsel__parse_sample(evsel
, event
, &sample
);
112 pr_debug("Can't parse sample, err = %d\n", err
);
113 goto out_delete_evlist
;
116 tp_flags
= perf_evsel__intval(evsel
, &sample
, "flags");
118 if (flags
!= tp_flags
) {
119 pr_debug("%s: Expected flags=%#x, got %#x\n",
120 __func__
, flags
, tp_flags
);
121 goto out_delete_evlist
;
126 perf_mmap__read_done(md
);
129 if (nr_events
== before
)
130 perf_evlist__poll(evlist
, 10);
132 if (++nr_polls
> 5) {
133 pr_debug("%s: no events!\n", __func__
);
134 goto out_delete_evlist
;
140 evlist__delete(evlist
);