perf, powerpc: Fix up flush_branch_stack() users
authorPeter Zijlstra <peterz@infradead.org>
Wed, 14 Jan 2015 13:15:39 +0000 (14:15 +0100)
committerIngo Molnar <mingo@kernel.org>
Wed, 18 Feb 2015 16:24:57 +0000 (17:24 +0100)
The recent LBR rework for x86 left a stray flush_branch_stack() user in
the PowerPC code, fix that up.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com>
Cc: Anton Blanchard <anton@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Christoph Lameter <cl@linux.com>
Cc: Joel Stanley <joel@jms.id.au>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Michael Neuling <mikey@neuling.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/powerpc/perf/core-book3s.c
include/linux/perf_event.h

index 7c4f6690533a5efab955565506a702ca352a56b2..7fd60dcb2cb0ebd734a7f2659bd70ae25632d374 100644 (file)
@@ -124,7 +124,7 @@ static unsigned long ebb_switch_in(bool ebb, struct cpu_hw_events *cpuhw)
 
 static inline void power_pmu_bhrb_enable(struct perf_event *event) {}
 static inline void power_pmu_bhrb_disable(struct perf_event *event) {}
-static void power_pmu_flush_branch_stack(void) {}
+static void power_pmu_sched_task(struct perf_event_context *ctx, bool sched_in) {}
 static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {}
 static void pmao_restore_workaround(bool ebb) { }
 #endif /* CONFIG_PPC32 */
@@ -350,6 +350,7 @@ static void power_pmu_bhrb_enable(struct perf_event *event)
                cpuhw->bhrb_context = event->ctx;
        }
        cpuhw->bhrb_users++;
+       perf_sched_cb_inc(event->ctx->pmu);
 }
 
 static void power_pmu_bhrb_disable(struct perf_event *event)
@@ -361,6 +362,7 @@ static void power_pmu_bhrb_disable(struct perf_event *event)
 
        cpuhw->bhrb_users--;
        WARN_ON_ONCE(cpuhw->bhrb_users < 0);
+       perf_sched_cb_dec(event->ctx->pmu);
 
        if (!cpuhw->disabled && !cpuhw->bhrb_users) {
                /* BHRB cannot be turned off when other
@@ -375,9 +377,12 @@ static void power_pmu_bhrb_disable(struct perf_event *event)
 /* Called from ctxsw to prevent one process's branch entries to
  * mingle with the other process's entries during context switch.
  */
-static void power_pmu_flush_branch_stack(void)
+static void power_pmu_sched_task(struct perf_event_context *ctx, bool sched_in)
 {
-       if (ppmu->bhrb_nr)
+       if (!ppmu->bhrb_nr)
+               return;
+
+       if (sched_in)
                power_pmu_bhrb_reset();
 }
 /* Calculate the to address for a branch */
@@ -1901,7 +1906,7 @@ static struct pmu power_pmu = {
        .cancel_txn     = power_pmu_cancel_txn,
        .commit_txn     = power_pmu_commit_txn,
        .event_idx      = power_pmu_event_idx,
-       .flush_branch_stack = power_pmu_flush_branch_stack,
+       .sched_task     = power_pmu_sched_task,
 };
 
 /*
index 43cc158487e602c49145619b5f377eea0f75f57b..724d3720c9b126859cb1200b4e2fd251ffd58b6d 100644 (file)
@@ -261,11 +261,6 @@ struct pmu {
         */
        int (*event_idx)                (struct perf_event *event); /*optional */
 
-       /*
-        * flush branch stack on context-switches (needed in cpu-wide mode)
-        */
-       void (*flush_branch_stack)      (void);
-
        /*
         * context-switches callback
         */