Thread (9 messages) 9 messages, 2 authors, 2021-06-30

Re: [PATCH 1/3] perf/x86: Add new event for AUX output counter index

From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-06-30 11:05:36
Also in: lkml

On Wed, Jun 30, 2021 at 12:21:07PM +0300, Adrian Hunter wrote:
quoted hunk ↗ jump to hunk
On 25/06/21 4:15 pm, Peter Zijlstra wrote:
quoted
On Wed, Jun 09, 2021 at 05:20:53PM +0300, Adrian Hunter wrote:
quoted
+static void intel_pmu_report_aux_output_id(struct perf_event *event)
+{
+	struct hw_perf_event *hwc = &event->hw;
+
+	/*
+	 * So long as all PEBS-via-PT events for a recording session are
+	 * scheduled together, then only changes to hwc->idx need be reported.
+	 */
+	if (hwc->idx != hwc->idx_reported) {
+		hwc->idx_reported = hwc->idx;
+		perf_report_aux_output_id(event, hwc->idx);
+	}
+}
AFAICT you want a callback in x86_assign_hw_event(), is that so?
Yes, or open-coded e.g.
diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index 8f71dd72ef95..46dac45298d1 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -1207,6 +1207,11 @@ static int collect_events(struct cpu_hw_events *cpuc, struct perf_event *leader,
 	return n;
 }
 
+static inline bool report_aux_output_id(struct perf_event *event)
+{
+	return is_pebs_pt(event);
+}
+
 static inline void x86_assign_hw_event(struct perf_event *event,
 				struct cpu_hw_events *cpuc, int i)
 {
@@ -1217,6 +1222,9 @@ static inline void x86_assign_hw_event(struct perf_event *event,
 	hwc->last_cpu = smp_processor_id();
 	hwc->last_tag = ++cpuc->tags[i];
 
+	if (report_aux_output_id(event))
+		perf_report_aux_output_id(event, idx);
+
 	switch (hwc->idx) {
 	case INTEL_PMC_IDX_FIXED_BTS:
 	case INTEL_PMC_IDX_FIXED_VLBR:
Right, bit yuck, but I suppose it works. The alternative is something
like:

	static_call_cond(x86_pmu_assign)(event, idx);

but I'm not sure that's worth it, but it avoids stuffing even more intel
specific bits into the core.

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help