[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1466533874-52003-6-git-send-email-davidcc@google.com>
Date: Tue, 21 Jun 2016 11:31:14 -0700
From: David Carrillo-Cisneros <davidcc@...gle.com>
To: linux-kernel@...r.kernel.org
Cc: "x86@...nel.org" <x86@...nel.org>, Ingo Molnar <mingo@...hat.com>,
Andi Kleen <ak@...ux.intel.com>,
Kan Liang <kan.liang@...el.com>,
Peter Zijlstra <peterz@...radead.org>,
David Carrillo-Cisneros <davidcc@...gle.com>
Subject: [PATCH v02 5/5] not required, used to test ctxsw, do not merge
DO NOT MERGE. Provided only to verify bug fix.
Change kernel and perf tool to activate tracking and context
switch for kernel branches.
Signed-off-by: David Carrillo-Cisneros <davidcc@...gle.com>
---
arch/x86/events/intel/lbr.c | 3 ++-
tools/perf/util/evsel.c | 17 ++++++++++++++---
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
index 6cd7cc0..ef3e275a39 100644
--- a/arch/x86/events/intel/lbr.c
+++ b/arch/x86/events/intel/lbr.c
@@ -388,7 +388,8 @@ void intel_pmu_lbr_sched_task(struct perf_event_context *ctx, bool sched_in)
static inline bool branch_user_callstack(unsigned br_sel)
{
- return (br_sel & X86_BR_USER) && (br_sel & X86_BR_CALL_STACK);
+ return (br_sel & (X86_BR_USER | X86_BR_KERNEL)) &&
+ (br_sel & X86_BR_CALL_STACK);
}
void intel_pmu_lbr_enable(struct perf_event *event)
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 5d7037e..b39aafc 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -575,9 +575,20 @@ void perf_evsel__config_callchain(struct perf_evsel *evsel,
if (param->record_mode == CALLCHAIN_LBR) {
if (!opts->branch_stack) {
if (attr->exclude_user) {
- pr_warning("LBR callstack option is only available "
- "to get user callchain information. "
- "Falling back to framepointers.\n");
+ /*
+ * Sample kernel AND user branches. Do not exclude user
+ * branches because task_ctx->lbr_callstack_users in
+ * arch/x86/events/intel/lbr.c only count users for
+ * user branches.
+ */
+ pr_warning("BRANCH_STACK with kernel and user\n");
+ perf_evsel__set_sample_bit(evsel, BRANCH_STACK);
+ attr->branch_sample_type = PERF_SAMPLE_BRANCH_KERNEL |
+ PERF_SAMPLE_BRANCH_USER |
+ PERF_SAMPLE_BRANCH_CALL_STACK |
+ PERF_SAMPLE_BRANCH_NO_CYCLES |
+ PERF_SAMPLE_BRANCH_NO_FLAGS;
+
} else {
perf_evsel__set_sample_bit(evsel, BRANCH_STACK);
attr->branch_sample_type = PERF_SAMPLE_BRANCH_USER |
--
2.8.0.rc3.226.g39d4020
Powered by blists - more mailing lists