From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752857AbcFBCmt (ORCPT ); Wed, 1 Jun 2016 22:42:49 -0400 Received: from mail-pa0-f51.google.com ([209.85.220.51]:36591 "EHLO mail-pa0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752515AbcFBCmr (ORCPT ); Wed, 1 Jun 2016 22:42:47 -0400 From: David Carrillo-Cisneros To: linux-kernel@vger.kernel.org Cc: "x86@kernel.org" , Ingo Molnar , "Yan, Zheng" , Andi Kleen , Kan Liang , Peter Zijlstra , David Carrillo-Cisneros , Stephane Eranian Subject: [PATCH 3/3] perf, perf/tool: trigger lbr_from signext bug Date: Wed, 1 Jun 2016 19:42:03 -0700 Message-Id: <1464835323-33872-4-git-send-email-davidcc@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1464835323-33872-1-git-send-email-davidcc@google.com> References: <1464835323-33872-1-git-send-email-davidcc@google.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Change kernel and perf tool to activate tracking and context switch for kernel branches. Signed-off-by: David Carrillo-Cisneros --- 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 6aa2d8a..d808e54 100644 --- a/arch/x86/events/intel/lbr.c +++ b/arch/x86/events/intel/lbr.c @@ -384,7 +384,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