diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-16 09:05:45 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-16 09:05:45 -0500 |
commit | 5593edfbfa30a049fca9abbd70a834d2888a4d9d (patch) | |
tree | a5c67524a82995fa17e44669c037fcced4fa91aa /tools | |
parent | 113ccc38378b6f0b24c0993040c6044e35163a51 (diff) | |
parent | 49def1853334396f948dcb4cedb9347abb318df5 (diff) |
Merge 4.10-rc4 into driver-core-next
We want the sysfs file revert and other fixes in here as well for
testing.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/lib/subcmd/parse-options.c | 3 | ||||
-rw-r--r-- | tools/lib/subcmd/parse-options.h | 5 | ||||
-rw-r--r-- | tools/lib/traceevent/plugin_sched_switch.c | 4 | ||||
-rw-r--r-- | tools/perf/Documentation/perf-record.txt | 4 | ||||
-rw-r--r-- | tools/perf/Makefile.perf | 4 | ||||
-rw-r--r-- | tools/perf/builtin-kmem.c | 1 | ||||
-rw-r--r-- | tools/perf/builtin-record.c | 4 | ||||
-rw-r--r-- | tools/perf/builtin-sched.c | 17 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 105 | ||||
-rw-r--r-- | tools/perf/util/symbol-elf.c | 6 | ||||
-rw-r--r-- | tools/testing/selftests/Makefile | 2 | ||||
-rwxr-xr-x | tools/testing/selftests/bpf/test_kmod.sh | 2 | ||||
-rwxr-xr-x | tools/testing/selftests/net/run_netsocktests | 2 | ||||
-rw-r--r-- | tools/testing/selftests/x86/protection_keys.c | 2 |
14 files changed, 111 insertions, 50 deletions
diff --git a/tools/lib/subcmd/parse-options.c b/tools/lib/subcmd/parse-options.c index 3284bb14ae78..8aad81151d50 100644 --- a/tools/lib/subcmd/parse-options.c +++ b/tools/lib/subcmd/parse-options.c | |||
@@ -213,6 +213,9 @@ static int get_value(struct parse_opt_ctx_t *p, | |||
213 | else | 213 | else |
214 | err = get_arg(p, opt, flags, (const char **)opt->value); | 214 | err = get_arg(p, opt, flags, (const char **)opt->value); |
215 | 215 | ||
216 | if (opt->set) | ||
217 | *(bool *)opt->set = true; | ||
218 | |||
216 | /* PARSE_OPT_NOEMPTY: Allow NULL but disallow empty string. */ | 219 | /* PARSE_OPT_NOEMPTY: Allow NULL but disallow empty string. */ |
217 | if (opt->flags & PARSE_OPT_NOEMPTY) { | 220 | if (opt->flags & PARSE_OPT_NOEMPTY) { |
218 | const char *val = *(const char **)opt->value; | 221 | const char *val = *(const char **)opt->value; |
diff --git a/tools/lib/subcmd/parse-options.h b/tools/lib/subcmd/parse-options.h index 8866ac438b34..11c3be3bcce7 100644 --- a/tools/lib/subcmd/parse-options.h +++ b/tools/lib/subcmd/parse-options.h | |||
@@ -137,6 +137,11 @@ struct option { | |||
137 | { .type = OPTION_STRING, .short_name = (s), .long_name = (l), \ | 137 | { .type = OPTION_STRING, .short_name = (s), .long_name = (l), \ |
138 | .value = check_vtype(v, const char **), (a), .help = (h), \ | 138 | .value = check_vtype(v, const char **), (a), .help = (h), \ |
139 | .flags = PARSE_OPT_OPTARG, .defval = (intptr_t)(d) } | 139 | .flags = PARSE_OPT_OPTARG, .defval = (intptr_t)(d) } |
140 | #define OPT_STRING_OPTARG_SET(s, l, v, os, a, h, d) \ | ||
141 | { .type = OPTION_STRING, .short_name = (s), .long_name = (l), \ | ||
142 | .value = check_vtype(v, const char **), (a), .help = (h), \ | ||
143 | .flags = PARSE_OPT_OPTARG, .defval = (intptr_t)(d), \ | ||
144 | .set = check_vtype(os, bool *)} | ||
140 | #define OPT_STRING_NOEMPTY(s, l, v, a, h) { .type = OPTION_STRING, .short_name = (s), .long_name = (l), .value = check_vtype(v, const char **), (a), .help = (h), .flags = PARSE_OPT_NOEMPTY} | 145 | #define OPT_STRING_NOEMPTY(s, l, v, a, h) { .type = OPTION_STRING, .short_name = (s), .long_name = (l), .value = check_vtype(v, const char **), (a), .help = (h), .flags = PARSE_OPT_NOEMPTY} |
141 | #define OPT_DATE(s, l, v, h) \ | 146 | #define OPT_DATE(s, l, v, h) \ |
142 | { .type = OPTION_CALLBACK, .short_name = (s), .long_name = (l), .value = (v), .argh = "time", .help = (h), .callback = parse_opt_approxidate_cb } | 147 | { .type = OPTION_CALLBACK, .short_name = (s), .long_name = (l), .value = (v), .argh = "time", .help = (h), .callback = parse_opt_approxidate_cb } |
diff --git a/tools/lib/traceevent/plugin_sched_switch.c b/tools/lib/traceevent/plugin_sched_switch.c index f1ce60065258..ec30c2fcbac0 100644 --- a/tools/lib/traceevent/plugin_sched_switch.c +++ b/tools/lib/traceevent/plugin_sched_switch.c | |||
@@ -111,7 +111,7 @@ static int sched_switch_handler(struct trace_seq *s, | |||
111 | trace_seq_printf(s, "%lld ", val); | 111 | trace_seq_printf(s, "%lld ", val); |
112 | 112 | ||
113 | if (pevent_get_field_val(s, event, "prev_prio", record, &val, 0) == 0) | 113 | if (pevent_get_field_val(s, event, "prev_prio", record, &val, 0) == 0) |
114 | trace_seq_printf(s, "[%lld] ", val); | 114 | trace_seq_printf(s, "[%d] ", (int) val); |
115 | 115 | ||
116 | if (pevent_get_field_val(s, event, "prev_state", record, &val, 0) == 0) | 116 | if (pevent_get_field_val(s, event, "prev_state", record, &val, 0) == 0) |
117 | write_state(s, val); | 117 | write_state(s, val); |
@@ -129,7 +129,7 @@ static int sched_switch_handler(struct trace_seq *s, | |||
129 | trace_seq_printf(s, "%lld", val); | 129 | trace_seq_printf(s, "%lld", val); |
130 | 130 | ||
131 | if (pevent_get_field_val(s, event, "next_prio", record, &val, 0) == 0) | 131 | if (pevent_get_field_val(s, event, "next_prio", record, &val, 0) == 0) |
132 | trace_seq_printf(s, " [%lld]", val); | 132 | trace_seq_printf(s, " [%d]", (int) val); |
133 | 133 | ||
134 | return 0; | 134 | return 0; |
135 | } | 135 | } |
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt index 27fc3617c6a4..5054d9147f0f 100644 --- a/tools/perf/Documentation/perf-record.txt +++ b/tools/perf/Documentation/perf-record.txt | |||
@@ -430,6 +430,10 @@ that gets then processed, possibly via a perf script, to decide if that | |||
430 | particular perf.data snapshot should be kept or not. | 430 | particular perf.data snapshot should be kept or not. |
431 | 431 | ||
432 | Implies --timestamp-filename, --no-buildid and --no-buildid-cache. | 432 | Implies --timestamp-filename, --no-buildid and --no-buildid-cache. |
433 | The reason for the latter two is to reduce the data file switching | ||
434 | overhead. You can still switch them on with: | ||
435 | |||
436 | --switch-output --no-no-buildid --no-no-buildid-cache | ||
433 | 437 | ||
434 | --dry-run:: | 438 | --dry-run:: |
435 | Parse options then exit. --dry-run can be used to detect errors in cmdline | 439 | Parse options then exit. --dry-run can be used to detect errors in cmdline |
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 8fc24824705e..8bb16aa9d661 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf | |||
@@ -704,9 +704,9 @@ install-tests: all install-gtk | |||
704 | $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \ | 704 | $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \ |
705 | $(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr' | 705 | $(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr' |
706 | 706 | ||
707 | install-bin: install-tools install-tests | 707 | install-bin: install-tools install-tests install-traceevent-plugins |
708 | 708 | ||
709 | install: install-bin try-install-man install-traceevent-plugins | 709 | install: install-bin try-install-man |
710 | 710 | ||
711 | install-python_ext: | 711 | install-python_ext: |
712 | $(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' | 712 | $(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' |
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 35a02f8e5a4a..915869e00d86 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c | |||
@@ -655,7 +655,6 @@ static const struct { | |||
655 | { "__GFP_RECLAIM", "R" }, | 655 | { "__GFP_RECLAIM", "R" }, |
656 | { "__GFP_DIRECT_RECLAIM", "DR" }, | 656 | { "__GFP_DIRECT_RECLAIM", "DR" }, |
657 | { "__GFP_KSWAPD_RECLAIM", "KR" }, | 657 | { "__GFP_KSWAPD_RECLAIM", "KR" }, |
658 | { "__GFP_OTHER_NODE", "ON" }, | ||
659 | }; | 658 | }; |
660 | 659 | ||
661 | static size_t max_gfp_len; | 660 | static size_t max_gfp_len; |
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 74d6a035133a..4ec10e9427d9 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -1405,7 +1405,7 @@ static bool dry_run; | |||
1405 | * perf_evlist__prepare_workload, etc instead of fork+exec'in 'perf record', | 1405 | * perf_evlist__prepare_workload, etc instead of fork+exec'in 'perf record', |
1406 | * using pipes, etc. | 1406 | * using pipes, etc. |
1407 | */ | 1407 | */ |
1408 | struct option __record_options[] = { | 1408 | static struct option __record_options[] = { |
1409 | OPT_CALLBACK('e', "event", &record.evlist, "event", | 1409 | OPT_CALLBACK('e', "event", &record.evlist, "event", |
1410 | "event selector. use 'perf list' to list available events", | 1410 | "event selector. use 'perf list' to list available events", |
1411 | parse_events_option), | 1411 | parse_events_option), |
@@ -1636,7 +1636,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused) | |||
1636 | * overhead. Still generate buildid if they are required | 1636 | * overhead. Still generate buildid if they are required |
1637 | * explicitly using | 1637 | * explicitly using |
1638 | * | 1638 | * |
1639 | * perf record --signal-trigger --no-no-buildid \ | 1639 | * perf record --switch-output --no-no-buildid \ |
1640 | * --no-no-buildid-cache | 1640 | * --no-no-buildid-cache |
1641 | * | 1641 | * |
1642 | * Following code equals to: | 1642 | * Following code equals to: |
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index d53e706a6f17..5b134b0d1ff3 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c | |||
@@ -209,6 +209,7 @@ struct perf_sched { | |||
209 | u64 skipped_samples; | 209 | u64 skipped_samples; |
210 | const char *time_str; | 210 | const char *time_str; |
211 | struct perf_time_interval ptime; | 211 | struct perf_time_interval ptime; |
212 | struct perf_time_interval hist_time; | ||
212 | }; | 213 | }; |
213 | 214 | ||
214 | /* per thread run time data */ | 215 | /* per thread run time data */ |
@@ -2460,6 +2461,11 @@ static int timehist_sched_change_event(struct perf_tool *tool, | |||
2460 | timehist_print_sample(sched, sample, &al, thread, t); | 2461 | timehist_print_sample(sched, sample, &al, thread, t); |
2461 | 2462 | ||
2462 | out: | 2463 | out: |
2464 | if (sched->hist_time.start == 0 && t >= ptime->start) | ||
2465 | sched->hist_time.start = t; | ||
2466 | if (ptime->end == 0 || t <= ptime->end) | ||
2467 | sched->hist_time.end = t; | ||
2468 | |||
2463 | if (tr) { | 2469 | if (tr) { |
2464 | /* time of this sched_switch event becomes last time task seen */ | 2470 | /* time of this sched_switch event becomes last time task seen */ |
2465 | tr->last_time = sample->time; | 2471 | tr->last_time = sample->time; |
@@ -2624,6 +2630,7 @@ static void timehist_print_summary(struct perf_sched *sched, | |||
2624 | struct thread *t; | 2630 | struct thread *t; |
2625 | struct thread_runtime *r; | 2631 | struct thread_runtime *r; |
2626 | int i; | 2632 | int i; |
2633 | u64 hist_time = sched->hist_time.end - sched->hist_time.start; | ||
2627 | 2634 | ||
2628 | memset(&totals, 0, sizeof(totals)); | 2635 | memset(&totals, 0, sizeof(totals)); |
2629 | 2636 | ||
@@ -2665,7 +2672,7 @@ static void timehist_print_summary(struct perf_sched *sched, | |||
2665 | totals.sched_count += r->run_stats.n; | 2672 | totals.sched_count += r->run_stats.n; |
2666 | printf(" CPU %2d idle for ", i); | 2673 | printf(" CPU %2d idle for ", i); |
2667 | print_sched_time(r->total_run_time, 6); | 2674 | print_sched_time(r->total_run_time, 6); |
2668 | printf(" msec\n"); | 2675 | printf(" msec (%6.2f%%)\n", 100.0 * r->total_run_time / hist_time); |
2669 | } else | 2676 | } else |
2670 | printf(" CPU %2d idle entire time window\n", i); | 2677 | printf(" CPU %2d idle entire time window\n", i); |
2671 | } | 2678 | } |
@@ -2701,12 +2708,16 @@ static void timehist_print_summary(struct perf_sched *sched, | |||
2701 | 2708 | ||
2702 | printf("\n" | 2709 | printf("\n" |
2703 | " Total number of unique tasks: %" PRIu64 "\n" | 2710 | " Total number of unique tasks: %" PRIu64 "\n" |
2704 | "Total number of context switches: %" PRIu64 "\n" | 2711 | "Total number of context switches: %" PRIu64 "\n", |
2705 | " Total run time (msec): ", | ||
2706 | totals.task_count, totals.sched_count); | 2712 | totals.task_count, totals.sched_count); |
2707 | 2713 | ||
2714 | printf(" Total run time (msec): "); | ||
2708 | print_sched_time(totals.total_run_time, 2); | 2715 | print_sched_time(totals.total_run_time, 2); |
2709 | printf("\n"); | 2716 | printf("\n"); |
2717 | |||
2718 | printf(" Total scheduling time (msec): "); | ||
2719 | print_sched_time(hist_time, 2); | ||
2720 | printf(" (x %d)\n", sched->max_cpu); | ||
2710 | } | 2721 | } |
2711 | 2722 | ||
2712 | typedef int (*sched_handler)(struct perf_tool *tool, | 2723 | typedef int (*sched_handler)(struct perf_tool *tool, |
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index d281ae2b54e8..4a57c8a60bd9 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -163,7 +163,7 @@ static struct map *kernel_get_module_map(const char *module) | |||
163 | 163 | ||
164 | /* A file path -- this is an offline module */ | 164 | /* A file path -- this is an offline module */ |
165 | if (module && strchr(module, '/')) | 165 | if (module && strchr(module, '/')) |
166 | return machine__findnew_module_map(host_machine, 0, module); | 166 | return dso__new_map(module); |
167 | 167 | ||
168 | if (!module) | 168 | if (!module) |
169 | module = "kernel"; | 169 | module = "kernel"; |
@@ -173,6 +173,7 @@ static struct map *kernel_get_module_map(const char *module) | |||
173 | if (strncmp(pos->dso->short_name + 1, module, | 173 | if (strncmp(pos->dso->short_name + 1, module, |
174 | pos->dso->short_name_len - 2) == 0 && | 174 | pos->dso->short_name_len - 2) == 0 && |
175 | module[pos->dso->short_name_len - 2] == '\0') { | 175 | module[pos->dso->short_name_len - 2] == '\0') { |
176 | map__get(pos); | ||
176 | return pos; | 177 | return pos; |
177 | } | 178 | } |
178 | } | 179 | } |
@@ -188,15 +189,6 @@ struct map *get_target_map(const char *target, bool user) | |||
188 | return kernel_get_module_map(target); | 189 | return kernel_get_module_map(target); |
189 | } | 190 | } |
190 | 191 | ||
191 | static void put_target_map(struct map *map, bool user) | ||
192 | { | ||
193 | if (map && user) { | ||
194 | /* Only the user map needs to be released */ | ||
195 | map__put(map); | ||
196 | } | ||
197 | } | ||
198 | |||
199 | |||
200 | static int convert_exec_to_group(const char *exec, char **result) | 192 | static int convert_exec_to_group(const char *exec, char **result) |
201 | { | 193 | { |
202 | char *ptr1, *ptr2, *exec_copy; | 194 | char *ptr1, *ptr2, *exec_copy; |
@@ -268,21 +260,6 @@ static bool kprobe_warn_out_range(const char *symbol, unsigned long address) | |||
268 | } | 260 | } |
269 | 261 | ||
270 | /* | 262 | /* |
271 | * NOTE: | ||
272 | * '.gnu.linkonce.this_module' section of kernel module elf directly | ||
273 | * maps to 'struct module' from linux/module.h. This section contains | ||
274 | * actual module name which will be used by kernel after loading it. | ||
275 | * But, we cannot use 'struct module' here since linux/module.h is not | ||
276 | * exposed to user-space. Offset of 'name' has remained same from long | ||
277 | * time, so hardcoding it here. | ||
278 | */ | ||
279 | #ifdef __LP64__ | ||
280 | #define MOD_NAME_OFFSET 24 | ||
281 | #else | ||
282 | #define MOD_NAME_OFFSET 12 | ||
283 | #endif | ||
284 | |||
285 | /* | ||
286 | * @module can be module name of module file path. In case of path, | 263 | * @module can be module name of module file path. In case of path, |
287 | * inspect elf and find out what is actual module name. | 264 | * inspect elf and find out what is actual module name. |
288 | * Caller has to free mod_name after using it. | 265 | * Caller has to free mod_name after using it. |
@@ -296,6 +273,7 @@ static char *find_module_name(const char *module) | |||
296 | Elf_Data *data; | 273 | Elf_Data *data; |
297 | Elf_Scn *sec; | 274 | Elf_Scn *sec; |
298 | char *mod_name = NULL; | 275 | char *mod_name = NULL; |
276 | int name_offset; | ||
299 | 277 | ||
300 | fd = open(module, O_RDONLY); | 278 | fd = open(module, O_RDONLY); |
301 | if (fd < 0) | 279 | if (fd < 0) |
@@ -317,7 +295,21 @@ static char *find_module_name(const char *module) | |||
317 | if (!data || !data->d_buf) | 295 | if (!data || !data->d_buf) |
318 | goto ret_err; | 296 | goto ret_err; |
319 | 297 | ||
320 | mod_name = strdup((char *)data->d_buf + MOD_NAME_OFFSET); | 298 | /* |
299 | * NOTE: | ||
300 | * '.gnu.linkonce.this_module' section of kernel module elf directly | ||
301 | * maps to 'struct module' from linux/module.h. This section contains | ||
302 | * actual module name which will be used by kernel after loading it. | ||
303 | * But, we cannot use 'struct module' here since linux/module.h is not | ||
304 | * exposed to user-space. Offset of 'name' has remained same from long | ||
305 | * time, so hardcoding it here. | ||
306 | */ | ||
307 | if (ehdr.e_ident[EI_CLASS] == ELFCLASS32) | ||
308 | name_offset = 12; | ||
309 | else /* expect ELFCLASS64 by default */ | ||
310 | name_offset = 24; | ||
311 | |||
312 | mod_name = strdup((char *)data->d_buf + name_offset); | ||
321 | 313 | ||
322 | ret_err: | 314 | ret_err: |
323 | elf_end(elf); | 315 | elf_end(elf); |
@@ -412,7 +404,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo, | |||
412 | } | 404 | } |
413 | 405 | ||
414 | out: | 406 | out: |
415 | put_target_map(map, uprobes); | 407 | map__put(map); |
416 | return ret; | 408 | return ret; |
417 | 409 | ||
418 | } | 410 | } |
@@ -618,6 +610,51 @@ error: | |||
618 | return ret ? : -ENOENT; | 610 | return ret ? : -ENOENT; |
619 | } | 611 | } |
620 | 612 | ||
613 | /* | ||
614 | * Rename DWARF symbols to ELF symbols -- gcc sometimes optimizes functions | ||
615 | * and generate new symbols with suffixes such as .constprop.N or .isra.N | ||
616 | * etc. Since those symbols are not recorded in DWARF, we have to find | ||
617 | * correct generated symbols from offline ELF binary. | ||
618 | * For online kernel or uprobes we don't need this because those are | ||
619 | * rebased on _text, or already a section relative address. | ||
620 | */ | ||
621 | static int | ||
622 | post_process_offline_probe_trace_events(struct probe_trace_event *tevs, | ||
623 | int ntevs, const char *pathname) | ||
624 | { | ||
625 | struct symbol *sym; | ||
626 | struct map *map; | ||
627 | unsigned long stext = 0; | ||
628 | u64 addr; | ||
629 | int i; | ||
630 | |||
631 | /* Prepare a map for offline binary */ | ||
632 | map = dso__new_map(pathname); | ||
633 | if (!map || get_text_start_address(pathname, &stext) < 0) { | ||
634 | pr_warning("Failed to get ELF symbols for %s\n", pathname); | ||
635 | return -EINVAL; | ||
636 | } | ||
637 | |||
638 | for (i = 0; i < ntevs; i++) { | ||
639 | addr = tevs[i].point.address + tevs[i].point.offset - stext; | ||
640 | sym = map__find_symbol(map, addr); | ||
641 | if (!sym) | ||
642 | continue; | ||
643 | if (!strcmp(sym->name, tevs[i].point.symbol)) | ||
644 | continue; | ||
645 | /* If we have no realname, use symbol for it */ | ||
646 | if (!tevs[i].point.realname) | ||
647 | tevs[i].point.realname = tevs[i].point.symbol; | ||
648 | else | ||
649 | free(tevs[i].point.symbol); | ||
650 | tevs[i].point.symbol = strdup(sym->name); | ||
651 | tevs[i].point.offset = addr - sym->start; | ||
652 | } | ||
653 | map__put(map); | ||
654 | |||
655 | return 0; | ||
656 | } | ||
657 | |||
621 | static int add_exec_to_probe_trace_events(struct probe_trace_event *tevs, | 658 | static int add_exec_to_probe_trace_events(struct probe_trace_event *tevs, |
622 | int ntevs, const char *exec) | 659 | int ntevs, const char *exec) |
623 | { | 660 | { |
@@ -679,7 +716,8 @@ post_process_kernel_probe_trace_events(struct probe_trace_event *tevs, | |||
679 | 716 | ||
680 | /* Skip post process if the target is an offline kernel */ | 717 | /* Skip post process if the target is an offline kernel */ |
681 | if (symbol_conf.ignore_vmlinux_buildid) | 718 | if (symbol_conf.ignore_vmlinux_buildid) |
682 | return 0; | 719 | return post_process_offline_probe_trace_events(tevs, ntevs, |
720 | symbol_conf.vmlinux_name); | ||
683 | 721 | ||
684 | reloc_sym = kernel_get_ref_reloc_sym(); | 722 | reloc_sym = kernel_get_ref_reloc_sym(); |
685 | if (!reloc_sym) { | 723 | if (!reloc_sym) { |
@@ -2869,7 +2907,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev, | |||
2869 | } | 2907 | } |
2870 | 2908 | ||
2871 | out: | 2909 | out: |
2872 | put_target_map(map, pev->uprobes); | 2910 | map__put(map); |
2873 | free(syms); | 2911 | free(syms); |
2874 | return ret; | 2912 | return ret; |
2875 | 2913 | ||
@@ -3362,10 +3400,7 @@ int show_available_funcs(const char *target, struct strfilter *_filter, | |||
3362 | return ret; | 3400 | return ret; |
3363 | 3401 | ||
3364 | /* Get a symbol map */ | 3402 | /* Get a symbol map */ |
3365 | if (user) | 3403 | map = get_target_map(target, user); |
3366 | map = dso__new_map(target); | ||
3367 | else | ||
3368 | map = kernel_get_module_map(target); | ||
3369 | if (!map) { | 3404 | if (!map) { |
3370 | pr_err("Failed to get a map for %s\n", (target) ? : "kernel"); | 3405 | pr_err("Failed to get a map for %s\n", (target) ? : "kernel"); |
3371 | return -EINVAL; | 3406 | return -EINVAL; |
@@ -3397,9 +3432,7 @@ int show_available_funcs(const char *target, struct strfilter *_filter, | |||
3397 | } | 3432 | } |
3398 | 3433 | ||
3399 | end: | 3434 | end: |
3400 | if (user) { | 3435 | map__put(map); |
3401 | map__put(map); | ||
3402 | } | ||
3403 | exit_probe_symbol_maps(); | 3436 | exit_probe_symbol_maps(); |
3404 | 3437 | ||
3405 | return ret; | 3438 | return ret; |
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 99400b0e8f2a..adbc6c02c3aa 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c | |||
@@ -537,6 +537,12 @@ int sysfs__read_build_id(const char *filename, void *build_id, size_t size) | |||
537 | break; | 537 | break; |
538 | } else { | 538 | } else { |
539 | int n = namesz + descsz; | 539 | int n = namesz + descsz; |
540 | |||
541 | if (n > (int)sizeof(bf)) { | ||
542 | n = sizeof(bf); | ||
543 | pr_debug("%s: truncating reading of build id in sysfs file %s: n_namesz=%u, n_descsz=%u.\n", | ||
544 | __func__, filename, nhdr.n_namesz, nhdr.n_descsz); | ||
545 | } | ||
540 | if (read(fd, bf, n) != n) | 546 | if (read(fd, bf, n) != n) |
541 | break; | 547 | break; |
542 | } | 548 | } |
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index 71b05891a6a1..831022b12848 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile | |||
@@ -90,7 +90,7 @@ ifdef INSTALL_PATH | |||
90 | done; | 90 | done; |
91 | 91 | ||
92 | @# Ask all targets to emit their test scripts | 92 | @# Ask all targets to emit their test scripts |
93 | echo "#!/bin/bash" > $(ALL_SCRIPT) | 93 | echo "#!/bin/sh" > $(ALL_SCRIPT) |
94 | echo "cd \$$(dirname \$$0)" >> $(ALL_SCRIPT) | 94 | echo "cd \$$(dirname \$$0)" >> $(ALL_SCRIPT) |
95 | echo "ROOT=\$$PWD" >> $(ALL_SCRIPT) | 95 | echo "ROOT=\$$PWD" >> $(ALL_SCRIPT) |
96 | 96 | ||
diff --git a/tools/testing/selftests/bpf/test_kmod.sh b/tools/testing/selftests/bpf/test_kmod.sh index 92e627adf354..6d58cca8e235 100755 --- a/tools/testing/selftests/bpf/test_kmod.sh +++ b/tools/testing/selftests/bpf/test_kmod.sh | |||
@@ -1,4 +1,4 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/sh |
2 | 2 | ||
3 | SRC_TREE=../../../../ | 3 | SRC_TREE=../../../../ |
4 | 4 | ||
diff --git a/tools/testing/selftests/net/run_netsocktests b/tools/testing/selftests/net/run_netsocktests index c09a682df56a..16058bbea7a8 100755 --- a/tools/testing/selftests/net/run_netsocktests +++ b/tools/testing/selftests/net/run_netsocktests | |||
@@ -1,4 +1,4 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/sh |
2 | 2 | ||
3 | echo "--------------------" | 3 | echo "--------------------" |
4 | echo "running socket test" | 4 | echo "running socket test" |
diff --git a/tools/testing/selftests/x86/protection_keys.c b/tools/testing/selftests/x86/protection_keys.c index bdd58c78902e..df9e0a0cdf29 100644 --- a/tools/testing/selftests/x86/protection_keys.c +++ b/tools/testing/selftests/x86/protection_keys.c | |||
@@ -1367,7 +1367,7 @@ void run_tests_once(void) | |||
1367 | tracing_off(); | 1367 | tracing_off(); |
1368 | close_test_fds(); | 1368 | close_test_fds(); |
1369 | 1369 | ||
1370 | printf("test %2d PASSED (itertation %d)\n", test_nr, iteration_nr); | 1370 | printf("test %2d PASSED (iteration %d)\n", test_nr, iteration_nr); |
1371 | dprintf1("======================\n\n"); | 1371 | dprintf1("======================\n\n"); |
1372 | } | 1372 | } |
1373 | iteration_nr++; | 1373 | iteration_nr++; |