From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932249AbcFUSiy (ORCPT ); Tue, 21 Jun 2016 14:38:54 -0400 Received: from mail-pa0-f41.google.com ([209.85.220.41]:36247 "EHLO mail-pa0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752947AbcFUSir (ORCPT ); Tue, 21 Jun 2016 14:38:47 -0400 From: David Carrillo-Cisneros To: linux-kernel@vger.kernel.org Cc: "x86@kernel.org" , Ingo Molnar , Andi Kleen , Kan Liang , Peter Zijlstra , David Carrillo-Cisneros Subject: [PATCH v02 5/5] not required, used to test ctxsw, do not merge Date: Tue, 21 Jun 2016 11:31:14 -0700 Message-Id: <1466533874-52003-6-git-send-email-davidcc@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1466533874-52003-1-git-send-email-davidcc@google.com> References: <1466533874-52003-1-git-send-email-davidcc@google.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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