Loading tools/perf/builtin-sched.c +16 −8 Original line number Diff line number Diff line Loading @@ -1637,23 +1637,29 @@ static struct perf_event_ops event_ops = { .ordered_samples = true, }; static int read_events(void) static void read_events(bool destroy, struct perf_session **psession) { int err = -EINVAL; struct perf_session *session = perf_session__new(input_name, O_RDONLY, 0, false, &event_ops); if (session == NULL) return -ENOMEM; die("No Memory"); if (perf_session__has_traces(session, "record -R")) { err = perf_session__process_events(session, &event_ops); if (err) die("Failed to process events, error %d", err); nr_events = session->hists.stats.nr_events[0]; nr_lost_events = session->hists.stats.total_lost; nr_lost_chunks = session->hists.stats.nr_events[PERF_RECORD_LOST]; } if (destroy) perf_session__delete(session); return err; if (psession) *psession = session; } static void print_bad_events(void) Loading Loading @@ -1689,9 +1695,10 @@ static void print_bad_events(void) static void __cmd_lat(void) { struct rb_node *next; struct perf_session *session; setup_pager(); read_events(); read_events(false, &session); sort_lat(); printf("\n ---------------------------------------------------------------------------------------------------------------\n"); Loading @@ -1717,6 +1724,7 @@ static void __cmd_lat(void) print_bad_events(); printf("\n"); perf_session__delete(session); } static struct trace_sched_handler map_ops = { Loading @@ -1731,7 +1739,7 @@ static void __cmd_map(void) max_cpu = sysconf(_SC_NPROCESSORS_CONF); setup_pager(); read_events(); read_events(true, NULL); print_bad_events(); } Loading @@ -1744,7 +1752,7 @@ static void __cmd_replay(void) test_calibrations(); read_events(); read_events(true, NULL); printf("nr_run_events: %ld\n", nr_run_events); printf("nr_sleep_events: %ld\n", nr_sleep_events); Loading @@ -1769,7 +1777,7 @@ static void __cmd_replay(void) static const char * const sched_usage[] = { "perf sched [<options>] {record|latency|map|replay|trace}", "perf sched [<options>] {record|latency|map|replay|script}", NULL }; Loading tools/perf/util/config.c +23 −4 Original line number Diff line number Diff line Loading @@ -413,13 +413,32 @@ int perf_config(config_fn_t fn, void *data) home = getenv("HOME"); if (perf_config_global() && home) { char *user_config = strdup(mkpath("%s/.perfconfig", home)); if (!access(user_config, R_OK)) { struct stat st; if (user_config == NULL) { warning("Not enough memory to process %s/.perfconfig, " "ignoring it.", home); goto out; } if (stat(user_config, &st) < 0) goto out_free; if (st.st_uid && (st.st_uid != geteuid())) { warning("File %s not owned by current user or root, " "ignoring it.", user_config); goto out_free; } if (!st.st_size) goto out_free; ret += perf_config_from_file(fn, user_config, data); found += 1; } out_free: free(user_config); } out: if (found == 0) return -1; return ret; Loading tools/perf/util/symbol.c +11 −0 Original line number Diff line number Diff line Loading @@ -1504,6 +1504,17 @@ int dso__load(struct dso *dso, struct map *map, symbol_filter_t filter) dso->adjust_symbols = 0; if (strncmp(dso->name, "/tmp/perf-", 10) == 0) { struct stat st; if (stat(dso->name, &st) < 0) return -1; if (st.st_uid && (st.st_uid != geteuid())) { pr_warning("File %s not owned by current user or root, " "ignoring it.\n", dso->name); return -1; } ret = dso__load_perf_map(dso, map, filter); dso->symtab_type = ret > 0 ? SYMTAB__JAVA_JIT : SYMTAB__NOT_FOUND; Loading Loading
tools/perf/builtin-sched.c +16 −8 Original line number Diff line number Diff line Loading @@ -1637,23 +1637,29 @@ static struct perf_event_ops event_ops = { .ordered_samples = true, }; static int read_events(void) static void read_events(bool destroy, struct perf_session **psession) { int err = -EINVAL; struct perf_session *session = perf_session__new(input_name, O_RDONLY, 0, false, &event_ops); if (session == NULL) return -ENOMEM; die("No Memory"); if (perf_session__has_traces(session, "record -R")) { err = perf_session__process_events(session, &event_ops); if (err) die("Failed to process events, error %d", err); nr_events = session->hists.stats.nr_events[0]; nr_lost_events = session->hists.stats.total_lost; nr_lost_chunks = session->hists.stats.nr_events[PERF_RECORD_LOST]; } if (destroy) perf_session__delete(session); return err; if (psession) *psession = session; } static void print_bad_events(void) Loading Loading @@ -1689,9 +1695,10 @@ static void print_bad_events(void) static void __cmd_lat(void) { struct rb_node *next; struct perf_session *session; setup_pager(); read_events(); read_events(false, &session); sort_lat(); printf("\n ---------------------------------------------------------------------------------------------------------------\n"); Loading @@ -1717,6 +1724,7 @@ static void __cmd_lat(void) print_bad_events(); printf("\n"); perf_session__delete(session); } static struct trace_sched_handler map_ops = { Loading @@ -1731,7 +1739,7 @@ static void __cmd_map(void) max_cpu = sysconf(_SC_NPROCESSORS_CONF); setup_pager(); read_events(); read_events(true, NULL); print_bad_events(); } Loading @@ -1744,7 +1752,7 @@ static void __cmd_replay(void) test_calibrations(); read_events(); read_events(true, NULL); printf("nr_run_events: %ld\n", nr_run_events); printf("nr_sleep_events: %ld\n", nr_sleep_events); Loading @@ -1769,7 +1777,7 @@ static void __cmd_replay(void) static const char * const sched_usage[] = { "perf sched [<options>] {record|latency|map|replay|trace}", "perf sched [<options>] {record|latency|map|replay|script}", NULL }; Loading
tools/perf/util/config.c +23 −4 Original line number Diff line number Diff line Loading @@ -413,13 +413,32 @@ int perf_config(config_fn_t fn, void *data) home = getenv("HOME"); if (perf_config_global() && home) { char *user_config = strdup(mkpath("%s/.perfconfig", home)); if (!access(user_config, R_OK)) { struct stat st; if (user_config == NULL) { warning("Not enough memory to process %s/.perfconfig, " "ignoring it.", home); goto out; } if (stat(user_config, &st) < 0) goto out_free; if (st.st_uid && (st.st_uid != geteuid())) { warning("File %s not owned by current user or root, " "ignoring it.", user_config); goto out_free; } if (!st.st_size) goto out_free; ret += perf_config_from_file(fn, user_config, data); found += 1; } out_free: free(user_config); } out: if (found == 0) return -1; return ret; Loading
tools/perf/util/symbol.c +11 −0 Original line number Diff line number Diff line Loading @@ -1504,6 +1504,17 @@ int dso__load(struct dso *dso, struct map *map, symbol_filter_t filter) dso->adjust_symbols = 0; if (strncmp(dso->name, "/tmp/perf-", 10) == 0) { struct stat st; if (stat(dso->name, &st) < 0) return -1; if (st.st_uid && (st.st_uid != geteuid())) { pr_warning("File %s not owned by current user or root, " "ignoring it.\n", dso->name); return -1; } ret = dso__load_perf_map(dso, map, filter); dso->symtab_type = ret > 0 ? SYMTAB__JAVA_JIT : SYMTAB__NOT_FOUND; Loading