diff options
Diffstat (limited to 'tools/perf/builtin-top.c')
-rw-r--r-- | tools/perf/builtin-top.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 676b4fb0070f..935fc4fd878e 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
@@ -850,10 +850,10 @@ try_again: | |||
850 | top.evlist->threads, group, inherit) < 0) { | 850 | top.evlist->threads, group, inherit) < 0) { |
851 | int err = errno; | 851 | int err = errno; |
852 | 852 | ||
853 | if (err == EPERM || err == EACCES) | 853 | if (err == EPERM || err == EACCES) { |
854 | die("Permission error - are you root?\n" | 854 | ui__warning_paranoid(); |
855 | "\t Consider tweaking" | 855 | goto out_err; |
856 | " /proc/sys/kernel/perf_event_paranoid.\n"); | 856 | } |
857 | /* | 857 | /* |
858 | * If it's cycles then fall back to hrtimer | 858 | * If it's cycles then fall back to hrtimer |
859 | * based cpu-clock-tick sw counter, which | 859 | * based cpu-clock-tick sw counter, which |
@@ -861,25 +861,35 @@ try_again: | |||
861 | */ | 861 | */ |
862 | if (attr->type == PERF_TYPE_HARDWARE && | 862 | if (attr->type == PERF_TYPE_HARDWARE && |
863 | attr->config == PERF_COUNT_HW_CPU_CYCLES) { | 863 | attr->config == PERF_COUNT_HW_CPU_CYCLES) { |
864 | |||
865 | if (verbose) | 864 | if (verbose) |
866 | warning(" ... trying to fall back to cpu-clock-ticks\n"); | 865 | ui__warning("Cycles event not supported,\n" |
866 | "trying to fall back to cpu-clock-ticks\n"); | ||
867 | 867 | ||
868 | attr->type = PERF_TYPE_SOFTWARE; | 868 | attr->type = PERF_TYPE_SOFTWARE; |
869 | attr->config = PERF_COUNT_SW_CPU_CLOCK; | 869 | attr->config = PERF_COUNT_SW_CPU_CLOCK; |
870 | goto try_again; | 870 | goto try_again; |
871 | } | 871 | } |
872 | printf("\n"); | 872 | |
873 | error("sys_perf_event_open() syscall returned with %d " | 873 | ui__warning("The sys_perf_event_open() syscall " |
874 | "(%s). /bin/dmesg may provide additional information.\n", | 874 | "returned with %d (%s). /bin/dmesg " |
875 | err, strerror(err)); | 875 | "may provide additional information.\n" |
876 | die("No CONFIG_PERF_EVENTS=y kernel support configured?\n"); | 876 | "No CONFIG_PERF_EVENTS=y kernel support " |
877 | exit(-1); | 877 | "configured?\n", err, strerror(err)); |
878 | goto out_err; | ||
878 | } | 879 | } |
879 | } | 880 | } |
880 | 881 | ||
881 | if (perf_evlist__mmap(evlist, mmap_pages, false) < 0) | 882 | if (perf_evlist__mmap(evlist, mmap_pages, false) < 0) { |
882 | die("failed to mmap with %d (%s)\n", errno, strerror(errno)); | 883 | ui__warning("Failed to mmap with %d (%s)\n", |
884 | errno, strerror(errno)); | ||
885 | goto out_err; | ||
886 | } | ||
887 | |||
888 | return; | ||
889 | |||
890 | out_err: | ||
891 | exit_browser(0); | ||
892 | exit(0); | ||
883 | } | 893 | } |
884 | 894 | ||
885 | static int __cmd_top(void) | 895 | static int __cmd_top(void) |