|
@@ -459,10 +459,20 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size)
|
|
|
if (size || handle->aux_flags) {
|
|
|
/*
|
|
|
* Only send RECORD_AUX if we have something useful to communicate
|
|
|
+ *
|
|
|
+ * Note: the OVERWRITE records by themselves are not considered
|
|
|
+ * useful, as they don't communicate any *new* information,
|
|
|
+ * aside from the short-lived offset, that becomes history at
|
|
|
+ * the next event sched-in and therefore isn't useful.
|
|
|
+ * The userspace that needs to copy out AUX data in overwrite
|
|
|
+ * mode should know to use user_page::aux_head for the actual
|
|
|
+ * offset. So, from now on we don't output AUX records that
|
|
|
+ * have *only* OVERWRITE flag set.
|
|
|
*/
|
|
|
|
|
|
- perf_event_aux_event(handle->event, aux_head, size,
|
|
|
- handle->aux_flags);
|
|
|
+ if (handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE)
|
|
|
+ perf_event_aux_event(handle->event, aux_head, size,
|
|
|
+ handle->aux_flags);
|
|
|
}
|
|
|
|
|
|
rb->user_page->aux_head = rb->aux_head;
|