|
@@ -224,6 +224,7 @@ static bool perf_evlist__equal(struct perf_evlist *evlist,
|
|
|
|
|
|
static int perf_record__open(struct perf_record *rec)
|
|
|
{
|
|
|
+ char msg[128];
|
|
|
struct perf_evsel *pos;
|
|
|
struct perf_evlist *evlist = rec->evlist;
|
|
|
struct perf_session *session = rec->session;
|
|
@@ -249,27 +250,9 @@ try_again:
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * If it's cycles then fall back to hrtimer
|
|
|
- * based cpu-clock-tick sw counter, which
|
|
|
- * is always available even if no PMU support.
|
|
|
- *
|
|
|
- * PPC returns ENXIO until 2.6.37 (behavior changed
|
|
|
- * with commit b0a873e).
|
|
|
- */
|
|
|
- if ((err == ENOENT || err == ENXIO)
|
|
|
- && attr->type == PERF_TYPE_HARDWARE
|
|
|
- && attr->config == PERF_COUNT_HW_CPU_CYCLES) {
|
|
|
-
|
|
|
+ if (perf_evsel__fallback(pos, err, msg, sizeof(msg))) {
|
|
|
if (verbose)
|
|
|
- ui__warning("The cycles event is not supported, "
|
|
|
- "trying to fall back to cpu-clock-ticks\n");
|
|
|
- attr->type = PERF_TYPE_SOFTWARE;
|
|
|
- attr->config = PERF_COUNT_SW_CPU_CLOCK;
|
|
|
- if (pos->name) {
|
|
|
- free(pos->name);
|
|
|
- pos->name = NULL;
|
|
|
- }
|
|
|
+ ui__warning("%s\n", msg);
|
|
|
goto try_again;
|
|
|
}
|
|
|
|