From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752203AbbCXL3b (ORCPT ); Tue, 24 Mar 2015 07:29:31 -0400 Received: from mga09.intel.com ([134.134.136.24]:32142 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751418AbbCXL31 (ORCPT ); Tue, 24 Mar 2015 07:29:27 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,458,1422950400"; d="scan'208";a="684758409" Message-ID: <55114A1A.6060301@intel.com> Date: Tue, 24 Mar 2015 13:27:22 +0200 From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Jiri Olsa , Alexander Shishkin CC: Peter Zijlstra , Ingo Molnar , linux-kernel@vger.kernel.org, Robert Richter , Frederic Weisbecker , Mike Galbraith , Paul Mackerras , Stephane Eranian , Andi Kleen , kan.liang@intel.com, markus.t.metzger@intel.com, mathieu.poirier@linaro.org, Kaixu Xia , acme@infradead.org Subject: Re: [PATCH v9 06/14] perf: Add AUX record References: <1421237903-181015-1-git-send-email-alexander.shishkin@linux.intel.com> <1421237903-181015-7-git-send-email-alexander.shishkin@linux.intel.com> <20150324110736.GD27134@krava.brq.redhat.com> In-Reply-To: <20150324110736.GD27134@krava.brq.redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 24/03/15 13:07, Jiri Olsa wrote: > On Wed, Jan 14, 2015 at 02:18:15PM +0200, Alexander Shishkin wrote: >> When there's new data in the AUX space, output a record indicating its >> offset and size and a set of flags, such as PERF_AUX_FLAG_TRUNCATED, to >> mean the described data was truncated to fit in the ring buffer. >> >> Signed-off-by: Alexander Shishkin >> Cc: Arnaldo Carvalho de Melo >> --- >> include/uapi/linux/perf_event.h | 19 +++++++++++++++++++ >> kernel/events/core.c | 34 ++++++++++++++++++++++++++++++++++ >> kernel/events/internal.h | 3 +++ >> 3 files changed, 56 insertions(+) >> >> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h >> index b7ccdf5e93..2d40e2aa07 100644 >> --- a/include/uapi/linux/perf_event.h >> +++ b/include/uapi/linux/perf_event.h >> @@ -746,6 +746,20 @@ enum perf_event_type { >> */ >> PERF_RECORD_MMAP2 = 10, >> >> + /* >> + * Records that new data landed in the AUX buffer part. >> + * >> + * struct { >> + * struct perf_event_header header; >> + * >> + * u64 aux_offset; >> + * u64 aux_size; >> + * u64 flags; >> + * struct sample_id sample_id; > > hum, I dont see sample_id below in implementation Alex is away, so I will take the liberty of answering. perf_event_aux_event() calls perf_event__output_id_sample() That's it isn't it? > > jirka > >> + * }; >> + */ >> + PERF_RECORD_AUX = 11, >> + >> PERF_RECORD_MAX, /* non-ABI */ >> }; >> >> @@ -763,6 +777,11 @@ enum perf_callchain_context { >> PERF_CONTEXT_MAX = (__u64)-4095, >> }; >> >> +/** >> + * PERF_RECORD_AUX::flags bits >> + */ >> +#define PERF_AUX_FLAG_TRUNCATED 0x01 /* record was truncated to fit */ >> + >> #define PERF_FLAG_FD_NO_GROUP (1UL << 0) >> #define PERF_FLAG_FD_OUTPUT (1UL << 1) >> #define PERF_FLAG_PID_CGROUP (1UL << 2) /* pid=cgroup id, per-cpu mode only */ >> diff --git a/kernel/events/core.c b/kernel/events/core.c >> index a6a145ad0b..4e17393264 100644 >> --- a/kernel/events/core.c >> +++ b/kernel/events/core.c >> @@ -5648,6 +5648,40 @@ void perf_event_mmap(struct vm_area_struct *vma) >> perf_event_mmap_event(&mmap_event); >> } >> >> +void perf_event_aux_event(struct perf_event *event, unsigned long head, >> + unsigned long size, u64 flags) >> +{ >> + struct perf_output_handle handle; >> + struct perf_sample_data sample; >> + struct perf_aux_event { >> + struct perf_event_header header; >> + u64 offset; >> + u64 size; >> + u64 flags; >> + } rec = { >> + .header = { >> + .type = PERF_RECORD_AUX, >> + .misc = 0, >> + .size = sizeof(rec), >> + }, >> + .offset = head, >> + .size = size, >> + .flags = flags, >> + }; >> + int ret; >> + >> + perf_event_header__init_id(&rec.header, &sample, event); >> + ret = perf_output_begin(&handle, event, rec.header.size); >> + >> + if (ret) >> + return; >> + >> + perf_output_put(&handle, rec); >> + perf_event__output_id_sample(event, &handle, &sample); >> + >> + perf_output_end(&handle); >> +} >> + >> /* >> * IRQ throttle logging >> */ >> diff --git a/kernel/events/internal.h b/kernel/events/internal.h >> index 0f6d080159..4d117a9814 100644 >> --- a/kernel/events/internal.h >> +++ b/kernel/events/internal.h >> @@ -62,6 +62,9 @@ static inline bool rb_has_aux(struct ring_buffer *rb) >> return !!rb->aux_nr_pages; >> } >> >> +void perf_event_aux_event(struct perf_event *event, unsigned long head, >> + unsigned long size, u64 flags); >> + >> extern void >> perf_event_header__init_id(struct perf_event_header *header, >> struct perf_sample_data *data, >> -- >> 2.1.4 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ > >