diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-01 23:23:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-01 23:23:17 -0400 |
commit | 7c8c03bfc7b9f5211d8a69eab7fee99c9fb4f449 (patch) | |
tree | a5cee67325e50e893bf0cc0a0d060983a0df6653 /include/linux | |
parent | 6dc2cce9321198172cd96f955a5fc798a4cc35a6 (diff) | |
parent | fd7647979a3948dae4fc6f25dbbdf9ba269bed78 (diff) |
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf updates from Ingo Molnar:
"The main changes in this cycle were:
Kernel side changes:
- Kprobes and uprobes changes:
- Make their trampolines read-only while they are used
- Make UPROBES_EVENTS default-y which is the distro practice
- Apply misc fixes and robustization to probe point insertion.
- add support for AMD IOMMU events
- extend hw events on Intel Goldmont CPUs
- ... plus misc fixes and updates.
Tooling side changes:
- support s390 jump instructions in perf annotate (Christian
Borntraeger)
- vendor hardware events updates (Andi Kleen)
- add argument support for SDT events in powerpc (Ravi Bangoria)
- beautify the statx syscall arguments in 'perf trace' (Arnaldo
Carvalho de Melo)
- handle inline functions in callchains (Jin Yao)
- enable sorting by srcline as key (Milian Wolff)
- add 'brstackinsn' field in 'perf script' to reuse the x86
instruction decoder used in the Intel PT code to study hot paths to
samples (Andi Kleen)
- add PERF_RECORD_NAMESPACES so that the kernel can record
information required to associate samples to namespaces, helping in
container problem characterization. (Hari Bathini)
- allow sorting by symbol_size in 'perf report' and 'perf top'
(Charles Baylis)
- in perf stat, make system wide (-a) the default option if no target
was specified and one of following conditions is met:
- no workload specified (current behaviour)
- a workload is specified but all requested events are system wide
ones, like uncore ones. (Jiri Olsa)
- ... plus lots of other updates, enhancements, cleanups and fixes"
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (235 commits)
perf tools: Fix the code to strip command name
tools arch x86: Sync cpufeatures.h
tools arch: Sync arch/x86/lib/memcpy_64.S with the kernel
tools: Update asm-generic/mman-common.h copy from the kernel
perf tools: Use just forward declarations for struct thread where possible
perf tools: Add the right header to obtain PERF_ALIGN()
perf tools: Remove poll.h and wait.h from util.h
perf tools: Remove string.h, unistd.h and sys/stat.h from util.h
perf tools: Remove stale prototypes from builtin.h
perf tools: Remove string.h from util.h
perf tools: Remove sys/ioctl.h from util.h
perf tools: Remove a few more needless includes from util.h
perf tools: Include sys/param.h where needed
perf callchain: Move callchain specific routines from util.[ch]
perf tools: Add compress.h for the *_decompress_to_file() headers
perf mem: Fix display of data source snoop indication
perf debug: Move dump_stack() and sighandler_dump_stack() to debug.h
perf kvm: Make function only used by 'perf kvm' static
perf tools: Move timestamp routines from util.h to time-utils.h
perf tools: Move units conversion/formatting routines to separate object
...
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/coresight.h | 2 | ||||
-rw-r--r-- | include/linux/kprobes.h | 2 | ||||
-rw-r--r-- | include/linux/perf_event.h | 17 |
3 files changed, 17 insertions, 4 deletions
diff --git a/include/linux/coresight.h b/include/linux/coresight.h index 2a5982c37dfb..035c16c9a505 100644 --- a/include/linux/coresight.h +++ b/include/linux/coresight.h | |||
@@ -201,7 +201,7 @@ struct coresight_ops_sink { | |||
201 | void *sink_config); | 201 | void *sink_config); |
202 | unsigned long (*reset_buffer)(struct coresight_device *csdev, | 202 | unsigned long (*reset_buffer)(struct coresight_device *csdev, |
203 | struct perf_output_handle *handle, | 203 | struct perf_output_handle *handle, |
204 | void *sink_config, bool *lost); | 204 | void *sink_config); |
205 | void (*update_buffer)(struct coresight_device *csdev, | 205 | void (*update_buffer)(struct coresight_device *csdev, |
206 | struct perf_output_handle *handle, | 206 | struct perf_output_handle *handle, |
207 | void *sink_config); | 207 | void *sink_config); |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index c328e4f7dcad..47e4da5b4fa2 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -267,6 +267,8 @@ extern int arch_init_kprobes(void); | |||
267 | extern void show_registers(struct pt_regs *regs); | 267 | extern void show_registers(struct pt_regs *regs); |
268 | extern void kprobes_inc_nmissed_count(struct kprobe *p); | 268 | extern void kprobes_inc_nmissed_count(struct kprobe *p); |
269 | extern bool arch_within_kprobe_blacklist(unsigned long addr); | 269 | extern bool arch_within_kprobe_blacklist(unsigned long addr); |
270 | extern bool arch_function_offset_within_entry(unsigned long offset); | ||
271 | extern bool function_offset_within_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset); | ||
270 | 272 | ||
271 | extern bool within_kprobe_blacklist(unsigned long addr); | 273 | extern bool within_kprobe_blacklist(unsigned long addr); |
272 | 274 | ||
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 000fdb211c7d..24a635887f28 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
@@ -165,6 +165,13 @@ struct hw_perf_event { | |||
165 | struct list_head bp_list; | 165 | struct list_head bp_list; |
166 | }; | 166 | }; |
167 | #endif | 167 | #endif |
168 | struct { /* amd_iommu */ | ||
169 | u8 iommu_bank; | ||
170 | u8 iommu_cntr; | ||
171 | u16 padding; | ||
172 | u64 conf; | ||
173 | u64 conf1; | ||
174 | }; | ||
168 | }; | 175 | }; |
169 | /* | 176 | /* |
170 | * If the event is a per task event, this will point to the task in | 177 | * If the event is a per task event, this will point to the task in |
@@ -801,6 +808,7 @@ struct perf_output_handle { | |||
801 | struct ring_buffer *rb; | 808 | struct ring_buffer *rb; |
802 | unsigned long wakeup; | 809 | unsigned long wakeup; |
803 | unsigned long size; | 810 | unsigned long size; |
811 | u64 aux_flags; | ||
804 | union { | 812 | union { |
805 | void *addr; | 813 | void *addr; |
806 | unsigned long head; | 814 | unsigned long head; |
@@ -849,10 +857,11 @@ perf_cgroup_from_task(struct task_struct *task, struct perf_event_context *ctx) | |||
849 | extern void *perf_aux_output_begin(struct perf_output_handle *handle, | 857 | extern void *perf_aux_output_begin(struct perf_output_handle *handle, |
850 | struct perf_event *event); | 858 | struct perf_event *event); |
851 | extern void perf_aux_output_end(struct perf_output_handle *handle, | 859 | extern void perf_aux_output_end(struct perf_output_handle *handle, |
852 | unsigned long size, bool truncated); | 860 | unsigned long size); |
853 | extern int perf_aux_output_skip(struct perf_output_handle *handle, | 861 | extern int perf_aux_output_skip(struct perf_output_handle *handle, |
854 | unsigned long size); | 862 | unsigned long size); |
855 | extern void *perf_get_aux(struct perf_output_handle *handle); | 863 | extern void *perf_get_aux(struct perf_output_handle *handle); |
864 | extern void perf_aux_output_flag(struct perf_output_handle *handle, u64 flags); | ||
856 | 865 | ||
857 | extern int perf_pmu_register(struct pmu *pmu, const char *name, int type); | 866 | extern int perf_pmu_register(struct pmu *pmu, const char *name, int type); |
858 | extern void perf_pmu_unregister(struct pmu *pmu); | 867 | extern void perf_pmu_unregister(struct pmu *pmu); |
@@ -1112,6 +1121,7 @@ extern int perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks | |||
1112 | 1121 | ||
1113 | extern void perf_event_exec(void); | 1122 | extern void perf_event_exec(void); |
1114 | extern void perf_event_comm(struct task_struct *tsk, bool exec); | 1123 | extern void perf_event_comm(struct task_struct *tsk, bool exec); |
1124 | extern void perf_event_namespaces(struct task_struct *tsk); | ||
1115 | extern void perf_event_fork(struct task_struct *tsk); | 1125 | extern void perf_event_fork(struct task_struct *tsk); |
1116 | 1126 | ||
1117 | /* Callchains */ | 1127 | /* Callchains */ |
@@ -1267,8 +1277,8 @@ static inline void * | |||
1267 | perf_aux_output_begin(struct perf_output_handle *handle, | 1277 | perf_aux_output_begin(struct perf_output_handle *handle, |
1268 | struct perf_event *event) { return NULL; } | 1278 | struct perf_event *event) { return NULL; } |
1269 | static inline void | 1279 | static inline void |
1270 | perf_aux_output_end(struct perf_output_handle *handle, unsigned long size, | 1280 | perf_aux_output_end(struct perf_output_handle *handle, unsigned long size) |
1271 | bool truncated) { } | 1281 | { } |
1272 | static inline int | 1282 | static inline int |
1273 | perf_aux_output_skip(struct perf_output_handle *handle, | 1283 | perf_aux_output_skip(struct perf_output_handle *handle, |
1274 | unsigned long size) { return -EINVAL; } | 1284 | unsigned long size) { return -EINVAL; } |
@@ -1315,6 +1325,7 @@ static inline int perf_unregister_guest_info_callbacks | |||
1315 | static inline void perf_event_mmap(struct vm_area_struct *vma) { } | 1325 | static inline void perf_event_mmap(struct vm_area_struct *vma) { } |
1316 | static inline void perf_event_exec(void) { } | 1326 | static inline void perf_event_exec(void) { } |
1317 | static inline void perf_event_comm(struct task_struct *tsk, bool exec) { } | 1327 | static inline void perf_event_comm(struct task_struct *tsk, bool exec) { } |
1328 | static inline void perf_event_namespaces(struct task_struct *tsk) { } | ||
1318 | static inline void perf_event_fork(struct task_struct *tsk) { } | 1329 | static inline void perf_event_fork(struct task_struct *tsk) { } |
1319 | static inline void perf_event_init(void) { } | 1330 | static inline void perf_event_init(void) { } |
1320 | static inline int perf_swevent_get_recursion_context(void) { return -1; } | 1331 | static inline int perf_swevent_get_recursion_context(void) { return -1; } |