|
@@ -2,6 +2,7 @@
|
|
|
#include "evsel.h"
|
|
|
#include "stat.h"
|
|
|
#include "color.h"
|
|
|
+#include "pmu.h"
|
|
|
|
|
|
enum {
|
|
|
CTX_BIT_USER = 1 << 0,
|
|
@@ -35,9 +36,15 @@ static struct stats runtime_dtlb_cache_stats[NUM_CTX][MAX_NR_CPUS];
|
|
|
static struct stats runtime_cycles_in_tx_stats[NUM_CTX][MAX_NR_CPUS];
|
|
|
static struct stats runtime_transaction_stats[NUM_CTX][MAX_NR_CPUS];
|
|
|
static struct stats runtime_elision_stats[NUM_CTX][MAX_NR_CPUS];
|
|
|
+static bool have_frontend_stalled;
|
|
|
|
|
|
struct stats walltime_nsecs_stats;
|
|
|
|
|
|
+void perf_stat__init_shadow_stats(void)
|
|
|
+{
|
|
|
+ have_frontend_stalled = pmu_have_event("cpu", "stalled-cycles-frontend");
|
|
|
+}
|
|
|
+
|
|
|
static int evsel_context(struct perf_evsel *evsel)
|
|
|
{
|
|
|
int ctx = 0;
|
|
@@ -323,7 +330,7 @@ void perf_stat__print_shadow_stats(struct perf_evsel *evsel,
|
|
|
print_metric(ctxp, NULL, "%7.2f ",
|
|
|
"stalled cycles per insn",
|
|
|
ratio);
|
|
|
- } else {
|
|
|
+ } else if (have_frontend_stalled) {
|
|
|
print_metric(ctxp, NULL, NULL,
|
|
|
"stalled cycles per insn", 0);
|
|
|
}
|