Commit e9240355 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo

perf intel-pt: Force 'quick' mode when TNT (Taken/Not-Taken packet) is disabled

It is not possible to walk the executable code without TNT packets, so
force 'quick' mode when TNT is disabled, because 'quick' mode does not walk
the code.
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/r/20220124084201.2699795-18-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 11f18e47
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
#define INTEL_PT_CFG_PWR_EVT_EN BIT_ULL(4) #define INTEL_PT_CFG_PWR_EVT_EN BIT_ULL(4)
#define INTEL_PT_CFG_BRANCH_EN BIT_ULL(13) #define INTEL_PT_CFG_BRANCH_EN BIT_ULL(13)
#define INTEL_PT_CFG_EVT_EN BIT_ULL(31) #define INTEL_PT_CFG_EVT_EN BIT_ULL(31)
#define INTEL_PT_CFG_TNT_DIS BIT_ULL(55)
struct range { struct range {
u64 start; u64 start;
...@@ -972,6 +973,19 @@ static bool intel_pt_branch_enable(struct intel_pt *pt) ...@@ -972,6 +973,19 @@ static bool intel_pt_branch_enable(struct intel_pt *pt)
return true; return true;
} }
static bool intel_pt_disabled_tnt(struct intel_pt *pt)
{
struct evsel *evsel;
u64 config;
evlist__for_each_entry(pt->session->evlist, evsel) {
if (intel_pt_get_config(pt, &evsel->core.attr, &config) &&
config & INTEL_PT_CFG_TNT_DIS)
return true;
}
return false;
}
static unsigned int intel_pt_mtc_period(struct intel_pt *pt) static unsigned int intel_pt_mtc_period(struct intel_pt *pt)
{ {
struct evsel *evsel; struct evsel *evsel;
...@@ -1227,6 +1241,10 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct intel_pt *pt, ...@@ -1227,6 +1241,10 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct intel_pt *pt,
params.first_timestamp = pt->first_timestamp; params.first_timestamp = pt->first_timestamp;
params.max_loops = pt->max_loops; params.max_loops = pt->max_loops;
/* Cannot walk code without TNT, so force 'quick' mode */
if (params.branch_enable && intel_pt_disabled_tnt(pt) && !params.quick)
params.quick = 1;
if (pt->filts.cnt > 0) if (pt->filts.cnt > 0)
params.pgd_ip = intel_pt_pgd_ip; params.pgd_ip = intel_pt_pgd_ip;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment