diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-18 15:38:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-18 15:38:40 -0500 |
commit | 9ca2c16f3b4311affcc80c2d0516b2b09709b7d9 (patch) | |
tree | 0913ad49c3abdbd3a6077ac3aa9e9dabc41be271 /tools | |
parent | 2d6c4e40ab7eb1ab7b8cd4a232b0c9554ea8de9b (diff) | |
parent | 297f9233b53a08fd457815e19f1d6f2c3389857b (diff) |
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf updates from Thomas Gleixner:
"Perf tool updates and kprobe fixes:
- perf_mmap overwrite mode fixes/overhaul, prep work to get 'perf
top' using it, making it bearable to use it in large core count
systems such as Knights Landing/Mill Intel systems (Kan Liang)
- s/390 now uses syscall.tbl, just like x86-64 to generate the
syscall table id -> string tables used by 'perf trace' (Hendrik
Brueckner)
- Use strtoull() instead of home grown function (Andy Shevchenko)
- Synchronize kernel ABI headers, v4.16-rc1 (Ingo Molnar)
- Document missing 'perf data --force' option (Sangwon Hong)
- Add perf vendor JSON metrics for ARM Cortex-A53 Processor (William
Cohen)
- Improve error handling and error propagation of ftrace based
kprobes so failures when installing kprobes are not silently
ignored and create disfunctional tracepoints"
* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits)
kprobes: Propagate error from disarm_kprobe_ftrace()
kprobes: Propagate error from arm_kprobe_ftrace()
Revert "tools include s390: Grab a copy of arch/s390/include/uapi/asm/unistd.h"
perf s390: Rework system call table creation by using syscall.tbl
perf s390: Grab a copy of arch/s390/kernel/syscall/syscall.tbl
tools/headers: Synchronize kernel ABI headers, v4.16-rc1
perf test: Fix test trace+probe_libc_inet_pton.sh for s390x
perf data: Document missing --force option
perf tools: Substitute yet another strtoull()
perf top: Check the latency of perf_top__mmap_read()
perf top: Switch default mode to overwrite mode
perf top: Remove lost events checking
perf hists browser: Add parameter to disable lost event warning
perf top: Add overwrite fall back
perf evsel: Expose the perf_missing_features struct
perf top: Check per-event overwrite term
perf mmap: Discard legacy interface for mmap read
perf test: Update mmap read functions for backward-ring-buffer test
perf mmap: Introduce perf_mmap__read_event()
perf mmap: Introduce perf_mmap__read_done()
...
Diffstat (limited to 'tools')
33 files changed, 1067 insertions, 578 deletions
diff --git a/tools/arch/powerpc/include/uapi/asm/kvm.h b/tools/arch/powerpc/include/uapi/asm/kvm.h index 637b7263cb86..833ed9a16adf 100644 --- a/tools/arch/powerpc/include/uapi/asm/kvm.h +++ b/tools/arch/powerpc/include/uapi/asm/kvm.h | |||
@@ -632,6 +632,8 @@ struct kvm_ppc_cpu_char { | |||
632 | #define KVM_REG_PPC_TIDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbc) | 632 | #define KVM_REG_PPC_TIDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbc) |
633 | #define KVM_REG_PPC_PSSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd) | 633 | #define KVM_REG_PPC_PSSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd) |
634 | 634 | ||
635 | #define KVM_REG_PPC_DEC_EXPIRY (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbe) | ||
636 | |||
635 | /* Transactional Memory checkpointed state: | 637 | /* Transactional Memory checkpointed state: |
636 | * This is all GPRs, all VSX regs and a subset of SPRs | 638 | * This is all GPRs, all VSX regs and a subset of SPRs |
637 | */ | 639 | */ |
diff --git a/tools/arch/s390/include/uapi/asm/unistd.h b/tools/arch/s390/include/uapi/asm/unistd.h deleted file mode 100644 index 725120939051..000000000000 --- a/tools/arch/s390/include/uapi/asm/unistd.h +++ /dev/null | |||
@@ -1,412 +0,0 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
2 | /* | ||
3 | * S390 version | ||
4 | * | ||
5 | * Derived from "include/asm-i386/unistd.h" | ||
6 | */ | ||
7 | |||
8 | #ifndef _UAPI_ASM_S390_UNISTD_H_ | ||
9 | #define _UAPI_ASM_S390_UNISTD_H_ | ||
10 | |||
11 | /* | ||
12 | * This file contains the system call numbers. | ||
13 | */ | ||
14 | |||
15 | #define __NR_exit 1 | ||
16 | #define __NR_fork 2 | ||
17 | #define __NR_read 3 | ||
18 | #define __NR_write 4 | ||
19 | #define __NR_open 5 | ||
20 | #define __NR_close 6 | ||
21 | #define __NR_restart_syscall 7 | ||
22 | #define __NR_creat 8 | ||
23 | #define __NR_link 9 | ||
24 | #define __NR_unlink 10 | ||
25 | #define __NR_execve 11 | ||
26 | #define __NR_chdir 12 | ||
27 | #define __NR_mknod 14 | ||
28 | #define __NR_chmod 15 | ||
29 | #define __NR_lseek 19 | ||
30 | #define __NR_getpid 20 | ||
31 | #define __NR_mount 21 | ||
32 | #define __NR_umount 22 | ||
33 | #define __NR_ptrace 26 | ||
34 | #define __NR_alarm 27 | ||
35 | #define __NR_pause 29 | ||
36 | #define __NR_utime 30 | ||
37 | #define __NR_access 33 | ||
38 | #define __NR_nice 34 | ||
39 | #define __NR_sync 36 | ||
40 | #define __NR_kill 37 | ||
41 | #define __NR_rename 38 | ||
42 | #define __NR_mkdir 39 | ||
43 | #define __NR_rmdir 40 | ||
44 | #define __NR_dup 41 | ||
45 | #define __NR_pipe 42 | ||
46 | #define __NR_times 43 | ||
47 | #define __NR_brk 45 | ||
48 | #define __NR_signal 48 | ||
49 | #define __NR_acct 51 | ||
50 | #define __NR_umount2 52 | ||
51 | #define __NR_ioctl 54 | ||
52 | #define __NR_fcntl 55 | ||
53 | #define __NR_setpgid 57 | ||
54 | #define __NR_umask 60 | ||
55 | #define __NR_chroot 61 | ||
56 | #define __NR_ustat 62 | ||
57 | #define __NR_dup2 63 | ||
58 | #define __NR_getppid 64 | ||
59 | #define __NR_getpgrp 65 | ||
60 | #define __NR_setsid 66 | ||
61 | #define __NR_sigaction 67 | ||
62 | #define __NR_sigsuspend 72 | ||
63 | #define __NR_sigpending 73 | ||
64 | #define __NR_sethostname 74 | ||
65 | #define __NR_setrlimit 75 | ||
66 | #define __NR_getrusage 77 | ||
67 | #define __NR_gettimeofday 78 | ||
68 | #define __NR_settimeofday 79 | ||
69 | #define __NR_symlink 83 | ||
70 | #define __NR_readlink 85 | ||
71 | #define __NR_uselib 86 | ||
72 | #define __NR_swapon 87 | ||
73 | #define __NR_reboot 88 | ||
74 | #define __NR_readdir 89 | ||
75 | #define __NR_mmap 90 | ||
76 | #define __NR_munmap 91 | ||
77 | #define __NR_truncate 92 | ||
78 | #define __NR_ftruncate 93 | ||
79 | #define __NR_fchmod 94 | ||
80 | #define __NR_getpriority 96 | ||
81 | #define __NR_setpriority 97 | ||
82 | #define __NR_statfs 99 | ||
83 | #define __NR_fstatfs 100 | ||
84 | #define __NR_socketcall 102 | ||
85 | #define __NR_syslog 103 | ||
86 | #define __NR_setitimer 104 | ||
87 | #define __NR_getitimer 105 | ||
88 | #define __NR_stat 106 | ||
89 | #define __NR_lstat 107 | ||
90 | #define __NR_fstat 108 | ||
91 | #define __NR_lookup_dcookie 110 | ||
92 | #define __NR_vhangup 111 | ||
93 | #define __NR_idle 112 | ||
94 | #define __NR_wait4 114 | ||
95 | #define __NR_swapoff 115 | ||
96 | #define __NR_sysinfo 116 | ||
97 | #define __NR_ipc 117 | ||
98 | #define __NR_fsync 118 | ||
99 | #define __NR_sigreturn 119 | ||
100 | #define __NR_clone 120 | ||
101 | #define __NR_setdomainname 121 | ||
102 | #define __NR_uname 122 | ||
103 | #define __NR_adjtimex 124 | ||
104 | #define __NR_mprotect 125 | ||
105 | #define __NR_sigprocmask 126 | ||
106 | #define __NR_create_module 127 | ||
107 | #define __NR_init_module 128 | ||
108 | #define __NR_delete_module 129 | ||
109 | #define __NR_get_kernel_syms 130 | ||
110 | #define __NR_quotactl 131 | ||
111 | #define __NR_getpgid 132 | ||
112 | #define __NR_fchdir 133 | ||
113 | #define __NR_bdflush 134 | ||
114 | #define __NR_sysfs 135 | ||
115 | #define __NR_personality 136 | ||
116 | #define __NR_afs_syscall 137 /* Syscall for Andrew File System */ | ||
117 | #define __NR_getdents 141 | ||
118 | #define __NR_flock 143 | ||
119 | #define __NR_msync 144 | ||
120 | #define __NR_readv 145 | ||
121 | #define __NR_writev 146 | ||
122 | #define __NR_getsid 147 | ||
123 | #define __NR_fdatasync 148 | ||
124 | #define __NR__sysctl 149 | ||
125 | #define __NR_mlock 150 | ||
126 | #define __NR_munlock 151 | ||
127 | #define __NR_mlockall 152 | ||
128 | #define __NR_munlockall 153 | ||
129 | #define __NR_sched_setparam 154 | ||
130 | #define __NR_sched_getparam 155 | ||
131 | #define __NR_sched_setscheduler 156 | ||
132 | #define __NR_sched_getscheduler 157 | ||
133 | #define __NR_sched_yield 158 | ||
134 | #define __NR_sched_get_priority_max 159 | ||
135 | #define __NR_sched_get_priority_min 160 | ||
136 | #define __NR_sched_rr_get_interval 161 | ||
137 | #define __NR_nanosleep 162 | ||
138 | #define __NR_mremap 163 | ||
139 | #define __NR_query_module 167 | ||
140 | #define __NR_poll 168 | ||
141 | #define __NR_nfsservctl 169 | ||
142 | #define __NR_prctl 172 | ||
143 | #define __NR_rt_sigreturn 173 | ||
144 | #define __NR_rt_sigaction 174 | ||
145 | #define __NR_rt_sigprocmask 175 | ||
146 | #define __NR_rt_sigpending 176 | ||
147 | #define __NR_rt_sigtimedwait 177 | ||
148 | #define __NR_rt_sigqueueinfo 178 | ||
149 | #define __NR_rt_sigsuspend 179 | ||
150 | #define __NR_pread64 180 | ||
151 | #define __NR_pwrite64 181 | ||
152 | #define __NR_getcwd 183 | ||
153 | #define __NR_capget 184 | ||
154 | #define __NR_capset 185 | ||
155 | #define __NR_sigaltstack 186 | ||
156 | #define __NR_sendfile 187 | ||
157 | #define __NR_getpmsg 188 | ||
158 | #define __NR_putpmsg 189 | ||
159 | #define __NR_vfork 190 | ||
160 | #define __NR_pivot_root 217 | ||
161 | #define __NR_mincore 218 | ||
162 | #define __NR_madvise 219 | ||
163 | #define __NR_getdents64 220 | ||
164 | #define __NR_readahead 222 | ||
165 | #define __NR_setxattr 224 | ||
166 | #define __NR_lsetxattr 225 | ||
167 | #define __NR_fsetxattr 226 | ||
168 | #define __NR_getxattr 227 | ||
169 | #define __NR_lgetxattr 228 | ||
170 | #define __NR_fgetxattr 229 | ||
171 | #define __NR_listxattr 230 | ||
172 | #define __NR_llistxattr 231 | ||
173 | #define __NR_flistxattr 232 | ||
174 | #define __NR_removexattr 233 | ||
175 | #define __NR_lremovexattr 234 | ||
176 | #define __NR_fremovexattr 235 | ||
177 | #define __NR_gettid 236 | ||
178 | #define __NR_tkill 237 | ||
179 | #define __NR_futex 238 | ||
180 | #define __NR_sched_setaffinity 239 | ||
181 | #define __NR_sched_getaffinity 240 | ||
182 | #define __NR_tgkill 241 | ||
183 | /* Number 242 is reserved for tux */ | ||
184 | #define __NR_io_setup 243 | ||
185 | #define __NR_io_destroy 244 | ||
186 | #define __NR_io_getevents 245 | ||
187 | #define __NR_io_submit 246 | ||
188 | #define __NR_io_cancel 247 | ||
189 | #define __NR_exit_group 248 | ||
190 | #define __NR_epoll_create 249 | ||
191 | #define __NR_epoll_ctl 250 | ||
192 | #define __NR_epoll_wait 251 | ||
193 | #define __NR_set_tid_address 252 | ||
194 | #define __NR_fadvise64 253 | ||
195 | #define __NR_timer_create 254 | ||
196 | #define __NR_timer_settime 255 | ||
197 | #define __NR_timer_gettime 256 | ||
198 | #define __NR_timer_getoverrun 257 | ||
199 | #define __NR_timer_delete 258 | ||
200 | #define __NR_clock_settime 259 | ||
201 | #define __NR_clock_gettime 260 | ||
202 | #define __NR_clock_getres 261 | ||
203 | #define __NR_clock_nanosleep 262 | ||
204 | /* Number 263 is reserved for vserver */ | ||
205 | #define __NR_statfs64 265 | ||
206 | #define __NR_fstatfs64 266 | ||
207 | #define __NR_remap_file_pages 267 | ||
208 | #define __NR_mbind 268 | ||
209 | #define __NR_get_mempolicy 269 | ||
210 | #define __NR_set_mempolicy 270 | ||
211 | #define __NR_mq_open 271 | ||
212 | #define __NR_mq_unlink 272 | ||
213 | #define __NR_mq_timedsend 273 | ||
214 | #define __NR_mq_timedreceive 274 | ||
215 | #define __NR_mq_notify 275 | ||
216 | #define __NR_mq_getsetattr 276 | ||
217 | #define __NR_kexec_load 277 | ||
218 | #define __NR_add_key 278 | ||
219 | #define __NR_request_key 279 | ||
220 | #define __NR_keyctl 280 | ||
221 | #define __NR_waitid 281 | ||
222 | #define __NR_ioprio_set 282 | ||
223 | #define __NR_ioprio_get 283 | ||
224 | #define __NR_inotify_init 284 | ||
225 | #define __NR_inotify_add_watch 285 | ||
226 | #define __NR_inotify_rm_watch 286 | ||
227 | #define __NR_migrate_pages 287 | ||
228 | #define __NR_openat 288 | ||
229 | #define __NR_mkdirat 289 | ||
230 | #define __NR_mknodat 290 | ||
231 | #define __NR_fchownat 291 | ||
232 | #define __NR_futimesat 292 | ||
233 | #define __NR_unlinkat 294 | ||
234 | #define __NR_renameat 295 | ||
235 | #define __NR_linkat 296 | ||
236 | #define __NR_symlinkat 297 | ||
237 | #define __NR_readlinkat 298 | ||
238 | #define __NR_fchmodat 299 | ||
239 | #define __NR_faccessat 300 | ||
240 | #define __NR_pselect6 301 | ||
241 | #define __NR_ppoll 302 | ||
242 | #define __NR_unshare 303 | ||
243 | #define __NR_set_robust_list 304 | ||
244 | #define __NR_get_robust_list 305 | ||
245 | #define __NR_splice 306 | ||
246 | #define __NR_sync_file_range 307 | ||
247 | #define __NR_tee 308 | ||
248 | #define __NR_vmsplice 309 | ||
249 | #define __NR_move_pages 310 | ||
250 | #define __NR_getcpu 311 | ||
251 | #define __NR_epoll_pwait 312 | ||
252 | #define __NR_utimes 313 | ||
253 | #define __NR_fallocate 314 | ||
254 | #define __NR_utimensat 315 | ||
255 | #define __NR_signalfd 316 | ||
256 | #define __NR_timerfd 317 | ||
257 | #define __NR_eventfd 318 | ||
258 | #define __NR_timerfd_create 319 | ||
259 | #define __NR_timerfd_settime 320 | ||
260 | #define __NR_timerfd_gettime 321 | ||
261 | #define __NR_signalfd4 322 | ||
262 | #define __NR_eventfd2 323 | ||
263 | #define __NR_inotify_init1 324 | ||
264 | #define __NR_pipe2 325 | ||
265 | #define __NR_dup3 326 | ||
266 | #define __NR_epoll_create1 327 | ||
267 | #define __NR_preadv 328 | ||
268 | #define __NR_pwritev 329 | ||
269 | #define __NR_rt_tgsigqueueinfo 330 | ||
270 | #define __NR_perf_event_open 331 | ||
271 | #define __NR_fanotify_init 332 | ||
272 | #define __NR_fanotify_mark 333 | ||
273 | #define __NR_prlimit64 334 | ||
274 | #define __NR_name_to_handle_at 335 | ||
275 | #define __NR_open_by_handle_at 336 | ||
276 | #define __NR_clock_adjtime 337 | ||
277 | #define __NR_syncfs 338 | ||
278 | #define __NR_setns 339 | ||
279 | #define __NR_process_vm_readv 340 | ||
280 | #define __NR_process_vm_writev 341 | ||
281 | #define __NR_s390_runtime_instr 342 | ||
282 | #define __NR_kcmp 343 | ||
283 | #define __NR_finit_module 344 | ||
284 | #define __NR_sched_setattr 345 | ||
285 | #define __NR_sched_getattr 346 | ||
286 | #define __NR_renameat2 347 | ||
287 | #define __NR_seccomp 348 | ||
288 | #define __NR_getrandom 349 | ||
289 | #define __NR_memfd_create 350 | ||
290 | #define __NR_bpf 351 | ||
291 | #define __NR_s390_pci_mmio_write 352 | ||
292 | #define __NR_s390_pci_mmio_read 353 | ||
293 | #define __NR_execveat 354 | ||
294 | #define __NR_userfaultfd 355 | ||
295 | #define __NR_membarrier 356 | ||
296 | #define __NR_recvmmsg 357 | ||
297 | #define __NR_sendmmsg 358 | ||
298 | #define __NR_socket 359 | ||
299 | #define __NR_socketpair 360 | ||
300 | #define __NR_bind 361 | ||
301 | #define __NR_connect 362 | ||
302 | #define __NR_listen 363 | ||
303 | #define __NR_accept4 364 | ||
304 | #define __NR_getsockopt 365 | ||
305 | #define __NR_setsockopt 366 | ||
306 | #define __NR_getsockname 367 | ||
307 | #define __NR_getpeername 368 | ||
308 | #define __NR_sendto 369 | ||
309 | #define __NR_sendmsg 370 | ||
310 | #define __NR_recvfrom 371 | ||
311 | #define __NR_recvmsg 372 | ||
312 | #define __NR_shutdown 373 | ||
313 | #define __NR_mlock2 374 | ||
314 | #define __NR_copy_file_range 375 | ||
315 | #define __NR_preadv2 376 | ||
316 | #define __NR_pwritev2 377 | ||
317 | #define __NR_s390_guarded_storage 378 | ||
318 | #define __NR_statx 379 | ||
319 | #define __NR_s390_sthyi 380 | ||
320 | #define NR_syscalls 381 | ||
321 | |||
322 | /* | ||
323 | * There are some system calls that are not present on 64 bit, some | ||
324 | * have a different name although they do the same (e.g. __NR_chown32 | ||
325 | * is __NR_chown on 64 bit). | ||
326 | */ | ||
327 | #ifndef __s390x__ | ||
328 | |||
329 | #define __NR_time 13 | ||
330 | #define __NR_lchown 16 | ||
331 | #define __NR_setuid 23 | ||
332 | #define __NR_getuid 24 | ||
333 | #define __NR_stime 25 | ||
334 | #define __NR_setgid 46 | ||
335 | #define __NR_getgid 47 | ||
336 | #define __NR_geteuid 49 | ||
337 | #define __NR_getegid 50 | ||
338 | #define __NR_setreuid 70 | ||
339 | #define __NR_setregid 71 | ||
340 | #define __NR_getrlimit 76 | ||
341 | #define __NR_getgroups 80 | ||
342 | #define __NR_setgroups 81 | ||
343 | #define __NR_fchown 95 | ||
344 | #define __NR_ioperm 101 | ||
345 | #define __NR_setfsuid 138 | ||
346 | #define __NR_setfsgid 139 | ||
347 | #define __NR__llseek 140 | ||
348 | #define __NR__newselect 142 | ||
349 | #define __NR_setresuid 164 | ||
350 | #define __NR_getresuid 165 | ||
351 | #define __NR_setresgid 170 | ||
352 | #define __NR_getresgid 171 | ||
353 | #define __NR_chown 182 | ||
354 | #define __NR_ugetrlimit 191 /* SuS compliant getrlimit */ | ||
355 | #define __NR_mmap2 192 | ||
356 | #define __NR_truncate64 193 | ||
357 | #define __NR_ftruncate64 194 | ||
358 | #define __NR_stat64 195 | ||
359 | #define __NR_lstat64 196 | ||
360 | #define __NR_fstat64 197 | ||
361 | #define __NR_lchown32 198 | ||
362 | #define __NR_getuid32 199 | ||
363 | #define __NR_getgid32 200 | ||
364 | #define __NR_geteuid32 201 | ||
365 | #define __NR_getegid32 202 | ||
366 | #define __NR_setreuid32 203 | ||
367 | #define __NR_setregid32 204 | ||
368 | #define __NR_getgroups32 205 | ||
369 | #define __NR_setgroups32 206 | ||
370 | #define __NR_fchown32 207 | ||
371 | #define __NR_setresuid32 208 | ||
372 | #define __NR_getresuid32 209 | ||
373 | #define __NR_setresgid32 210 | ||
374 | #define __NR_getresgid32 211 | ||
375 | #define __NR_chown32 212 | ||
376 | #define __NR_setuid32 213 | ||
377 | #define __NR_setgid32 214 | ||
378 | #define __NR_setfsuid32 215 | ||
379 | #define __NR_setfsgid32 216 | ||
380 | #define __NR_fcntl64 221 | ||
381 | #define __NR_sendfile64 223 | ||
382 | #define __NR_fadvise64_64 264 | ||
383 | #define __NR_fstatat64 293 | ||
384 | |||
385 | #else | ||
386 | |||
387 | #define __NR_select 142 | ||
388 | #define __NR_getrlimit 191 /* SuS compliant getrlimit */ | ||
389 | #define __NR_lchown 198 | ||
390 | #define __NR_getuid 199 | ||
391 | #define __NR_getgid 200 | ||
392 | #define __NR_geteuid 201 | ||
393 | #define __NR_getegid 202 | ||
394 | #define __NR_setreuid 203 | ||
395 | #define __NR_setregid 204 | ||
396 | #define __NR_getgroups 205 | ||
397 | #define __NR_setgroups 206 | ||
398 | #define __NR_fchown 207 | ||
399 | #define __NR_setresuid 208 | ||
400 | #define __NR_getresuid 209 | ||
401 | #define __NR_setresgid 210 | ||
402 | #define __NR_getresgid 211 | ||
403 | #define __NR_chown 212 | ||
404 | #define __NR_setuid 213 | ||
405 | #define __NR_setgid 214 | ||
406 | #define __NR_setfsuid 215 | ||
407 | #define __NR_setfsgid 216 | ||
408 | #define __NR_newfstatat 293 | ||
409 | |||
410 | #endif | ||
411 | |||
412 | #endif /* _UAPI_ASM_S390_UNISTD_H_ */ | ||
diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h index 1d9199e1c2ad..0dfe4d3f74e2 100644 --- a/tools/arch/x86/include/asm/cpufeatures.h +++ b/tools/arch/x86/include/asm/cpufeatures.h | |||
@@ -210,6 +210,7 @@ | |||
210 | 210 | ||
211 | #define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */ | 211 | #define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */ |
212 | #define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* "" Fill RSB on context switches */ | 212 | #define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* "" Fill RSB on context switches */ |
213 | #define X86_FEATURE_SEV ( 7*32+20) /* AMD Secure Encrypted Virtualization */ | ||
213 | 214 | ||
214 | #define X86_FEATURE_USE_IBPB ( 7*32+21) /* "" Indirect Branch Prediction Barrier enabled */ | 215 | #define X86_FEATURE_USE_IBPB ( 7*32+21) /* "" Indirect Branch Prediction Barrier enabled */ |
215 | 216 | ||
diff --git a/tools/include/uapi/drm/i915_drm.h b/tools/include/uapi/drm/i915_drm.h index ac3c6503ca27..536ee4febd74 100644 --- a/tools/include/uapi/drm/i915_drm.h +++ b/tools/include/uapi/drm/i915_drm.h | |||
@@ -86,6 +86,62 @@ enum i915_mocs_table_index { | |||
86 | I915_MOCS_CACHED, | 86 | I915_MOCS_CACHED, |
87 | }; | 87 | }; |
88 | 88 | ||
89 | /* | ||
90 | * Different engines serve different roles, and there may be more than one | ||
91 | * engine serving each role. enum drm_i915_gem_engine_class provides a | ||
92 | * classification of the role of the engine, which may be used when requesting | ||
93 | * operations to be performed on a certain subset of engines, or for providing | ||
94 | * information about that group. | ||
95 | */ | ||
96 | enum drm_i915_gem_engine_class { | ||
97 | I915_ENGINE_CLASS_RENDER = 0, | ||
98 | I915_ENGINE_CLASS_COPY = 1, | ||
99 | I915_ENGINE_CLASS_VIDEO = 2, | ||
100 | I915_ENGINE_CLASS_VIDEO_ENHANCE = 3, | ||
101 | |||
102 | I915_ENGINE_CLASS_INVALID = -1 | ||
103 | }; | ||
104 | |||
105 | /** | ||
106 | * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915 | ||
107 | * | ||
108 | */ | ||
109 | |||
110 | enum drm_i915_pmu_engine_sample { | ||
111 | I915_SAMPLE_BUSY = 0, | ||
112 | I915_SAMPLE_WAIT = 1, | ||
113 | I915_SAMPLE_SEMA = 2 | ||
114 | }; | ||
115 | |||
116 | #define I915_PMU_SAMPLE_BITS (4) | ||
117 | #define I915_PMU_SAMPLE_MASK (0xf) | ||
118 | #define I915_PMU_SAMPLE_INSTANCE_BITS (8) | ||
119 | #define I915_PMU_CLASS_SHIFT \ | ||
120 | (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS) | ||
121 | |||
122 | #define __I915_PMU_ENGINE(class, instance, sample) \ | ||
123 | ((class) << I915_PMU_CLASS_SHIFT | \ | ||
124 | (instance) << I915_PMU_SAMPLE_BITS | \ | ||
125 | (sample)) | ||
126 | |||
127 | #define I915_PMU_ENGINE_BUSY(class, instance) \ | ||
128 | __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY) | ||
129 | |||
130 | #define I915_PMU_ENGINE_WAIT(class, instance) \ | ||
131 | __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT) | ||
132 | |||
133 | #define I915_PMU_ENGINE_SEMA(class, instance) \ | ||
134 | __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA) | ||
135 | |||
136 | #define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x)) | ||
137 | |||
138 | #define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0) | ||
139 | #define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1) | ||
140 | #define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2) | ||
141 | #define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3) | ||
142 | |||
143 | #define I915_PMU_LAST I915_PMU_RC6_RESIDENCY | ||
144 | |||
89 | /* Each region is a minimum of 16k, and there are at most 255 of them. | 145 | /* Each region is a minimum of 16k, and there are at most 255 of them. |
90 | */ | 146 | */ |
91 | #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use | 147 | #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use |
@@ -450,6 +506,27 @@ typedef struct drm_i915_irq_wait { | |||
450 | */ | 506 | */ |
451 | #define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 | 507 | #define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 |
452 | 508 | ||
509 | /* | ||
510 | * Query whether every context (both per-file default and user created) is | ||
511 | * isolated (insofar as HW supports). If this parameter is not true, then | ||
512 | * freshly created contexts may inherit values from an existing context, | ||
513 | * rather than default HW values. If true, it also ensures (insofar as HW | ||
514 | * supports) that all state set by this context will not leak to any other | ||
515 | * context. | ||
516 | * | ||
517 | * As not every engine across every gen support contexts, the returned | ||
518 | * value reports the support of context isolation for individual engines by | ||
519 | * returning a bitmask of each engine class set to true if that class supports | ||
520 | * isolation. | ||
521 | */ | ||
522 | #define I915_PARAM_HAS_CONTEXT_ISOLATION 50 | ||
523 | |||
524 | /* Frequency of the command streamer timestamps given by the *_TIMESTAMP | ||
525 | * registers. This used to be fixed per platform but from CNL onwards, this | ||
526 | * might vary depending on the parts. | ||
527 | */ | ||
528 | #define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51 | ||
529 | |||
453 | typedef struct drm_i915_getparam { | 530 | typedef struct drm_i915_getparam { |
454 | __s32 param; | 531 | __s32 param; |
455 | /* | 532 | /* |
diff --git a/tools/include/uapi/linux/if_link.h b/tools/include/uapi/linux/if_link.h index 8616131e2c61..6d9447700e18 100644 --- a/tools/include/uapi/linux/if_link.h +++ b/tools/include/uapi/linux/if_link.h | |||
@@ -163,6 +163,7 @@ enum { | |||
163 | IFLA_IF_NETNSID, | 163 | IFLA_IF_NETNSID, |
164 | IFLA_CARRIER_UP_COUNT, | 164 | IFLA_CARRIER_UP_COUNT, |
165 | IFLA_CARRIER_DOWN_COUNT, | 165 | IFLA_CARRIER_DOWN_COUNT, |
166 | IFLA_NEW_IFINDEX, | ||
166 | __IFLA_MAX | 167 | __IFLA_MAX |
167 | }; | 168 | }; |
168 | 169 | ||
diff --git a/tools/include/uapi/linux/kvm.h b/tools/include/uapi/linux/kvm.h index 8fb90a0819c3..0fb5ef939732 100644 --- a/tools/include/uapi/linux/kvm.h +++ b/tools/include/uapi/linux/kvm.h | |||
@@ -1362,6 +1362,96 @@ struct kvm_s390_ucas_mapping { | |||
1362 | /* Available with KVM_CAP_S390_CMMA_MIGRATION */ | 1362 | /* Available with KVM_CAP_S390_CMMA_MIGRATION */ |
1363 | #define KVM_S390_GET_CMMA_BITS _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log) | 1363 | #define KVM_S390_GET_CMMA_BITS _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log) |
1364 | #define KVM_S390_SET_CMMA_BITS _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log) | 1364 | #define KVM_S390_SET_CMMA_BITS _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log) |
1365 | /* Memory Encryption Commands */ | ||
1366 | #define KVM_MEMORY_ENCRYPT_OP _IOWR(KVMIO, 0xba, unsigned long) | ||
1367 | |||
1368 | struct kvm_enc_region { | ||
1369 | __u64 addr; | ||
1370 | __u64 size; | ||
1371 | }; | ||
1372 | |||
1373 | #define KVM_MEMORY_ENCRYPT_REG_REGION _IOR(KVMIO, 0xbb, struct kvm_enc_region) | ||
1374 | #define KVM_MEMORY_ENCRYPT_UNREG_REGION _IOR(KVMIO, 0xbc, struct kvm_enc_region) | ||
1375 | |||
1376 | /* Secure Encrypted Virtualization command */ | ||
1377 | enum sev_cmd_id { | ||
1378 | /* Guest initialization commands */ | ||
1379 | KVM_SEV_INIT = 0, | ||
1380 | KVM_SEV_ES_INIT, | ||
1381 | /* Guest launch commands */ | ||
1382 | KVM_SEV_LAUNCH_START, | ||
1383 | KVM_SEV_LAUNCH_UPDATE_DATA, | ||
1384 | KVM_SEV_LAUNCH_UPDATE_VMSA, | ||
1385 | KVM_SEV_LAUNCH_SECRET, | ||
1386 | KVM_SEV_LAUNCH_MEASURE, | ||
1387 | KVM_SEV_LAUNCH_FINISH, | ||
1388 | /* Guest migration commands (outgoing) */ | ||
1389 | KVM_SEV_SEND_START, | ||
1390 | KVM_SEV_SEND_UPDATE_DATA, | ||
1391 | KVM_SEV_SEND_UPDATE_VMSA, | ||
1392 | KVM_SEV_SEND_FINISH, | ||
1393 | /* Guest migration commands (incoming) */ | ||
1394 | KVM_SEV_RECEIVE_START, | ||
1395 | KVM_SEV_RECEIVE_UPDATE_DATA, | ||
1396 | KVM_SEV_RECEIVE_UPDATE_VMSA, | ||
1397 | KVM_SEV_RECEIVE_FINISH, | ||
1398 | /* Guest status and debug commands */ | ||
1399 | KVM_SEV_GUEST_STATUS, | ||
1400 | KVM_SEV_DBG_DECRYPT, | ||
1401 | KVM_SEV_DBG_ENCRYPT, | ||
1402 | /* Guest certificates commands */ | ||
1403 | KVM_SEV_CERT_EXPORT, | ||
1404 | |||
1405 | KVM_SEV_NR_MAX, | ||
1406 | }; | ||
1407 | |||
1408 | struct kvm_sev_cmd { | ||
1409 | __u32 id; | ||
1410 | __u64 data; | ||
1411 | __u32 error; | ||
1412 | __u32 sev_fd; | ||
1413 | }; | ||
1414 | |||
1415 | struct kvm_sev_launch_start { | ||
1416 | __u32 handle; | ||
1417 | __u32 policy; | ||
1418 | __u64 dh_uaddr; | ||
1419 | __u32 dh_len; | ||
1420 | __u64 session_uaddr; | ||
1421 | __u32 session_len; | ||
1422 | }; | ||
1423 | |||
1424 | struct kvm_sev_launch_update_data { | ||
1425 | __u64 uaddr; | ||
1426 | __u32 len; | ||
1427 | }; | ||
1428 | |||
1429 | |||
1430 | struct kvm_sev_launch_secret { | ||
1431 | __u64 hdr_uaddr; | ||
1432 | __u32 hdr_len; | ||
1433 | __u64 guest_uaddr; | ||
1434 | __u32 guest_len; | ||
1435 | __u64 trans_uaddr; | ||
1436 | __u32 trans_len; | ||
1437 | }; | ||
1438 | |||
1439 | struct kvm_sev_launch_measure { | ||
1440 | __u64 uaddr; | ||
1441 | __u32 len; | ||
1442 | }; | ||
1443 | |||
1444 | struct kvm_sev_guest_status { | ||
1445 | __u32 handle; | ||
1446 | __u32 policy; | ||
1447 | __u32 state; | ||
1448 | }; | ||
1449 | |||
1450 | struct kvm_sev_dbg { | ||
1451 | __u64 src_uaddr; | ||
1452 | __u64 dst_uaddr; | ||
1453 | __u32 len; | ||
1454 | }; | ||
1365 | 1455 | ||
1366 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 1456 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
1367 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) | 1457 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) |
diff --git a/tools/perf/Documentation/perf-data.txt b/tools/perf/Documentation/perf-data.txt index f0796a47dfa3..90bb4aabe4f8 100644 --- a/tools/perf/Documentation/perf-data.txt +++ b/tools/perf/Documentation/perf-data.txt | |||
@@ -30,6 +30,10 @@ OPTIONS for 'convert' | |||
30 | -i:: | 30 | -i:: |
31 | Specify input perf data file path. | 31 | Specify input perf data file path. |
32 | 32 | ||
33 | -f:: | ||
34 | --force:: | ||
35 | Don't complain, do it. | ||
36 | |||
33 | -v:: | 37 | -v:: |
34 | --verbose:: | 38 | --verbose:: |
35 | Be more verbose (show counter open errors, etc). | 39 | Be more verbose (show counter open errors, etc). |
diff --git a/tools/perf/arch/s390/Makefile b/tools/perf/arch/s390/Makefile index 48228de415d0..dfa6e3103437 100644 --- a/tools/perf/arch/s390/Makefile +++ b/tools/perf/arch/s390/Makefile | |||
@@ -10,15 +10,19 @@ PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1 | |||
10 | 10 | ||
11 | out := $(OUTPUT)arch/s390/include/generated/asm | 11 | out := $(OUTPUT)arch/s390/include/generated/asm |
12 | header := $(out)/syscalls_64.c | 12 | header := $(out)/syscalls_64.c |
13 | sysdef := $(srctree)/tools/arch/s390/include/uapi/asm/unistd.h | 13 | syskrn := $(srctree)/arch/s390/kernel/syscalls/syscall.tbl |
14 | sysprf := $(srctree)/tools/perf/arch/s390/entry/syscalls/ | 14 | sysprf := $(srctree)/tools/perf/arch/s390/entry/syscalls |
15 | sysdef := $(sysprf)/syscall.tbl | ||
15 | systbl := $(sysprf)/mksyscalltbl | 16 | systbl := $(sysprf)/mksyscalltbl |
16 | 17 | ||
17 | # Create output directory if not already present | 18 | # Create output directory if not already present |
18 | _dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') | 19 | _dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') |
19 | 20 | ||
20 | $(header): $(sysdef) $(systbl) | 21 | $(header): $(sysdef) $(systbl) |
21 | $(Q)$(SHELL) '$(systbl)' '$(CC)' $(sysdef) > $@ | 22 | @(test -d ../../kernel -a -d ../../tools -a -d ../perf && ( \ |
23 | (diff -B $(sysdef) $(syskrn) >/dev/null) \ | ||
24 | || echo "Warning: Kernel ABI header at '$(sysdef)' differs from latest version at '$(syskrn)'" >&2 )) || true | ||
25 | $(Q)$(SHELL) '$(systbl)' $(sysdef) > $@ | ||
22 | 26 | ||
23 | clean:: | 27 | clean:: |
24 | $(call QUIET_CLEAN, s390) $(RM) $(header) | 28 | $(call QUIET_CLEAN, s390) $(RM) $(header) |
diff --git a/tools/perf/arch/s390/entry/syscalls/mksyscalltbl b/tools/perf/arch/s390/entry/syscalls/mksyscalltbl index 7fa0d0abd419..72ecbb676370 100755 --- a/tools/perf/arch/s390/entry/syscalls/mksyscalltbl +++ b/tools/perf/arch/s390/entry/syscalls/mksyscalltbl | |||
@@ -3,25 +3,23 @@ | |||
3 | # | 3 | # |
4 | # Generate system call table for perf | 4 | # Generate system call table for perf |
5 | # | 5 | # |
6 | # | 6 | # Copyright IBM Corp. 2017, 2018 |
7 | # Copyright IBM Corp. 2017 | ||
8 | # Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com> | 7 | # Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com> |
9 | # | 8 | # |
10 | 9 | ||
11 | gcc=$1 | 10 | SYSCALL_TBL=$1 |
12 | input=$2 | ||
13 | 11 | ||
14 | if ! test -r $input; then | 12 | if ! test -r $SYSCALL_TBL; then |
15 | echo "Could not read input file" >&2 | 13 | echo "Could not read input file" >&2 |
16 | exit 1 | 14 | exit 1 |
17 | fi | 15 | fi |
18 | 16 | ||
19 | create_table() | 17 | create_table() |
20 | { | 18 | { |
21 | local max_nr | 19 | local max_nr nr abi sc discard |
22 | 20 | ||
23 | echo 'static const char *syscalltbl_s390_64[] = {' | 21 | echo 'static const char *syscalltbl_s390_64[] = {' |
24 | while read sc nr; do | 22 | while read nr abi sc discard; do |
25 | printf '\t[%d] = "%s",\n' $nr $sc | 23 | printf '\t[%d] = "%s",\n' $nr $sc |
26 | max_nr=$nr | 24 | max_nr=$nr |
27 | done | 25 | done |
@@ -29,8 +27,6 @@ create_table() | |||
29 | echo "#define SYSCALLTBL_S390_64_MAX_ID $max_nr" | 27 | echo "#define SYSCALLTBL_S390_64_MAX_ID $max_nr" |
30 | } | 28 | } |
31 | 29 | ||
32 | 30 | grep -E "^[[:digit:]]+[[:space:]]+(common|64)" $SYSCALL_TBL \ | |
33 | $gcc -m64 -E -dM -x c $input \ | 31 | |sort -k1 -n \ |
34 | |sed -ne 's/^#define __NR_//p' \ | ||
35 | |sort -t' ' -k2 -nu \ | ||
36 | |create_table | 32 | |create_table |
diff --git a/tools/perf/arch/s390/entry/syscalls/syscall.tbl b/tools/perf/arch/s390/entry/syscalls/syscall.tbl new file mode 100644 index 000000000000..b38d48464368 --- /dev/null +++ b/tools/perf/arch/s390/entry/syscalls/syscall.tbl | |||
@@ -0,0 +1,390 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note | ||
2 | # | ||
3 | # System call table for s390 | ||
4 | # | ||
5 | # Format: | ||
6 | # | ||
7 | # <nr> <abi> <syscall> <entry-64bit> <compat-entry> | ||
8 | # | ||
9 | # where <abi> can be common, 64, or 32 | ||
10 | |||
11 | 1 common exit sys_exit sys_exit | ||
12 | 2 common fork sys_fork sys_fork | ||
13 | 3 common read sys_read compat_sys_s390_read | ||
14 | 4 common write sys_write compat_sys_s390_write | ||
15 | 5 common open sys_open compat_sys_open | ||
16 | 6 common close sys_close sys_close | ||
17 | 7 common restart_syscall sys_restart_syscall sys_restart_syscall | ||
18 | 8 common creat sys_creat compat_sys_creat | ||
19 | 9 common link sys_link compat_sys_link | ||
20 | 10 common unlink sys_unlink compat_sys_unlink | ||
21 | 11 common execve sys_execve compat_sys_execve | ||
22 | 12 common chdir sys_chdir compat_sys_chdir | ||
23 | 13 32 time - compat_sys_time | ||
24 | 14 common mknod sys_mknod compat_sys_mknod | ||
25 | 15 common chmod sys_chmod compat_sys_chmod | ||
26 | 16 32 lchown - compat_sys_s390_lchown16 | ||
27 | 19 common lseek sys_lseek compat_sys_lseek | ||
28 | 20 common getpid sys_getpid sys_getpid | ||
29 | 21 common mount sys_mount compat_sys_mount | ||
30 | 22 common umount sys_oldumount compat_sys_oldumount | ||
31 | 23 32 setuid - compat_sys_s390_setuid16 | ||
32 | 24 32 getuid - compat_sys_s390_getuid16 | ||
33 | 25 32 stime - compat_sys_stime | ||
34 | 26 common ptrace sys_ptrace compat_sys_ptrace | ||
35 | 27 common alarm sys_alarm sys_alarm | ||
36 | 29 common pause sys_pause sys_pause | ||
37 | 30 common utime sys_utime compat_sys_utime | ||
38 | 33 common access sys_access compat_sys_access | ||
39 | 34 common nice sys_nice sys_nice | ||
40 | 36 common sync sys_sync sys_sync | ||
41 | 37 common kill sys_kill sys_kill | ||
42 | 38 common rename sys_rename compat_sys_rename | ||
43 | 39 common mkdir sys_mkdir compat_sys_mkdir | ||
44 | 40 common rmdir sys_rmdir compat_sys_rmdir | ||
45 | 41 common dup sys_dup sys_dup | ||
46 | 42 common pipe sys_pipe compat_sys_pipe | ||
47 | 43 common times sys_times compat_sys_times | ||
48 | 45 common brk sys_brk compat_sys_brk | ||
49 | 46 32 setgid - compat_sys_s390_setgid16 | ||
50 | 47 32 getgid - compat_sys_s390_getgid16 | ||
51 | 48 common signal sys_signal compat_sys_signal | ||
52 | 49 32 geteuid - compat_sys_s390_geteuid16 | ||
53 | 50 32 getegid - compat_sys_s390_getegid16 | ||
54 | 51 common acct sys_acct compat_sys_acct | ||
55 | 52 common umount2 sys_umount compat_sys_umount | ||
56 | 54 common ioctl sys_ioctl compat_sys_ioctl | ||
57 | 55 common fcntl sys_fcntl compat_sys_fcntl | ||
58 | 57 common setpgid sys_setpgid sys_setpgid | ||
59 | 60 common umask sys_umask sys_umask | ||
60 | 61 common chroot sys_chroot compat_sys_chroot | ||
61 | 62 common ustat sys_ustat compat_sys_ustat | ||
62 | 63 common dup2 sys_dup2 sys_dup2 | ||
63 | 64 common getppid sys_getppid sys_getppid | ||
64 | 65 common getpgrp sys_getpgrp sys_getpgrp | ||
65 | 66 common setsid sys_setsid sys_setsid | ||
66 | 67 common sigaction sys_sigaction compat_sys_sigaction | ||
67 | 70 32 setreuid - compat_sys_s390_setreuid16 | ||
68 | 71 32 setregid - compat_sys_s390_setregid16 | ||
69 | 72 common sigsuspend sys_sigsuspend compat_sys_sigsuspend | ||
70 | 73 common sigpending sys_sigpending compat_sys_sigpending | ||
71 | 74 common sethostname sys_sethostname compat_sys_sethostname | ||
72 | 75 common setrlimit sys_setrlimit compat_sys_setrlimit | ||
73 | 76 32 getrlimit - compat_sys_old_getrlimit | ||
74 | 77 common getrusage sys_getrusage compat_sys_getrusage | ||
75 | 78 common gettimeofday sys_gettimeofday compat_sys_gettimeofday | ||
76 | 79 common settimeofday sys_settimeofday compat_sys_settimeofday | ||
77 | 80 32 getgroups - compat_sys_s390_getgroups16 | ||
78 | 81 32 setgroups - compat_sys_s390_setgroups16 | ||
79 | 83 common symlink sys_symlink compat_sys_symlink | ||
80 | 85 common readlink sys_readlink compat_sys_readlink | ||
81 | 86 common uselib sys_uselib compat_sys_uselib | ||
82 | 87 common swapon sys_swapon compat_sys_swapon | ||
83 | 88 common reboot sys_reboot compat_sys_reboot | ||
84 | 89 common readdir - compat_sys_old_readdir | ||
85 | 90 common mmap sys_old_mmap compat_sys_s390_old_mmap | ||
86 | 91 common munmap sys_munmap compat_sys_munmap | ||
87 | 92 common truncate sys_truncate compat_sys_truncate | ||
88 | 93 common ftruncate sys_ftruncate compat_sys_ftruncate | ||
89 | 94 common fchmod sys_fchmod sys_fchmod | ||
90 | 95 32 fchown - compat_sys_s390_fchown16 | ||
91 | 96 common getpriority sys_getpriority sys_getpriority | ||
92 | 97 common setpriority sys_setpriority sys_setpriority | ||
93 | 99 common statfs sys_statfs compat_sys_statfs | ||
94 | 100 common fstatfs sys_fstatfs compat_sys_fstatfs | ||
95 | 101 32 ioperm - - | ||
96 | 102 common socketcall sys_socketcall compat_sys_socketcall | ||
97 | 103 common syslog sys_syslog compat_sys_syslog | ||
98 | 104 common setitimer sys_setitimer compat_sys_setitimer | ||
99 | 105 common getitimer sys_getitimer compat_sys_getitimer | ||
100 | 106 common stat sys_newstat compat_sys_newstat | ||
101 | 107 common lstat sys_newlstat compat_sys_newlstat | ||
102 | 108 common fstat sys_newfstat compat_sys_newfstat | ||
103 | 110 common lookup_dcookie sys_lookup_dcookie compat_sys_lookup_dcookie | ||
104 | 111 common vhangup sys_vhangup sys_vhangup | ||
105 | 112 common idle - - | ||
106 | 114 common wait4 sys_wait4 compat_sys_wait4 | ||
107 | 115 common swapoff sys_swapoff compat_sys_swapoff | ||
108 | 116 common sysinfo sys_sysinfo compat_sys_sysinfo | ||
109 | 117 common ipc sys_s390_ipc compat_sys_s390_ipc | ||
110 | 118 common fsync sys_fsync sys_fsync | ||
111 | 119 common sigreturn sys_sigreturn compat_sys_sigreturn | ||
112 | 120 common clone sys_clone compat_sys_clone | ||
113 | 121 common setdomainname sys_setdomainname compat_sys_setdomainname | ||
114 | 122 common uname sys_newuname compat_sys_newuname | ||
115 | 124 common adjtimex sys_adjtimex compat_sys_adjtimex | ||
116 | 125 common mprotect sys_mprotect compat_sys_mprotect | ||
117 | 126 common sigprocmask sys_sigprocmask compat_sys_sigprocmask | ||
118 | 127 common create_module - - | ||
119 | 128 common init_module sys_init_module compat_sys_init_module | ||
120 | 129 common delete_module sys_delete_module compat_sys_delete_module | ||
121 | 130 common get_kernel_syms - - | ||
122 | 131 common quotactl sys_quotactl compat_sys_quotactl | ||
123 | 132 common getpgid sys_getpgid sys_getpgid | ||
124 | 133 common fchdir sys_fchdir sys_fchdir | ||
125 | 134 common bdflush sys_bdflush compat_sys_bdflush | ||
126 | 135 common sysfs sys_sysfs compat_sys_sysfs | ||
127 | 136 common personality sys_s390_personality sys_s390_personality | ||
128 | 137 common afs_syscall - - | ||
129 | 138 32 setfsuid - compat_sys_s390_setfsuid16 | ||
130 | 139 32 setfsgid - compat_sys_s390_setfsgid16 | ||
131 | 140 32 _llseek - compat_sys_llseek | ||
132 | 141 common getdents sys_getdents compat_sys_getdents | ||
133 | 142 32 _newselect - compat_sys_select | ||
134 | 142 64 select sys_select - | ||
135 | 143 common flock sys_flock sys_flock | ||
136 | 144 common msync sys_msync compat_sys_msync | ||
137 | 145 common readv sys_readv compat_sys_readv | ||
138 | 146 common writev sys_writev compat_sys_writev | ||
139 | 147 common getsid sys_getsid sys_getsid | ||
140 | 148 common fdatasync sys_fdatasync sys_fdatasync | ||
141 | 149 common _sysctl sys_sysctl compat_sys_sysctl | ||
142 | 150 common mlock sys_mlock compat_sys_mlock | ||
143 | 151 common munlock sys_munlock compat_sys_munlock | ||
144 | 152 common mlockall sys_mlockall sys_mlockall | ||
145 | 153 common munlockall sys_munlockall sys_munlockall | ||
146 | 154 common sched_setparam sys_sched_setparam compat_sys_sched_setparam | ||
147 | 155 common sched_getparam sys_sched_getparam compat_sys_sched_getparam | ||
148 | 156 common sched_setscheduler sys_sched_setscheduler compat_sys_sched_setscheduler | ||
149 | 157 common sched_getscheduler sys_sched_getscheduler sys_sched_getscheduler | ||
150 | 158 common sched_yield sys_sched_yield sys_sched_yield | ||
151 | 159 common sched_get_priority_max sys_sched_get_priority_max sys_sched_get_priority_max | ||
152 | 160 common sched_get_priority_min sys_sched_get_priority_min sys_sched_get_priority_min | ||
153 | 161 common sched_rr_get_interval sys_sched_rr_get_interval compat_sys_sched_rr_get_interval | ||
154 | 162 common nanosleep sys_nanosleep compat_sys_nanosleep | ||
155 | 163 common mremap sys_mremap compat_sys_mremap | ||
156 | 164 32 setresuid - compat_sys_s390_setresuid16 | ||
157 | 165 32 getresuid - compat_sys_s390_getresuid16 | ||
158 | 167 common query_module - - | ||
159 | 168 common poll sys_poll compat_sys_poll | ||
160 | 169 common nfsservctl - - | ||
161 | 170 32 setresgid - compat_sys_s390_setresgid16 | ||
162 | 171 32 getresgid - compat_sys_s390_getresgid16 | ||
163 | 172 common prctl sys_prctl compat_sys_prctl | ||
164 | 173 common rt_sigreturn sys_rt_sigreturn compat_sys_rt_sigreturn | ||
165 | 174 common rt_sigaction sys_rt_sigaction compat_sys_rt_sigaction | ||
166 | 175 common rt_sigprocmask sys_rt_sigprocmask compat_sys_rt_sigprocmask | ||
167 | 176 common rt_sigpending sys_rt_sigpending compat_sys_rt_sigpending | ||
168 | 177 common rt_sigtimedwait sys_rt_sigtimedwait compat_sys_rt_sigtimedwait | ||
169 | 178 common rt_sigqueueinfo sys_rt_sigqueueinfo compat_sys_rt_sigqueueinfo | ||
170 | 179 common rt_sigsuspend sys_rt_sigsuspend compat_sys_rt_sigsuspend | ||
171 | 180 common pread64 sys_pread64 compat_sys_s390_pread64 | ||
172 | 181 common pwrite64 sys_pwrite64 compat_sys_s390_pwrite64 | ||
173 | 182 32 chown - compat_sys_s390_chown16 | ||
174 | 183 common getcwd sys_getcwd compat_sys_getcwd | ||
175 | 184 common capget sys_capget compat_sys_capget | ||
176 | 185 common capset sys_capset compat_sys_capset | ||
177 | 186 common sigaltstack sys_sigaltstack compat_sys_sigaltstack | ||
178 | 187 common sendfile sys_sendfile64 compat_sys_sendfile | ||
179 | 188 common getpmsg - - | ||
180 | 189 common putpmsg - - | ||
181 | 190 common vfork sys_vfork sys_vfork | ||
182 | 191 32 ugetrlimit - compat_sys_getrlimit | ||
183 | 191 64 getrlimit sys_getrlimit - | ||
184 | 192 32 mmap2 - compat_sys_s390_mmap2 | ||
185 | 193 32 truncate64 - compat_sys_s390_truncate64 | ||
186 | 194 32 ftruncate64 - compat_sys_s390_ftruncate64 | ||
187 | 195 32 stat64 - compat_sys_s390_stat64 | ||
188 | 196 32 lstat64 - compat_sys_s390_lstat64 | ||
189 | 197 32 fstat64 - compat_sys_s390_fstat64 | ||
190 | 198 32 lchown32 - compat_sys_lchown | ||
191 | 198 64 lchown sys_lchown - | ||
192 | 199 32 getuid32 - sys_getuid | ||
193 | 199 64 getuid sys_getuid - | ||
194 | 200 32 getgid32 - sys_getgid | ||
195 | 200 64 getgid sys_getgid - | ||
196 | 201 32 geteuid32 - sys_geteuid | ||
197 | 201 64 geteuid sys_geteuid - | ||
198 | 202 32 getegid32 - sys_getegid | ||
199 | 202 64 getegid sys_getegid - | ||
200 | 203 32 setreuid32 - sys_setreuid | ||
201 | 203 64 setreuid sys_setreuid - | ||
202 | 204 32 setregid32 - sys_setregid | ||
203 | 204 64 setregid sys_setregid - | ||
204 | 205 32 getgroups32 - compat_sys_getgroups | ||
205 | 205 64 getgroups sys_getgroups - | ||
206 | 206 32 setgroups32 - compat_sys_setgroups | ||
207 | 206 64 setgroups sys_setgroups - | ||
208 | 207 32 fchown32 - sys_fchown | ||
209 | 207 64 fchown sys_fchown - | ||
210 | 208 32 setresuid32 - sys_setresuid | ||
211 | 208 64 setresuid sys_setresuid - | ||
212 | 209 32 getresuid32 - compat_sys_getresuid | ||
213 | 209 64 getresuid sys_getresuid - | ||
214 | 210 32 setresgid32 - sys_setresgid | ||
215 | 210 64 setresgid sys_setresgid - | ||
216 | 211 32 getresgid32 - compat_sys_getresgid | ||
217 | 211 64 getresgid sys_getresgid - | ||
218 | 212 32 chown32 - compat_sys_chown | ||
219 | 212 64 chown sys_chown - | ||
220 | 213 32 setuid32 - sys_setuid | ||
221 | 213 64 setuid sys_setuid - | ||
222 | 214 32 setgid32 - sys_setgid | ||
223 | 214 64 setgid sys_setgid - | ||
224 | 215 32 setfsuid32 - sys_setfsuid | ||
225 | 215 64 setfsuid sys_setfsuid - | ||
226 | 216 32 setfsgid32 - sys_setfsgid | ||
227 | 216 64 setfsgid sys_setfsgid - | ||
228 | 217 common pivot_root sys_pivot_root compat_sys_pivot_root | ||
229 | 218 common mincore sys_mincore compat_sys_mincore | ||
230 | 219 common madvise sys_madvise compat_sys_madvise | ||
231 | 220 common getdents64 sys_getdents64 compat_sys_getdents64 | ||
232 | 221 32 fcntl64 - compat_sys_fcntl64 | ||
233 | 222 common readahead sys_readahead compat_sys_s390_readahead | ||
234 | 223 32 sendfile64 - compat_sys_sendfile64 | ||
235 | 224 common setxattr sys_setxattr compat_sys_setxattr | ||
236 | 225 common lsetxattr sys_lsetxattr compat_sys_lsetxattr | ||
237 | 226 common fsetxattr sys_fsetxattr compat_sys_fsetxattr | ||
238 | 227 common getxattr sys_getxattr compat_sys_getxattr | ||
239 | 228 common lgetxattr sys_lgetxattr compat_sys_lgetxattr | ||
240 | 229 common fgetxattr sys_fgetxattr compat_sys_fgetxattr | ||
241 | 230 common listxattr sys_listxattr compat_sys_listxattr | ||
242 | 231 common llistxattr sys_llistxattr compat_sys_llistxattr | ||
243 | 232 common flistxattr sys_flistxattr compat_sys_flistxattr | ||
244 | 233 common removexattr sys_removexattr compat_sys_removexattr | ||
245 | 234 common lremovexattr sys_lremovexattr compat_sys_lremovexattr | ||
246 | 235 common fremovexattr sys_fremovexattr compat_sys_fremovexattr | ||
247 | 236 common gettid sys_gettid sys_gettid | ||
248 | 237 common tkill sys_tkill sys_tkill | ||
249 | 238 common futex sys_futex compat_sys_futex | ||
250 | 239 common sched_setaffinity sys_sched_setaffinity compat_sys_sched_setaffinity | ||
251 | 240 common sched_getaffinity sys_sched_getaffinity compat_sys_sched_getaffinity | ||
252 | 241 common tgkill sys_tgkill sys_tgkill | ||
253 | 243 common io_setup sys_io_setup compat_sys_io_setup | ||
254 | 244 common io_destroy sys_io_destroy compat_sys_io_destroy | ||
255 | 245 common io_getevents sys_io_getevents compat_sys_io_getevents | ||
256 | 246 common io_submit sys_io_submit compat_sys_io_submit | ||
257 | 247 common io_cancel sys_io_cancel compat_sys_io_cancel | ||
258 | 248 common exit_group sys_exit_group sys_exit_group | ||
259 | 249 common epoll_create sys_epoll_create sys_epoll_create | ||
260 | 250 common epoll_ctl sys_epoll_ctl compat_sys_epoll_ctl | ||
261 | 251 common epoll_wait sys_epoll_wait compat_sys_epoll_wait | ||
262 | 252 common set_tid_address sys_set_tid_address compat_sys_set_tid_address | ||
263 | 253 common fadvise64 sys_fadvise64_64 compat_sys_s390_fadvise64 | ||
264 | 254 common timer_create sys_timer_create compat_sys_timer_create | ||
265 | 255 common timer_settime sys_timer_settime compat_sys_timer_settime | ||
266 | 256 common timer_gettime sys_timer_gettime compat_sys_timer_gettime | ||
267 | 257 common timer_getoverrun sys_timer_getoverrun sys_timer_getoverrun | ||
268 | 258 common timer_delete sys_timer_delete sys_timer_delete | ||
269 | 259 common clock_settime sys_clock_settime compat_sys_clock_settime | ||
270 | 260 common clock_gettime sys_clock_gettime compat_sys_clock_gettime | ||
271 | 261 common clock_getres sys_clock_getres compat_sys_clock_getres | ||
272 | 262 common clock_nanosleep sys_clock_nanosleep compat_sys_clock_nanosleep | ||
273 | 264 32 fadvise64_64 - compat_sys_s390_fadvise64_64 | ||
274 | 265 common statfs64 sys_statfs64 compat_sys_statfs64 | ||
275 | 266 common fstatfs64 sys_fstatfs64 compat_sys_fstatfs64 | ||
276 | 267 common remap_file_pages sys_remap_file_pages compat_sys_remap_file_pages | ||
277 | 268 common mbind sys_mbind compat_sys_mbind | ||
278 | 269 common get_mempolicy sys_get_mempolicy compat_sys_get_mempolicy | ||
279 | 270 common set_mempolicy sys_set_mempolicy compat_sys_set_mempolicy | ||
280 | 271 common mq_open sys_mq_open compat_sys_mq_open | ||
281 | 272 common mq_unlink sys_mq_unlink compat_sys_mq_unlink | ||
282 | 273 common mq_timedsend sys_mq_timedsend compat_sys_mq_timedsend | ||
283 | 274 common mq_timedreceive sys_mq_timedreceive compat_sys_mq_timedreceive | ||
284 | 275 common mq_notify sys_mq_notify compat_sys_mq_notify | ||
285 | 276 common mq_getsetattr sys_mq_getsetattr compat_sys_mq_getsetattr | ||
286 | 277 common kexec_load sys_kexec_load compat_sys_kexec_load | ||
287 | 278 common add_key sys_add_key compat_sys_add_key | ||
288 | 279 common request_key sys_request_key compat_sys_request_key | ||
289 | 280 common keyctl sys_keyctl compat_sys_keyctl | ||
290 | 281 common waitid sys_waitid compat_sys_waitid | ||
291 | 282 common ioprio_set sys_ioprio_set sys_ioprio_set | ||
292 | 283 common ioprio_get sys_ioprio_get sys_ioprio_get | ||
293 | 284 common inotify_init sys_inotify_init sys_inotify_init | ||
294 | 285 common inotify_add_watch sys_inotify_add_watch compat_sys_inotify_add_watch | ||
295 | 286 common inotify_rm_watch sys_inotify_rm_watch sys_inotify_rm_watch | ||
296 | 287 common migrate_pages sys_migrate_pages compat_sys_migrate_pages | ||
297 | 288 common openat sys_openat compat_sys_openat | ||
298 | 289 common mkdirat sys_mkdirat compat_sys_mkdirat | ||
299 | 290 common mknodat sys_mknodat compat_sys_mknodat | ||
300 | 291 common fchownat sys_fchownat compat_sys_fchownat | ||
301 | 292 common futimesat sys_futimesat compat_sys_futimesat | ||
302 | 293 32 fstatat64 - compat_sys_s390_fstatat64 | ||
303 | 293 64 newfstatat sys_newfstatat - | ||
304 | 294 common unlinkat sys_unlinkat compat_sys_unlinkat | ||
305 | 295 common renameat sys_renameat compat_sys_renameat | ||
306 | 296 common linkat sys_linkat compat_sys_linkat | ||
307 | 297 common symlinkat sys_symlinkat compat_sys_symlinkat | ||
308 | 298 common readlinkat sys_readlinkat compat_sys_readlinkat | ||
309 | 299 common fchmodat sys_fchmodat compat_sys_fchmodat | ||
310 | 300 common faccessat sys_faccessat compat_sys_faccessat | ||
311 | 301 common pselect6 sys_pselect6 compat_sys_pselect6 | ||
312 | 302 common ppoll sys_ppoll compat_sys_ppoll | ||
313 | 303 common unshare sys_unshare compat_sys_unshare | ||
314 | 304 common set_robust_list sys_set_robust_list compat_sys_set_robust_list | ||
315 | 305 common get_robust_list sys_get_robust_list compat_sys_get_robust_list | ||
316 | 306 common splice sys_splice compat_sys_splice | ||
317 | 307 common sync_file_range sys_sync_file_range compat_sys_s390_sync_file_range | ||
318 | 308 common tee sys_tee compat_sys_tee | ||
319 | 309 common vmsplice sys_vmsplice compat_sys_vmsplice | ||
320 | 310 common move_pages sys_move_pages compat_sys_move_pages | ||
321 | 311 common getcpu sys_getcpu compat_sys_getcpu | ||
322 | 312 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait | ||
323 | 313 common utimes sys_utimes compat_sys_utimes | ||
324 | 314 common fallocate sys_fallocate compat_sys_s390_fallocate | ||
325 | 315 common utimensat sys_utimensat compat_sys_utimensat | ||
326 | 316 common signalfd sys_signalfd compat_sys_signalfd | ||
327 | 317 common timerfd - - | ||
328 | 318 common eventfd sys_eventfd sys_eventfd | ||
329 | 319 common timerfd_create sys_timerfd_create sys_timerfd_create | ||
330 | 320 common timerfd_settime sys_timerfd_settime compat_sys_timerfd_settime | ||
331 | 321 common timerfd_gettime sys_timerfd_gettime compat_sys_timerfd_gettime | ||
332 | 322 common signalfd4 sys_signalfd4 compat_sys_signalfd4 | ||
333 | 323 common eventfd2 sys_eventfd2 sys_eventfd2 | ||
334 | 324 common inotify_init1 sys_inotify_init1 sys_inotify_init1 | ||
335 | 325 common pipe2 sys_pipe2 compat_sys_pipe2 | ||
336 | 326 common dup3 sys_dup3 sys_dup3 | ||
337 | 327 common epoll_create1 sys_epoll_create1 sys_epoll_create1 | ||
338 | 328 common preadv sys_preadv compat_sys_preadv | ||
339 | 329 common pwritev sys_pwritev compat_sys_pwritev | ||
340 | 330 common rt_tgsigqueueinfo sys_rt_tgsigqueueinfo compat_sys_rt_tgsigqueueinfo | ||
341 | 331 common perf_event_open sys_perf_event_open compat_sys_perf_event_open | ||
342 | 332 common fanotify_init sys_fanotify_init sys_fanotify_init | ||
343 | 333 common fanotify_mark sys_fanotify_mark compat_sys_fanotify_mark | ||
344 | 334 common prlimit64 sys_prlimit64 compat_sys_prlimit64 | ||
345 | 335 common name_to_handle_at sys_name_to_handle_at compat_sys_name_to_handle_at | ||
346 | 336 common open_by_handle_at sys_open_by_handle_at compat_sys_open_by_handle_at | ||
347 | 337 common clock_adjtime sys_clock_adjtime compat_sys_clock_adjtime | ||
348 | 338 common syncfs sys_syncfs sys_syncfs | ||
349 | 339 common setns sys_setns sys_setns | ||
350 | 340 common process_vm_readv sys_process_vm_readv compat_sys_process_vm_readv | ||
351 | 341 common process_vm_writev sys_process_vm_writev compat_sys_process_vm_writev | ||
352 | 342 common s390_runtime_instr sys_s390_runtime_instr sys_s390_runtime_instr | ||
353 | 343 common kcmp sys_kcmp compat_sys_kcmp | ||
354 | 344 common finit_module sys_finit_module compat_sys_finit_module | ||
355 | 345 common sched_setattr sys_sched_setattr compat_sys_sched_setattr | ||
356 | 346 common sched_getattr sys_sched_getattr compat_sys_sched_getattr | ||
357 | 347 common renameat2 sys_renameat2 compat_sys_renameat2 | ||
358 | 348 common seccomp sys_seccomp compat_sys_seccomp | ||
359 | 349 common getrandom sys_getrandom compat_sys_getrandom | ||
360 | 350 common memfd_create sys_memfd_create compat_sys_memfd_create | ||
361 | 351 common bpf sys_bpf compat_sys_bpf | ||
362 | 352 common s390_pci_mmio_write sys_s390_pci_mmio_write compat_sys_s390_pci_mmio_write | ||
363 | 353 common s390_pci_mmio_read sys_s390_pci_mmio_read compat_sys_s390_pci_mmio_read | ||
364 | 354 common execveat sys_execveat compat_sys_execveat | ||
365 | 355 common userfaultfd sys_userfaultfd sys_userfaultfd | ||
366 | 356 common membarrier sys_membarrier sys_membarrier | ||
367 | 357 common recvmmsg sys_recvmmsg compat_sys_recvmmsg | ||
368 | 358 common sendmmsg sys_sendmmsg compat_sys_sendmmsg | ||
369 | 359 common socket sys_socket sys_socket | ||
370 | 360 common socketpair sys_socketpair compat_sys_socketpair | ||
371 | 361 common bind sys_bind compat_sys_bind | ||
372 | 362 common connect sys_connect compat_sys_connect | ||
373 | 363 common listen sys_listen sys_listen | ||
374 | 364 common accept4 sys_accept4 compat_sys_accept4 | ||
375 | 365 common getsockopt sys_getsockopt compat_sys_getsockopt | ||
376 | 366 common setsockopt sys_setsockopt compat_sys_setsockopt | ||
377 | 367 common getsockname sys_getsockname compat_sys_getsockname | ||
378 | 368 common getpeername sys_getpeername compat_sys_getpeername | ||
379 | 369 common sendto sys_sendto compat_sys_sendto | ||
380 | 370 common sendmsg sys_sendmsg compat_sys_sendmsg | ||
381 | 371 common recvfrom sys_recvfrom compat_sys_recvfrom | ||
382 | 372 common recvmsg sys_recvmsg compat_sys_recvmsg | ||
383 | 373 common shutdown sys_shutdown sys_shutdown | ||
384 | 374 common mlock2 sys_mlock2 compat_sys_mlock2 | ||
385 | 375 common copy_file_range sys_copy_file_range compat_sys_copy_file_range | ||
386 | 376 common preadv2 sys_preadv2 compat_sys_preadv2 | ||
387 | 377 common pwritev2 sys_pwritev2 compat_sys_pwritev2 | ||
388 | 378 common s390_guarded_storage sys_s390_guarded_storage compat_sys_s390_guarded_storage | ||
389 | 379 common statx sys_statx compat_sys_statx | ||
390 | 380 common s390_sthyi sys_s390_sthyi compat_sys_s390_sthyi | ||
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index c0815a37fdb5..539c3d460158 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c | |||
@@ -2245,7 +2245,7 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he) | |||
2245 | c2c_browser__update_nr_entries(browser); | 2245 | c2c_browser__update_nr_entries(browser); |
2246 | 2246 | ||
2247 | while (1) { | 2247 | while (1) { |
2248 | key = hist_browser__run(browser, "? - help"); | 2248 | key = hist_browser__run(browser, "? - help", true); |
2249 | 2249 | ||
2250 | switch (key) { | 2250 | switch (key) { |
2251 | case 's': | 2251 | case 's': |
@@ -2314,7 +2314,7 @@ static int perf_c2c__hists_browse(struct hists *hists) | |||
2314 | c2c_browser__update_nr_entries(browser); | 2314 | c2c_browser__update_nr_entries(browser); |
2315 | 2315 | ||
2316 | while (1) { | 2316 | while (1) { |
2317 | key = hist_browser__run(browser, "? - help"); | 2317 | key = hist_browser__run(browser, "? - help", true); |
2318 | 2318 | ||
2319 | switch (key) { | 2319 | switch (key) { |
2320 | case 'q': | 2320 | case 'q': |
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 42a52dcc41cd..4ad5dc649716 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
@@ -530,7 +530,8 @@ static int report__browse_hists(struct report *rep) | |||
530 | case 1: | 530 | case 1: |
531 | ret = perf_evlist__tui_browse_hists(evlist, help, NULL, | 531 | ret = perf_evlist__tui_browse_hists(evlist, help, NULL, |
532 | rep->min_percent, | 532 | rep->min_percent, |
533 | &session->header.env); | 533 | &session->header.env, |
534 | true); | ||
534 | /* | 535 | /* |
535 | * Usually "ret" is the last pressed key, and we only | 536 | * Usually "ret" is the last pressed key, and we only |
536 | * care if the key notifies us to switch data file. | 537 | * care if the key notifies us to switch data file. |
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index c6ccda52117d..b7c823ba8374 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
@@ -283,8 +283,9 @@ static void perf_top__print_sym_table(struct perf_top *top) | |||
283 | 283 | ||
284 | printf("%-*.*s\n", win_width, win_width, graph_dotted_line); | 284 | printf("%-*.*s\n", win_width, win_width, graph_dotted_line); |
285 | 285 | ||
286 | if (hists->stats.nr_lost_warned != | 286 | if (!top->record_opts.overwrite && |
287 | hists->stats.nr_events[PERF_RECORD_LOST]) { | 287 | (hists->stats.nr_lost_warned != |
288 | hists->stats.nr_events[PERF_RECORD_LOST])) { | ||
288 | hists->stats.nr_lost_warned = | 289 | hists->stats.nr_lost_warned = |
289 | hists->stats.nr_events[PERF_RECORD_LOST]; | 290 | hists->stats.nr_events[PERF_RECORD_LOST]; |
290 | color_fprintf(stdout, PERF_COLOR_RED, | 291 | color_fprintf(stdout, PERF_COLOR_RED, |
@@ -611,7 +612,8 @@ static void *display_thread_tui(void *arg) | |||
611 | 612 | ||
612 | perf_evlist__tui_browse_hists(top->evlist, help, &hbt, | 613 | perf_evlist__tui_browse_hists(top->evlist, help, &hbt, |
613 | top->min_percent, | 614 | top->min_percent, |
614 | &top->session->header.env); | 615 | &top->session->header.env, |
616 | !top->record_opts.overwrite); | ||
615 | 617 | ||
616 | done = 1; | 618 | done = 1; |
617 | return NULL; | 619 | return NULL; |
@@ -807,15 +809,23 @@ static void perf_event__process_sample(struct perf_tool *tool, | |||
807 | 809 | ||
808 | static void perf_top__mmap_read_idx(struct perf_top *top, int idx) | 810 | static void perf_top__mmap_read_idx(struct perf_top *top, int idx) |
809 | { | 811 | { |
812 | struct record_opts *opts = &top->record_opts; | ||
813 | struct perf_evlist *evlist = top->evlist; | ||
810 | struct perf_sample sample; | 814 | struct perf_sample sample; |
811 | struct perf_evsel *evsel; | 815 | struct perf_evsel *evsel; |
816 | struct perf_mmap *md; | ||
812 | struct perf_session *session = top->session; | 817 | struct perf_session *session = top->session; |
813 | union perf_event *event; | 818 | union perf_event *event; |
814 | struct machine *machine; | 819 | struct machine *machine; |
820 | u64 end, start; | ||
815 | int ret; | 821 | int ret; |
816 | 822 | ||
817 | while ((event = perf_evlist__mmap_read(top->evlist, idx)) != NULL) { | 823 | md = opts->overwrite ? &evlist->overwrite_mmap[idx] : &evlist->mmap[idx]; |
818 | ret = perf_evlist__parse_sample(top->evlist, event, &sample); | 824 | if (perf_mmap__read_init(md, opts->overwrite, &start, &end) < 0) |
825 | return; | ||
826 | |||
827 | while ((event = perf_mmap__read_event(md, opts->overwrite, &start, end)) != NULL) { | ||
828 | ret = perf_evlist__parse_sample(evlist, event, &sample); | ||
819 | if (ret) { | 829 | if (ret) { |
820 | pr_err("Can't parse sample, err = %d\n", ret); | 830 | pr_err("Can't parse sample, err = %d\n", ret); |
821 | goto next_event; | 831 | goto next_event; |
@@ -869,16 +879,120 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx) | |||
869 | } else | 879 | } else |
870 | ++session->evlist->stats.nr_unknown_events; | 880 | ++session->evlist->stats.nr_unknown_events; |
871 | next_event: | 881 | next_event: |
872 | perf_evlist__mmap_consume(top->evlist, idx); | 882 | perf_mmap__consume(md, opts->overwrite); |
873 | } | 883 | } |
884 | |||
885 | perf_mmap__read_done(md); | ||
874 | } | 886 | } |
875 | 887 | ||
876 | static void perf_top__mmap_read(struct perf_top *top) | 888 | static void perf_top__mmap_read(struct perf_top *top) |
877 | { | 889 | { |
890 | bool overwrite = top->record_opts.overwrite; | ||
891 | struct perf_evlist *evlist = top->evlist; | ||
892 | unsigned long long start, end; | ||
878 | int i; | 893 | int i; |
879 | 894 | ||
895 | start = rdclock(); | ||
896 | if (overwrite) | ||
897 | perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_DATA_PENDING); | ||
898 | |||
880 | for (i = 0; i < top->evlist->nr_mmaps; i++) | 899 | for (i = 0; i < top->evlist->nr_mmaps; i++) |
881 | perf_top__mmap_read_idx(top, i); | 900 | perf_top__mmap_read_idx(top, i); |
901 | |||
902 | if (overwrite) { | ||
903 | perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_EMPTY); | ||
904 | perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_RUNNING); | ||
905 | } | ||
906 | end = rdclock(); | ||
907 | |||
908 | if ((end - start) > (unsigned long long)top->delay_secs * NSEC_PER_SEC) | ||
909 | ui__warning("Too slow to read ring buffer.\n" | ||
910 | "Please try increasing the period (-c) or\n" | ||
911 | "decreasing the freq (-F) or\n" | ||
912 | "limiting the number of CPUs (-C)\n"); | ||
913 | } | ||
914 | |||
915 | /* | ||
916 | * Check per-event overwrite term. | ||
917 | * perf top should support consistent term for all events. | ||
918 | * - All events don't have per-event term | ||
919 | * E.g. "cpu/cpu-cycles/,cpu/instructions/" | ||
920 | * Nothing change, return 0. | ||
921 | * - All events have same per-event term | ||
922 | * E.g. "cpu/cpu-cycles,no-overwrite/,cpu/instructions,no-overwrite/ | ||
923 | * Using the per-event setting to replace the opts->overwrite if | ||
924 | * they are different, then return 0. | ||
925 | * - Events have different per-event term | ||
926 | * E.g. "cpu/cpu-cycles,overwrite/,cpu/instructions,no-overwrite/" | ||
927 | * Return -1 | ||
928 | * - Some of the event set per-event term, but some not. | ||
929 | * E.g. "cpu/cpu-cycles/,cpu/instructions,no-overwrite/" | ||
930 | * Return -1 | ||
931 | */ | ||
932 | static int perf_top__overwrite_check(struct perf_top *top) | ||
933 | { | ||
934 | struct record_opts *opts = &top->record_opts; | ||
935 | struct perf_evlist *evlist = top->evlist; | ||
936 | struct perf_evsel_config_term *term; | ||
937 | struct list_head *config_terms; | ||
938 | struct perf_evsel *evsel; | ||
939 | int set, overwrite = -1; | ||
940 | |||
941 | evlist__for_each_entry(evlist, evsel) { | ||
942 | set = -1; | ||
943 | config_terms = &evsel->config_terms; | ||
944 | list_for_each_entry(term, config_terms, list) { | ||
945 | if (term->type == PERF_EVSEL__CONFIG_TERM_OVERWRITE) | ||
946 | set = term->val.overwrite ? 1 : 0; | ||
947 | } | ||
948 | |||
949 | /* no term for current and previous event (likely) */ | ||
950 | if ((overwrite < 0) && (set < 0)) | ||
951 | continue; | ||
952 | |||
953 | /* has term for both current and previous event, compare */ | ||
954 | if ((overwrite >= 0) && (set >= 0) && (overwrite != set)) | ||
955 | return -1; | ||
956 | |||
957 | /* no term for current event but has term for previous one */ | ||
958 | if ((overwrite >= 0) && (set < 0)) | ||
959 | return -1; | ||
960 | |||
961 | /* has term for current event */ | ||
962 | if ((overwrite < 0) && (set >= 0)) { | ||
963 | /* if it's first event, set overwrite */ | ||
964 | if (evsel == perf_evlist__first(evlist)) | ||
965 | overwrite = set; | ||
966 | else | ||
967 | return -1; | ||
968 | } | ||
969 | } | ||
970 | |||
971 | if ((overwrite >= 0) && (opts->overwrite != overwrite)) | ||
972 | opts->overwrite = overwrite; | ||
973 | |||
974 | return 0; | ||
975 | } | ||
976 | |||
977 | static int perf_top_overwrite_fallback(struct perf_top *top, | ||
978 | struct perf_evsel *evsel) | ||
979 | { | ||
980 | struct record_opts *opts = &top->record_opts; | ||
981 | struct perf_evlist *evlist = top->evlist; | ||
982 | struct perf_evsel *counter; | ||
983 | |||
984 | if (!opts->overwrite) | ||
985 | return 0; | ||
986 | |||
987 | /* only fall back when first event fails */ | ||
988 | if (evsel != perf_evlist__first(evlist)) | ||
989 | return 0; | ||
990 | |||
991 | evlist__for_each_entry(evlist, counter) | ||
992 | counter->attr.write_backward = false; | ||
993 | opts->overwrite = false; | ||
994 | ui__warning("fall back to non-overwrite mode\n"); | ||
995 | return 1; | ||
882 | } | 996 | } |
883 | 997 | ||
884 | static int perf_top__start_counters(struct perf_top *top) | 998 | static int perf_top__start_counters(struct perf_top *top) |
@@ -888,12 +1002,33 @@ static int perf_top__start_counters(struct perf_top *top) | |||
888 | struct perf_evlist *evlist = top->evlist; | 1002 | struct perf_evlist *evlist = top->evlist; |
889 | struct record_opts *opts = &top->record_opts; | 1003 | struct record_opts *opts = &top->record_opts; |
890 | 1004 | ||
1005 | if (perf_top__overwrite_check(top)) { | ||
1006 | ui__error("perf top only support consistent per-event " | ||
1007 | "overwrite setting for all events\n"); | ||
1008 | goto out_err; | ||
1009 | } | ||
1010 | |||
891 | perf_evlist__config(evlist, opts, &callchain_param); | 1011 | perf_evlist__config(evlist, opts, &callchain_param); |
892 | 1012 | ||
893 | evlist__for_each_entry(evlist, counter) { | 1013 | evlist__for_each_entry(evlist, counter) { |
894 | try_again: | 1014 | try_again: |
895 | if (perf_evsel__open(counter, top->evlist->cpus, | 1015 | if (perf_evsel__open(counter, top->evlist->cpus, |
896 | top->evlist->threads) < 0) { | 1016 | top->evlist->threads) < 0) { |
1017 | |||
1018 | /* | ||
1019 | * Specially handle overwrite fall back. | ||
1020 | * Because perf top is the only tool which has | ||
1021 | * overwrite mode by default, support | ||
1022 | * both overwrite and non-overwrite mode, and | ||
1023 | * require consistent mode for all events. | ||
1024 | * | ||
1025 | * May move it to generic code with more tools | ||
1026 | * have similar attribute. | ||
1027 | */ | ||
1028 | if (perf_missing_features.write_backward && | ||
1029 | perf_top_overwrite_fallback(top, counter)) | ||
1030 | goto try_again; | ||
1031 | |||
897 | if (perf_evsel__fallback(counter, errno, msg, sizeof(msg))) { | 1032 | if (perf_evsel__fallback(counter, errno, msg, sizeof(msg))) { |
898 | if (verbose > 0) | 1033 | if (verbose > 0) |
899 | ui__warning("%s\n", msg); | 1034 | ui__warning("%s\n", msg); |
@@ -1033,7 +1168,7 @@ static int __cmd_top(struct perf_top *top) | |||
1033 | 1168 | ||
1034 | perf_top__mmap_read(top); | 1169 | perf_top__mmap_read(top); |
1035 | 1170 | ||
1036 | if (hits == top->samples) | 1171 | if (opts->overwrite || (hits == top->samples)) |
1037 | ret = perf_evlist__poll(top->evlist, 100); | 1172 | ret = perf_evlist__poll(top->evlist, 100); |
1038 | 1173 | ||
1039 | if (resize) { | 1174 | if (resize) { |
@@ -1127,6 +1262,7 @@ int cmd_top(int argc, const char **argv) | |||
1127 | .uses_mmap = true, | 1262 | .uses_mmap = true, |
1128 | }, | 1263 | }, |
1129 | .proc_map_timeout = 500, | 1264 | .proc_map_timeout = 500, |
1265 | .overwrite = 1, | ||
1130 | }, | 1266 | }, |
1131 | .max_stack = sysctl_perf_event_max_stack, | 1267 | .max_stack = sysctl_perf_event_max_stack, |
1132 | .sym_pcnt_filter = 5, | 1268 | .sym_pcnt_filter = 5, |
diff --git a/tools/perf/check-headers.sh b/tools/perf/check-headers.sh index 51abdb0a4047..790ec25919a0 100755 --- a/tools/perf/check-headers.sh +++ b/tools/perf/check-headers.sh | |||
@@ -33,7 +33,6 @@ arch/s390/include/uapi/asm/kvm.h | |||
33 | arch/s390/include/uapi/asm/kvm_perf.h | 33 | arch/s390/include/uapi/asm/kvm_perf.h |
34 | arch/s390/include/uapi/asm/ptrace.h | 34 | arch/s390/include/uapi/asm/ptrace.h |
35 | arch/s390/include/uapi/asm/sie.h | 35 | arch/s390/include/uapi/asm/sie.h |
36 | arch/s390/include/uapi/asm/unistd.h | ||
37 | arch/arm/include/uapi/asm/kvm.h | 36 | arch/arm/include/uapi/asm/kvm.h |
38 | arch/arm64/include/uapi/asm/kvm.h | 37 | arch/arm64/include/uapi/asm/kvm.h |
39 | arch/alpha/include/uapi/asm/errno.h | 38 | arch/alpha/include/uapi/asm/errno.h |
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/branch.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/branch.json new file mode 100644 index 000000000000..3b6208763e50 --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/branch.json | |||
@@ -0,0 +1,27 @@ | |||
1 | [ | ||
2 | {, | ||
3 | "EventCode": "0x7A", | ||
4 | "EventName": "BR_INDIRECT_SPEC", | ||
5 | "BriefDescription": "Branch speculatively executed - Indirect branch" | ||
6 | }, | ||
7 | {, | ||
8 | "EventCode": "0xC9", | ||
9 | "EventName": "BR_COND", | ||
10 | "BriefDescription": "Conditional branch executed" | ||
11 | }, | ||
12 | {, | ||
13 | "EventCode": "0xCA", | ||
14 | "EventName": "BR_INDIRECT_MISPRED", | ||
15 | "BriefDescription": "Indirect branch mispredicted" | ||
16 | }, | ||
17 | {, | ||
18 | "EventCode": "0xCB", | ||
19 | "EventName": "BR_INDIRECT_MISPRED_ADDR", | ||
20 | "BriefDescription": "Indirect branch mispredicted because of address miscompare" | ||
21 | }, | ||
22 | {, | ||
23 | "EventCode": "0xCC", | ||
24 | "EventName": "BR_COND_MISPRED", | ||
25 | "BriefDescription": "Conditional branch mispredicted" | ||
26 | } | ||
27 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/bus.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/bus.json new file mode 100644 index 000000000000..480d9f7460ab --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/bus.json | |||
@@ -0,0 +1,22 @@ | |||
1 | [ | ||
2 | {, | ||
3 | "EventCode": "0x60", | ||
4 | "EventName": "BUS_ACCESS_LD", | ||
5 | "BriefDescription": "Bus access - Read" | ||
6 | }, | ||
7 | {, | ||
8 | "EventCode": "0x61", | ||
9 | "EventName": "BUS_ACCESS_ST", | ||
10 | "BriefDescription": "Bus access - Write" | ||
11 | }, | ||
12 | {, | ||
13 | "EventCode": "0xC0", | ||
14 | "EventName": "EXT_MEM_REQ", | ||
15 | "BriefDescription": "External memory request" | ||
16 | }, | ||
17 | {, | ||
18 | "EventCode": "0xC1", | ||
19 | "EventName": "EXT_MEM_REQ_NC", | ||
20 | "BriefDescription": "Non-cacheable external memory request" | ||
21 | } | ||
22 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/cache.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/cache.json new file mode 100644 index 000000000000..11baad6344b9 --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/cache.json | |||
@@ -0,0 +1,27 @@ | |||
1 | [ | ||
2 | {, | ||
3 | "EventCode": "0xC2", | ||
4 | "EventName": "PREFETCH_LINEFILL", | ||
5 | "BriefDescription": "Linefill because of prefetch" | ||
6 | }, | ||
7 | {, | ||
8 | "EventCode": "0xC3", | ||
9 | "EventName": "PREFETCH_LINEFILL_DROP", | ||
10 | "BriefDescription": "Instruction Cache Throttle occurred" | ||
11 | }, | ||
12 | {, | ||
13 | "EventCode": "0xC4", | ||
14 | "EventName": "READ_ALLOC_ENTER", | ||
15 | "BriefDescription": "Entering read allocate mode" | ||
16 | }, | ||
17 | {, | ||
18 | "EventCode": "0xC5", | ||
19 | "EventName": "READ_ALLOC", | ||
20 | "BriefDescription": "Read allocate mode" | ||
21 | }, | ||
22 | {, | ||
23 | "EventCode": "0xC8", | ||
24 | "EventName": "EXT_SNOOP", | ||
25 | "BriefDescription": "SCU Snooped data from another CPU for this CPU" | ||
26 | } | ||
27 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/memory.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/memory.json new file mode 100644 index 000000000000..480d9f7460ab --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/memory.json | |||
@@ -0,0 +1,22 @@ | |||
1 | [ | ||
2 | {, | ||
3 | "EventCode": "0x60", | ||
4 | "EventName": "BUS_ACCESS_LD", | ||
5 | "BriefDescription": "Bus access - Read" | ||
6 | }, | ||
7 | {, | ||
8 | "EventCode": "0x61", | ||
9 | "EventName": "BUS_ACCESS_ST", | ||
10 | "BriefDescription": "Bus access - Write" | ||
11 | }, | ||
12 | {, | ||
13 | "EventCode": "0xC0", | ||
14 | "EventName": "EXT_MEM_REQ", | ||
15 | "BriefDescription": "External memory request" | ||
16 | }, | ||
17 | {, | ||
18 | "EventCode": "0xC1", | ||
19 | "EventName": "EXT_MEM_REQ_NC", | ||
20 | "BriefDescription": "Non-cacheable external memory request" | ||
21 | } | ||
22 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/other.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/other.json new file mode 100644 index 000000000000..73a22402d003 --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/other.json | |||
@@ -0,0 +1,32 @@ | |||
1 | [ | ||
2 | {, | ||
3 | "EventCode": "0x86", | ||
4 | "EventName": "EXC_IRQ", | ||
5 | "BriefDescription": "Exception taken, IRQ" | ||
6 | }, | ||
7 | {, | ||
8 | "EventCode": "0x87", | ||
9 | "EventName": "EXC_FIQ", | ||
10 | "BriefDescription": "Exception taken, FIQ" | ||
11 | }, | ||
12 | {, | ||
13 | "EventCode": "0xC6", | ||
14 | "EventName": "PRE_DECODE_ERR", | ||
15 | "BriefDescription": "Pre-decode error" | ||
16 | }, | ||
17 | {, | ||
18 | "EventCode": "0xD0", | ||
19 | "EventName": "L1I_CACHE_ERR", | ||
20 | "BriefDescription": "L1 Instruction Cache (data or tag) memory error" | ||
21 | }, | ||
22 | {, | ||
23 | "EventCode": "0xD1", | ||
24 | "EventName": "L1D_CACHE_ERR", | ||
25 | "BriefDescription": "L1 Data Cache (data, tag or dirty) memory error, correctable or non-correctable" | ||
26 | }, | ||
27 | {, | ||
28 | "EventCode": "0xD2", | ||
29 | "EventName": "TLB_ERR", | ||
30 | "BriefDescription": "TLB memory error" | ||
31 | } | ||
32 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/pipeline.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/pipeline.json new file mode 100644 index 000000000000..3149fb90555a --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/pipeline.json | |||
@@ -0,0 +1,52 @@ | |||
1 | [ | ||
2 | {, | ||
3 | "EventCode": "0xC7", | ||
4 | "EventName": "STALL_SB_FULL", | ||
5 | "BriefDescription": "Data Write operation that stalls the pipeline because the store buffer is full" | ||
6 | }, | ||
7 | {, | ||
8 | "EventCode": "0xE0", | ||
9 | "EventName": "OTHER_IQ_DEP_STALL", | ||
10 | "BriefDescription": "Cycles that the DPU IQ is empty and that is not because of a recent micro-TLB miss, instruction cache miss or pre-decode error" | ||
11 | }, | ||
12 | {, | ||
13 | "EventCode": "0xE1", | ||
14 | "EventName": "IC_DEP_STALL", | ||
15 | "BriefDescription": "Cycles the DPU IQ is empty and there is an instruction cache miss being processed" | ||
16 | }, | ||
17 | {, | ||
18 | "EventCode": "0xE2", | ||
19 | "EventName": "IUTLB_DEP_STALL", | ||
20 | "BriefDescription": "Cycles the DPU IQ is empty and there is an instruction micro-TLB miss being processed" | ||
21 | }, | ||
22 | {, | ||
23 | "EventCode": "0xE3", | ||
24 | "EventName": "DECODE_DEP_STALL", | ||
25 | "BriefDescription": "Cycles the DPU IQ is empty and there is a pre-decode error being processed" | ||
26 | }, | ||
27 | {, | ||
28 | "EventCode": "0xE4", | ||
29 | "EventName": "OTHER_INTERLOCK_STALL", | ||
30 | "BriefDescription": "Cycles there is an interlock other than Advanced SIMD/Floating-point instructions or load/store instruction" | ||
31 | }, | ||
32 | {, | ||
33 | "EventCode": "0xE5", | ||
34 | "EventName": "AGU_DEP_STALL", | ||
35 | "BriefDescription": "Cycles there is an interlock for a load/store instruction waiting for data to calculate the address in the AGU" | ||
36 | }, | ||
37 | {, | ||
38 | "EventCode": "0xE6", | ||
39 | "EventName": "SIMD_DEP_STALL", | ||
40 | "BriefDescription": "Cycles there is an interlock for an Advanced SIMD/Floating-point operation." | ||
41 | }, | ||
42 | {, | ||
43 | "EventCode": "0xE7", | ||
44 | "EventName": "LD_DEP_STALL", | ||
45 | "BriefDescription": "Cycles there is a stall in the Wr stage because of a load miss" | ||
46 | }, | ||
47 | {, | ||
48 | "EventCode": "0xE8", | ||
49 | "EventName": "ST_DEP_STALL", | ||
50 | "BriefDescription": "Cycles there is a stall in the Wr stage because of a store" | ||
51 | } | ||
52 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/mapfile.csv b/tools/perf/pmu-events/arch/arm64/mapfile.csv index 219d6756134e..e61c9ca6cf9e 100644 --- a/tools/perf/pmu-events/arch/arm64/mapfile.csv +++ b/tools/perf/pmu-events/arch/arm64/mapfile.csv | |||
@@ -13,3 +13,4 @@ | |||
13 | # | 13 | # |
14 | #Family-model,Version,Filename,EventType | 14 | #Family-model,Version,Filename,EventType |
15 | 0x00000000420f5160,v1,cavium,core | 15 | 0x00000000420f5160,v1,cavium,core |
16 | 0x00000000410fd03[[:xdigit:]],v1,cortex-a53,core | ||
diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index 4035d43523c3..e0b1b414d466 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c | |||
@@ -31,10 +31,12 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count, | |||
31 | int i; | 31 | int i; |
32 | 32 | ||
33 | for (i = 0; i < evlist->nr_mmaps; i++) { | 33 | for (i = 0; i < evlist->nr_mmaps; i++) { |
34 | struct perf_mmap *map = &evlist->overwrite_mmap[i]; | ||
34 | union perf_event *event; | 35 | union perf_event *event; |
36 | u64 start, end; | ||
35 | 37 | ||
36 | perf_mmap__read_catchup(&evlist->overwrite_mmap[i]); | 38 | perf_mmap__read_init(map, true, &start, &end); |
37 | while ((event = perf_mmap__read_backward(&evlist->overwrite_mmap[i])) != NULL) { | 39 | while ((event = perf_mmap__read_event(map, true, &start, end)) != NULL) { |
38 | const u32 type = event->header.type; | 40 | const u32 type = event->header.type; |
39 | 41 | ||
40 | switch (type) { | 42 | switch (type) { |
@@ -49,6 +51,7 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count, | |||
49 | return TEST_FAIL; | 51 | return TEST_FAIL; |
50 | } | 52 | } |
51 | } | 53 | } |
54 | perf_mmap__read_done(map); | ||
52 | } | 55 | } |
53 | return TEST_OK; | 56 | return TEST_OK; |
54 | } | 57 | } |
diff --git a/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh b/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh index 8b3da21a08f1..c446c894b297 100755 --- a/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh +++ b/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh | |||
@@ -22,10 +22,23 @@ trace_libc_inet_pton_backtrace() { | |||
22 | expected[4]="rtt min.*" | 22 | expected[4]="rtt min.*" |
23 | expected[5]="[0-9]+\.[0-9]+[[:space:]]+probe_libc:inet_pton:\([[:xdigit:]]+\)" | 23 | expected[5]="[0-9]+\.[0-9]+[[:space:]]+probe_libc:inet_pton:\([[:xdigit:]]+\)" |
24 | expected[6]=".*inet_pton[[:space:]]\($libc\)$" | 24 | expected[6]=".*inet_pton[[:space:]]\($libc\)$" |
25 | expected[7]="getaddrinfo[[:space:]]\($libc\)$" | 25 | case "$(uname -m)" in |
26 | expected[8]=".*\(.*/bin/ping.*\)$" | 26 | s390x) |
27 | 27 | eventattr='call-graph=dwarf' | |
28 | perf trace --no-syscalls -e probe_libc:inet_pton/max-stack=3/ ping -6 -c 1 ::1 2>&1 | grep -v ^$ | while read line ; do | 28 | expected[7]="gaih_inet[[:space:]]\(inlined\)$" |
29 | expected[8]="__GI_getaddrinfo[[:space:]]\(inlined\)$" | ||
30 | expected[9]="main[[:space:]]\(.*/bin/ping.*\)$" | ||
31 | expected[10]="__libc_start_main[[:space:]]\($libc\)$" | ||
32 | expected[11]="_start[[:space:]]\(.*/bin/ping.*\)$" | ||
33 | ;; | ||
34 | *) | ||
35 | eventattr='max-stack=3' | ||
36 | expected[7]="getaddrinfo[[:space:]]\($libc\)$" | ||
37 | expected[8]=".*\(.*/bin/ping.*\)$" | ||
38 | ;; | ||
39 | esac | ||
40 | |||
41 | perf trace --no-syscalls -e probe_libc:inet_pton/$eventattr/ ping -6 -c 1 ::1 2>&1 | grep -v ^$ | while read line ; do | ||
29 | echo $line | 42 | echo $line |
30 | echo "$line" | egrep -q "${expected[$idx]}" | 43 | echo "$line" | egrep -q "${expected[$idx]}" |
31 | if [ $? -ne 0 ] ; then | 44 | if [ $? -ne 0 ] ; then |
@@ -33,7 +46,7 @@ trace_libc_inet_pton_backtrace() { | |||
33 | exit 1 | 46 | exit 1 |
34 | fi | 47 | fi |
35 | let idx+=1 | 48 | let idx+=1 |
36 | [ $idx -eq 9 ] && break | 49 | [ -z "${expected[$idx]}" ] && break |
37 | done | 50 | done |
38 | } | 51 | } |
39 | 52 | ||
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index 68146f4620a5..6495ee55d9c3 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c | |||
@@ -608,7 +608,8 @@ static int hist_browser__title(struct hist_browser *browser, char *bf, size_t si | |||
608 | return browser->title ? browser->title(browser, bf, size) : 0; | 608 | return browser->title ? browser->title(browser, bf, size) : 0; |
609 | } | 609 | } |
610 | 610 | ||
611 | int hist_browser__run(struct hist_browser *browser, const char *help) | 611 | int hist_browser__run(struct hist_browser *browser, const char *help, |
612 | bool warn_lost_event) | ||
612 | { | 613 | { |
613 | int key; | 614 | int key; |
614 | char title[160]; | 615 | char title[160]; |
@@ -638,8 +639,9 @@ int hist_browser__run(struct hist_browser *browser, const char *help) | |||
638 | nr_entries = hist_browser__nr_entries(browser); | 639 | nr_entries = hist_browser__nr_entries(browser); |
639 | ui_browser__update_nr_entries(&browser->b, nr_entries); | 640 | ui_browser__update_nr_entries(&browser->b, nr_entries); |
640 | 641 | ||
641 | if (browser->hists->stats.nr_lost_warned != | 642 | if (warn_lost_event && |
642 | browser->hists->stats.nr_events[PERF_RECORD_LOST]) { | 643 | (browser->hists->stats.nr_lost_warned != |
644 | browser->hists->stats.nr_events[PERF_RECORD_LOST])) { | ||
643 | browser->hists->stats.nr_lost_warned = | 645 | browser->hists->stats.nr_lost_warned = |
644 | browser->hists->stats.nr_events[PERF_RECORD_LOST]; | 646 | browser->hists->stats.nr_events[PERF_RECORD_LOST]; |
645 | ui_browser__warn_lost_events(&browser->b); | 647 | ui_browser__warn_lost_events(&browser->b); |
@@ -2763,7 +2765,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, | |||
2763 | bool left_exits, | 2765 | bool left_exits, |
2764 | struct hist_browser_timer *hbt, | 2766 | struct hist_browser_timer *hbt, |
2765 | float min_pcnt, | 2767 | float min_pcnt, |
2766 | struct perf_env *env) | 2768 | struct perf_env *env, |
2769 | bool warn_lost_event) | ||
2767 | { | 2770 | { |
2768 | struct hists *hists = evsel__hists(evsel); | 2771 | struct hists *hists = evsel__hists(evsel); |
2769 | struct hist_browser *browser = perf_evsel_browser__new(evsel, hbt, env); | 2772 | struct hist_browser *browser = perf_evsel_browser__new(evsel, hbt, env); |
@@ -2844,7 +2847,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, | |||
2844 | 2847 | ||
2845 | nr_options = 0; | 2848 | nr_options = 0; |
2846 | 2849 | ||
2847 | key = hist_browser__run(browser, helpline); | 2850 | key = hist_browser__run(browser, helpline, |
2851 | warn_lost_event); | ||
2848 | 2852 | ||
2849 | if (browser->he_selection != NULL) { | 2853 | if (browser->he_selection != NULL) { |
2850 | thread = hist_browser__selected_thread(browser); | 2854 | thread = hist_browser__selected_thread(browser); |
@@ -3184,7 +3188,8 @@ static void perf_evsel_menu__write(struct ui_browser *browser, | |||
3184 | 3188 | ||
3185 | static int perf_evsel_menu__run(struct perf_evsel_menu *menu, | 3189 | static int perf_evsel_menu__run(struct perf_evsel_menu *menu, |
3186 | int nr_events, const char *help, | 3190 | int nr_events, const char *help, |
3187 | struct hist_browser_timer *hbt) | 3191 | struct hist_browser_timer *hbt, |
3192 | bool warn_lost_event) | ||
3188 | { | 3193 | { |
3189 | struct perf_evlist *evlist = menu->b.priv; | 3194 | struct perf_evlist *evlist = menu->b.priv; |
3190 | struct perf_evsel *pos; | 3195 | struct perf_evsel *pos; |
@@ -3203,7 +3208,9 @@ static int perf_evsel_menu__run(struct perf_evsel_menu *menu, | |||
3203 | case K_TIMER: | 3208 | case K_TIMER: |
3204 | hbt->timer(hbt->arg); | 3209 | hbt->timer(hbt->arg); |
3205 | 3210 | ||
3206 | if (!menu->lost_events_warned && menu->lost_events) { | 3211 | if (!menu->lost_events_warned && |
3212 | menu->lost_events && | ||
3213 | warn_lost_event) { | ||
3207 | ui_browser__warn_lost_events(&menu->b); | 3214 | ui_browser__warn_lost_events(&menu->b); |
3208 | menu->lost_events_warned = true; | 3215 | menu->lost_events_warned = true; |
3209 | } | 3216 | } |
@@ -3224,7 +3231,8 @@ browse_hists: | |||
3224 | key = perf_evsel__hists_browse(pos, nr_events, help, | 3231 | key = perf_evsel__hists_browse(pos, nr_events, help, |
3225 | true, hbt, | 3232 | true, hbt, |
3226 | menu->min_pcnt, | 3233 | menu->min_pcnt, |
3227 | menu->env); | 3234 | menu->env, |
3235 | warn_lost_event); | ||
3228 | ui_browser__show_title(&menu->b, title); | 3236 | ui_browser__show_title(&menu->b, title); |
3229 | switch (key) { | 3237 | switch (key) { |
3230 | case K_TAB: | 3238 | case K_TAB: |
@@ -3282,7 +3290,8 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist, | |||
3282 | int nr_entries, const char *help, | 3290 | int nr_entries, const char *help, |
3283 | struct hist_browser_timer *hbt, | 3291 | struct hist_browser_timer *hbt, |
3284 | float min_pcnt, | 3292 | float min_pcnt, |
3285 | struct perf_env *env) | 3293 | struct perf_env *env, |
3294 | bool warn_lost_event) | ||
3286 | { | 3295 | { |
3287 | struct perf_evsel *pos; | 3296 | struct perf_evsel *pos; |
3288 | struct perf_evsel_menu menu = { | 3297 | struct perf_evsel_menu menu = { |
@@ -3309,13 +3318,15 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist, | |||
3309 | menu.b.width = line_len; | 3318 | menu.b.width = line_len; |
3310 | } | 3319 | } |
3311 | 3320 | ||
3312 | return perf_evsel_menu__run(&menu, nr_entries, help, hbt); | 3321 | return perf_evsel_menu__run(&menu, nr_entries, help, |
3322 | hbt, warn_lost_event); | ||
3313 | } | 3323 | } |
3314 | 3324 | ||
3315 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, | 3325 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, |
3316 | struct hist_browser_timer *hbt, | 3326 | struct hist_browser_timer *hbt, |
3317 | float min_pcnt, | 3327 | float min_pcnt, |
3318 | struct perf_env *env) | 3328 | struct perf_env *env, |
3329 | bool warn_lost_event) | ||
3319 | { | 3330 | { |
3320 | int nr_entries = evlist->nr_entries; | 3331 | int nr_entries = evlist->nr_entries; |
3321 | 3332 | ||
@@ -3325,7 +3336,7 @@ single_entry: | |||
3325 | 3336 | ||
3326 | return perf_evsel__hists_browse(first, nr_entries, help, | 3337 | return perf_evsel__hists_browse(first, nr_entries, help, |
3327 | false, hbt, min_pcnt, | 3338 | false, hbt, min_pcnt, |
3328 | env); | 3339 | env, warn_lost_event); |
3329 | } | 3340 | } |
3330 | 3341 | ||
3331 | if (symbol_conf.event_group) { | 3342 | if (symbol_conf.event_group) { |
@@ -3342,5 +3353,6 @@ single_entry: | |||
3342 | } | 3353 | } |
3343 | 3354 | ||
3344 | return __perf_evlist__tui_browse_hists(evlist, nr_entries, help, | 3355 | return __perf_evlist__tui_browse_hists(evlist, nr_entries, help, |
3345 | hbt, min_pcnt, env); | 3356 | hbt, min_pcnt, env, |
3357 | warn_lost_event); | ||
3346 | } | 3358 | } |
diff --git a/tools/perf/ui/browsers/hists.h b/tools/perf/ui/browsers/hists.h index ba431777f559..9428bee076f2 100644 --- a/tools/perf/ui/browsers/hists.h +++ b/tools/perf/ui/browsers/hists.h | |||
@@ -28,7 +28,8 @@ struct hist_browser { | |||
28 | 28 | ||
29 | struct hist_browser *hist_browser__new(struct hists *hists); | 29 | struct hist_browser *hist_browser__new(struct hists *hists); |
30 | void hist_browser__delete(struct hist_browser *browser); | 30 | void hist_browser__delete(struct hist_browser *browser); |
31 | int hist_browser__run(struct hist_browser *browser, const char *help); | 31 | int hist_browser__run(struct hist_browser *browser, const char *help, |
32 | bool warn_lost_event); | ||
32 | void hist_browser__init(struct hist_browser *browser, | 33 | void hist_browser__init(struct hist_browser *browser, |
33 | struct hists *hists); | 34 | struct hists *hists); |
34 | #endif /* _PERF_UI_BROWSER_HISTS_H_ */ | 35 | #endif /* _PERF_UI_BROWSER_HISTS_H_ */ |
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index ac35cd214feb..e5fc14e53c05 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -715,28 +715,11 @@ union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, int | |||
715 | return perf_mmap__read_forward(md); | 715 | return perf_mmap__read_forward(md); |
716 | } | 716 | } |
717 | 717 | ||
718 | union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, int idx) | ||
719 | { | ||
720 | struct perf_mmap *md = &evlist->mmap[idx]; | ||
721 | |||
722 | /* | ||
723 | * No need to check messup for backward ring buffer: | ||
724 | * We can always read arbitrary long data from a backward | ||
725 | * ring buffer unless we forget to pause it before reading. | ||
726 | */ | ||
727 | return perf_mmap__read_backward(md); | ||
728 | } | ||
729 | |||
730 | union perf_event *perf_evlist__mmap_read(struct perf_evlist *evlist, int idx) | 718 | union perf_event *perf_evlist__mmap_read(struct perf_evlist *evlist, int idx) |
731 | { | 719 | { |
732 | return perf_evlist__mmap_read_forward(evlist, idx); | 720 | return perf_evlist__mmap_read_forward(evlist, idx); |
733 | } | 721 | } |
734 | 722 | ||
735 | void perf_evlist__mmap_read_catchup(struct perf_evlist *evlist, int idx) | ||
736 | { | ||
737 | perf_mmap__read_catchup(&evlist->mmap[idx]); | ||
738 | } | ||
739 | |||
740 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx) | 723 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx) |
741 | { | 724 | { |
742 | perf_mmap__consume(&evlist->mmap[idx], false); | 725 | perf_mmap__consume(&evlist->mmap[idx], false); |
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 75f8e0ad5d76..336b838e6957 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h | |||
@@ -133,10 +133,6 @@ union perf_event *perf_evlist__mmap_read(struct perf_evlist *evlist, int idx); | |||
133 | 133 | ||
134 | union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, | 134 | union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, |
135 | int idx); | 135 | int idx); |
136 | union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, | ||
137 | int idx); | ||
138 | void perf_evlist__mmap_read_catchup(struct perf_evlist *evlist, int idx); | ||
139 | |||
140 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx); | 136 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx); |
141 | 137 | ||
142 | int perf_evlist__open(struct perf_evlist *evlist); | 138 | int perf_evlist__open(struct perf_evlist *evlist); |
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ff359c9ece2e..ef351688b797 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -41,17 +41,7 @@ | |||
41 | 41 | ||
42 | #include "sane_ctype.h" | 42 | #include "sane_ctype.h" |
43 | 43 | ||
44 | static struct { | 44 | struct perf_missing_features perf_missing_features; |
45 | bool sample_id_all; | ||
46 | bool exclude_guest; | ||
47 | bool mmap2; | ||
48 | bool cloexec; | ||
49 | bool clockid; | ||
50 | bool clockid_wrong; | ||
51 | bool lbr_flags; | ||
52 | bool write_backward; | ||
53 | bool group_read; | ||
54 | } perf_missing_features; | ||
55 | 45 | ||
56 | static clockid_t clockid; | 46 | static clockid_t clockid; |
57 | 47 | ||
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 846e41644525..a7487c6d1866 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h | |||
@@ -149,6 +149,20 @@ union u64_swap { | |||
149 | u32 val32[2]; | 149 | u32 val32[2]; |
150 | }; | 150 | }; |
151 | 151 | ||
152 | struct perf_missing_features { | ||
153 | bool sample_id_all; | ||
154 | bool exclude_guest; | ||
155 | bool mmap2; | ||
156 | bool cloexec; | ||
157 | bool clockid; | ||
158 | bool clockid_wrong; | ||
159 | bool lbr_flags; | ||
160 | bool write_backward; | ||
161 | bool group_read; | ||
162 | }; | ||
163 | |||
164 | extern struct perf_missing_features perf_missing_features; | ||
165 | |||
152 | struct cpu_map; | 166 | struct cpu_map; |
153 | struct target; | 167 | struct target; |
154 | struct thread_map; | 168 | struct thread_map; |
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index f6630cb95eff..02721b579746 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h | |||
@@ -430,7 +430,8 @@ int hist_entry__tui_annotate(struct hist_entry *he, struct perf_evsel *evsel, | |||
430 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, | 430 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, |
431 | struct hist_browser_timer *hbt, | 431 | struct hist_browser_timer *hbt, |
432 | float min_pcnt, | 432 | float min_pcnt, |
433 | struct perf_env *env); | 433 | struct perf_env *env, |
434 | bool warn_lost_event); | ||
434 | int script_browse(const char *script_opt); | 435 | int script_browse(const char *script_opt); |
435 | #else | 436 | #else |
436 | static inline | 437 | static inline |
@@ -438,7 +439,8 @@ int perf_evlist__tui_browse_hists(struct perf_evlist *evlist __maybe_unused, | |||
438 | const char *help __maybe_unused, | 439 | const char *help __maybe_unused, |
439 | struct hist_browser_timer *hbt __maybe_unused, | 440 | struct hist_browser_timer *hbt __maybe_unused, |
440 | float min_pcnt __maybe_unused, | 441 | float min_pcnt __maybe_unused, |
441 | struct perf_env *env __maybe_unused) | 442 | struct perf_env *env __maybe_unused, |
443 | bool warn_lost_event __maybe_unused) | ||
442 | { | 444 | { |
443 | return 0; | 445 | return 0; |
444 | } | 446 | } |
diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c index 05076e683938..91531a7c8fbf 100644 --- a/tools/perf/util/mmap.c +++ b/tools/perf/util/mmap.c | |||
@@ -22,29 +22,27 @@ size_t perf_mmap__mmap_len(struct perf_mmap *map) | |||
22 | 22 | ||
23 | /* When check_messup is true, 'end' must points to a good entry */ | 23 | /* When check_messup is true, 'end' must points to a good entry */ |
24 | static union perf_event *perf_mmap__read(struct perf_mmap *map, | 24 | static union perf_event *perf_mmap__read(struct perf_mmap *map, |
25 | u64 start, u64 end, u64 *prev) | 25 | u64 *startp, u64 end) |
26 | { | 26 | { |
27 | unsigned char *data = map->base + page_size; | 27 | unsigned char *data = map->base + page_size; |
28 | union perf_event *event = NULL; | 28 | union perf_event *event = NULL; |
29 | int diff = end - start; | 29 | int diff = end - *startp; |
30 | 30 | ||
31 | if (diff >= (int)sizeof(event->header)) { | 31 | if (diff >= (int)sizeof(event->header)) { |
32 | size_t size; | 32 | size_t size; |
33 | 33 | ||
34 | event = (union perf_event *)&data[start & map->mask]; | 34 | event = (union perf_event *)&data[*startp & map->mask]; |
35 | size = event->header.size; | 35 | size = event->header.size; |
36 | 36 | ||
37 | if (size < sizeof(event->header) || diff < (int)size) { | 37 | if (size < sizeof(event->header) || diff < (int)size) |
38 | event = NULL; | 38 | return NULL; |
39 | goto broken_event; | ||
40 | } | ||
41 | 39 | ||
42 | /* | 40 | /* |
43 | * Event straddles the mmap boundary -- header should always | 41 | * Event straddles the mmap boundary -- header should always |
44 | * be inside due to u64 alignment of output. | 42 | * be inside due to u64 alignment of output. |
45 | */ | 43 | */ |
46 | if ((start & map->mask) + size != ((start + size) & map->mask)) { | 44 | if ((*startp & map->mask) + size != ((*startp + size) & map->mask)) { |
47 | unsigned int offset = start; | 45 | unsigned int offset = *startp; |
48 | unsigned int len = min(sizeof(*event), size), cpy; | 46 | unsigned int len = min(sizeof(*event), size), cpy; |
49 | void *dst = map->event_copy; | 47 | void *dst = map->event_copy; |
50 | 48 | ||
@@ -59,20 +57,19 @@ static union perf_event *perf_mmap__read(struct perf_mmap *map, | |||
59 | event = (union perf_event *)map->event_copy; | 57 | event = (union perf_event *)map->event_copy; |
60 | } | 58 | } |
61 | 59 | ||
62 | start += size; | 60 | *startp += size; |
63 | } | 61 | } |
64 | 62 | ||
65 | broken_event: | ||
66 | if (prev) | ||
67 | *prev = start; | ||
68 | |||
69 | return event; | 63 | return event; |
70 | } | 64 | } |
71 | 65 | ||
66 | /* | ||
67 | * legacy interface for mmap read. | ||
68 | * Don't use it. Use perf_mmap__read_event(). | ||
69 | */ | ||
72 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map) | 70 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map) |
73 | { | 71 | { |
74 | u64 head; | 72 | u64 head; |
75 | u64 old = map->prev; | ||
76 | 73 | ||
77 | /* | 74 | /* |
78 | * Check if event was unmapped due to a POLLHUP/POLLERR. | 75 | * Check if event was unmapped due to a POLLHUP/POLLERR. |
@@ -82,13 +79,26 @@ union perf_event *perf_mmap__read_forward(struct perf_mmap *map) | |||
82 | 79 | ||
83 | head = perf_mmap__read_head(map); | 80 | head = perf_mmap__read_head(map); |
84 | 81 | ||
85 | return perf_mmap__read(map, old, head, &map->prev); | 82 | return perf_mmap__read(map, &map->prev, head); |
86 | } | 83 | } |
87 | 84 | ||
88 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map) | 85 | /* |
86 | * Read event from ring buffer one by one. | ||
87 | * Return one event for each call. | ||
88 | * | ||
89 | * Usage: | ||
90 | * perf_mmap__read_init() | ||
91 | * while(event = perf_mmap__read_event()) { | ||
92 | * //process the event | ||
93 | * perf_mmap__consume() | ||
94 | * } | ||
95 | * perf_mmap__read_done() | ||
96 | */ | ||
97 | union perf_event *perf_mmap__read_event(struct perf_mmap *map, | ||
98 | bool overwrite, | ||
99 | u64 *startp, u64 end) | ||
89 | { | 100 | { |
90 | u64 head, end; | 101 | union perf_event *event; |
91 | u64 start = map->prev; | ||
92 | 102 | ||
93 | /* | 103 | /* |
94 | * Check if event was unmapped due to a POLLHUP/POLLERR. | 104 | * Check if event was unmapped due to a POLLHUP/POLLERR. |
@@ -96,40 +106,19 @@ union perf_event *perf_mmap__read_backward(struct perf_mmap *map) | |||
96 | if (!refcount_read(&map->refcnt)) | 106 | if (!refcount_read(&map->refcnt)) |
97 | return NULL; | 107 | return NULL; |
98 | 108 | ||
99 | head = perf_mmap__read_head(map); | 109 | if (startp == NULL) |
100 | if (!head) | ||
101 | return NULL; | 110 | return NULL; |
102 | 111 | ||
103 | /* | 112 | /* non-overwirte doesn't pause the ringbuffer */ |
104 | * 'head' pointer starts from 0. Kernel minus sizeof(record) form | 113 | if (!overwrite) |
105 | * it each time when kernel writes to it, so in fact 'head' is | 114 | end = perf_mmap__read_head(map); |
106 | * negative. 'end' pointer is made manually by adding the size of | ||
107 | * the ring buffer to 'head' pointer, means the validate data can | ||
108 | * read is the whole ring buffer. If 'end' is positive, the ring | ||
109 | * buffer has not fully filled, so we must adjust 'end' to 0. | ||
110 | * | ||
111 | * However, since both 'head' and 'end' is unsigned, we can't | ||
112 | * simply compare 'end' against 0. Here we compare '-head' and | ||
113 | * the size of the ring buffer, where -head is the number of bytes | ||
114 | * kernel write to the ring buffer. | ||
115 | */ | ||
116 | if (-head < (u64)(map->mask + 1)) | ||
117 | end = 0; | ||
118 | else | ||
119 | end = head + map->mask + 1; | ||
120 | |||
121 | return perf_mmap__read(map, start, end, &map->prev); | ||
122 | } | ||
123 | 115 | ||
124 | void perf_mmap__read_catchup(struct perf_mmap *map) | 116 | event = perf_mmap__read(map, startp, end); |
125 | { | ||
126 | u64 head; | ||
127 | 117 | ||
128 | if (!refcount_read(&map->refcnt)) | 118 | if (!overwrite) |
129 | return; | 119 | map->prev = *startp; |
130 | 120 | ||
131 | head = perf_mmap__read_head(map); | 121 | return event; |
132 | map->prev = head; | ||
133 | } | 122 | } |
134 | 123 | ||
135 | static bool perf_mmap__empty(struct perf_mmap *map) | 124 | static bool perf_mmap__empty(struct perf_mmap *map) |
@@ -267,41 +256,60 @@ static int overwrite_rb_find_range(void *buf, int mask, u64 head, u64 *start, u6 | |||
267 | return -1; | 256 | return -1; |
268 | } | 257 | } |
269 | 258 | ||
270 | int perf_mmap__push(struct perf_mmap *md, bool overwrite, | 259 | /* |
271 | void *to, int push(void *to, void *buf, size_t size)) | 260 | * Report the start and end of the available data in ringbuffer |
261 | */ | ||
262 | int perf_mmap__read_init(struct perf_mmap *md, bool overwrite, | ||
263 | u64 *startp, u64 *endp) | ||
272 | { | 264 | { |
273 | u64 head = perf_mmap__read_head(md); | 265 | u64 head = perf_mmap__read_head(md); |
274 | u64 old = md->prev; | 266 | u64 old = md->prev; |
275 | u64 end = head, start = old; | ||
276 | unsigned char *data = md->base + page_size; | 267 | unsigned char *data = md->base + page_size; |
277 | unsigned long size; | 268 | unsigned long size; |
278 | void *buf; | ||
279 | int rc = 0; | ||
280 | 269 | ||
281 | start = overwrite ? head : old; | 270 | *startp = overwrite ? head : old; |
282 | end = overwrite ? old : head; | 271 | *endp = overwrite ? old : head; |
283 | 272 | ||
284 | if (start == end) | 273 | if (*startp == *endp) |
285 | return 0; | 274 | return -EAGAIN; |
286 | 275 | ||
287 | size = end - start; | 276 | size = *endp - *startp; |
288 | if (size > (unsigned long)(md->mask) + 1) { | 277 | if (size > (unsigned long)(md->mask) + 1) { |
289 | if (!overwrite) { | 278 | if (!overwrite) { |
290 | WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n"); | 279 | WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n"); |
291 | 280 | ||
292 | md->prev = head; | 281 | md->prev = head; |
293 | perf_mmap__consume(md, overwrite); | 282 | perf_mmap__consume(md, overwrite); |
294 | return 0; | 283 | return -EAGAIN; |
295 | } | 284 | } |
296 | 285 | ||
297 | /* | 286 | /* |
298 | * Backward ring buffer is full. We still have a chance to read | 287 | * Backward ring buffer is full. We still have a chance to read |
299 | * most of data from it. | 288 | * most of data from it. |
300 | */ | 289 | */ |
301 | if (overwrite_rb_find_range(data, md->mask, head, &start, &end)) | 290 | if (overwrite_rb_find_range(data, md->mask, head, startp, endp)) |
302 | return -1; | 291 | return -EINVAL; |
303 | } | 292 | } |
304 | 293 | ||
294 | return 0; | ||
295 | } | ||
296 | |||
297 | int perf_mmap__push(struct perf_mmap *md, bool overwrite, | ||
298 | void *to, int push(void *to, void *buf, size_t size)) | ||
299 | { | ||
300 | u64 head = perf_mmap__read_head(md); | ||
301 | u64 end, start; | ||
302 | unsigned char *data = md->base + page_size; | ||
303 | unsigned long size; | ||
304 | void *buf; | ||
305 | int rc = 0; | ||
306 | |||
307 | rc = perf_mmap__read_init(md, overwrite, &start, &end); | ||
308 | if (rc < 0) | ||
309 | return (rc == -EAGAIN) ? 0 : -1; | ||
310 | |||
311 | size = end - start; | ||
312 | |||
305 | if ((start & md->mask) + size != (end & md->mask)) { | 313 | if ((start & md->mask) + size != (end & md->mask)) { |
306 | buf = &data[start & md->mask]; | 314 | buf = &data[start & md->mask]; |
307 | size = md->mask + 1 - (start & md->mask); | 315 | size = md->mask + 1 - (start & md->mask); |
@@ -327,3 +335,14 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, | |||
327 | out: | 335 | out: |
328 | return rc; | 336 | return rc; |
329 | } | 337 | } |
338 | |||
339 | /* | ||
340 | * Mandatory for overwrite mode | ||
341 | * The direction of overwrite mode is backward. | ||
342 | * The last perf_mmap__read() will set tail to map->prev. | ||
343 | * Need to correct the map->prev to head which is the end of next read. | ||
344 | */ | ||
345 | void perf_mmap__read_done(struct perf_mmap *map) | ||
346 | { | ||
347 | map->prev = perf_mmap__read_head(map); | ||
348 | } | ||
diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h index e43d7b55a55f..ec7d3a24e276 100644 --- a/tools/perf/util/mmap.h +++ b/tools/perf/util/mmap.h | |||
@@ -65,8 +65,6 @@ void perf_mmap__put(struct perf_mmap *map); | |||
65 | 65 | ||
66 | void perf_mmap__consume(struct perf_mmap *map, bool overwrite); | 66 | void perf_mmap__consume(struct perf_mmap *map, bool overwrite); |
67 | 67 | ||
68 | void perf_mmap__read_catchup(struct perf_mmap *md); | ||
69 | |||
70 | static inline u64 perf_mmap__read_head(struct perf_mmap *mm) | 68 | static inline u64 perf_mmap__read_head(struct perf_mmap *mm) |
71 | { | 69 | { |
72 | struct perf_event_mmap_page *pc = mm->base; | 70 | struct perf_event_mmap_page *pc = mm->base; |
@@ -87,11 +85,17 @@ static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail) | |||
87 | } | 85 | } |
88 | 86 | ||
89 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map); | 87 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map); |
90 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map); | 88 | |
89 | union perf_event *perf_mmap__read_event(struct perf_mmap *map, | ||
90 | bool overwrite, | ||
91 | u64 *startp, u64 end); | ||
91 | 92 | ||
92 | int perf_mmap__push(struct perf_mmap *md, bool backward, | 93 | int perf_mmap__push(struct perf_mmap *md, bool backward, |
93 | void *to, int push(void *to, void *buf, size_t size)); | 94 | void *to, int push(void *to, void *buf, size_t size)); |
94 | 95 | ||
95 | size_t perf_mmap__mmap_len(struct perf_mmap *map); | 96 | size_t perf_mmap__mmap_len(struct perf_mmap *map); |
96 | 97 | ||
98 | int perf_mmap__read_init(struct perf_mmap *md, bool overwrite, | ||
99 | u64 *startp, u64 *endp); | ||
100 | void perf_mmap__read_done(struct perf_mmap *map); | ||
97 | #endif /*__PERF_MMAP_H */ | 101 | #endif /*__PERF_MMAP_H */ |
diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 443892dabedb..1019bbc5dbd8 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c | |||
@@ -340,35 +340,15 @@ size_t hex_width(u64 v) | |||
340 | return n; | 340 | return n; |
341 | } | 341 | } |
342 | 342 | ||
343 | static int hex(char ch) | ||
344 | { | ||
345 | if ((ch >= '0') && (ch <= '9')) | ||
346 | return ch - '0'; | ||
347 | if ((ch >= 'a') && (ch <= 'f')) | ||
348 | return ch - 'a' + 10; | ||
349 | if ((ch >= 'A') && (ch <= 'F')) | ||
350 | return ch - 'A' + 10; | ||
351 | return -1; | ||
352 | } | ||
353 | |||
354 | /* | 343 | /* |
355 | * While we find nice hex chars, build a long_val. | 344 | * While we find nice hex chars, build a long_val. |
356 | * Return number of chars processed. | 345 | * Return number of chars processed. |
357 | */ | 346 | */ |
358 | int hex2u64(const char *ptr, u64 *long_val) | 347 | int hex2u64(const char *ptr, u64 *long_val) |
359 | { | 348 | { |
360 | const char *p = ptr; | 349 | char *p; |
361 | *long_val = 0; | ||
362 | |||
363 | while (*p) { | ||
364 | const int hex_val = hex(*p); | ||
365 | 350 | ||
366 | if (hex_val < 0) | 351 | *long_val = strtoull(ptr, &p, 16); |
367 | break; | ||
368 | |||
369 | *long_val = (*long_val << 4) | hex_val; | ||
370 | p++; | ||
371 | } | ||
372 | 352 | ||
373 | return p - ptr; | 353 | return p - ptr; |
374 | } | 354 | } |