diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-13 15:24:20 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-13 15:24:20 -0400 |
| commit | 46c1e79fee417f151547aa46fae04ab06cb666f4 (patch) | |
| tree | 560f0024d88788656cc48cba8afd4b0b8406d607 | |
| parent | ec846ecd6350857a8b8b9a6b78c763d45e0f09b8 (diff) | |
| parent | b130a699c07155a1d6ef7d971a5f3bf0e3818d5a (diff) | |
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar:
"A handful of tooling fixes"
* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
perf stat: Wait for the correct child
perf tools: Support running perf binaries with a dash in their name
perf config: Check not only section->from_system_config but also item's
perf ui progress: Fix progress update
perf ui progress: Make sure we always define step value
perf tools: Open perf.data with O_CLOEXEC flag
tools lib api: Fix make DEBUG=1 build
perf tests: Fix compile when libunwind's unwind.h is available
tools include linux: Guard against redefinition of some macros
| -rw-r--r-- | tools/include/linux/compiler-gcc.h | 9 | ||||
| -rw-r--r-- | tools/lib/api/Makefile | 8 | ||||
| -rw-r--r-- | tools/perf/builtin-config.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-stat.c | 2 | ||||
| -rw-r--r-- | tools/perf/perf.c | 14 | ||||
| -rw-r--r-- | tools/perf/tests/dwarf-unwind.c | 2 | ||||
| -rw-r--r-- | tools/perf/ui/progress.c | 9 | ||||
| -rw-r--r-- | tools/perf/util/data.c | 13 |
8 files changed, 45 insertions, 14 deletions
diff --git a/tools/include/linux/compiler-gcc.h b/tools/include/linux/compiler-gcc.h index bd39b2090ad1..3723b9f8f964 100644 --- a/tools/include/linux/compiler-gcc.h +++ b/tools/include/linux/compiler-gcc.h | |||
| @@ -21,11 +21,14 @@ | |||
| 21 | #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) | 21 | #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) |
| 22 | 22 | ||
| 23 | #define noinline __attribute__((noinline)) | 23 | #define noinline __attribute__((noinline)) |
| 24 | 24 | #ifndef __packed | |
| 25 | #define __packed __attribute__((packed)) | 25 | #define __packed __attribute__((packed)) |
| 26 | 26 | #endif | |
| 27 | #ifndef __noreturn | ||
| 27 | #define __noreturn __attribute__((noreturn)) | 28 | #define __noreturn __attribute__((noreturn)) |
| 28 | 29 | #endif | |
| 30 | #ifndef __aligned | ||
| 29 | #define __aligned(x) __attribute__((aligned(x))) | 31 | #define __aligned(x) __attribute__((aligned(x))) |
| 32 | #endif | ||
| 30 | #define __printf(a, b) __attribute__((format(printf, a, b))) | 33 | #define __printf(a, b) __attribute__((format(printf, a, b))) |
| 31 | #define __scanf(a, b) __attribute__((format(scanf, a, b))) | 34 | #define __scanf(a, b) __attribute__((format(scanf, a, b))) |
diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile index 4563ba7ede6f..1e83e3c07448 100644 --- a/tools/lib/api/Makefile +++ b/tools/lib/api/Makefile | |||
| @@ -17,13 +17,19 @@ MAKEFLAGS += --no-print-directory | |||
| 17 | LIBFILE = $(OUTPUT)libapi.a | 17 | LIBFILE = $(OUTPUT)libapi.a |
| 18 | 18 | ||
| 19 | CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) | 19 | CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) |
| 20 | CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC | 20 | CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -fPIC |
| 21 | 21 | ||
| 22 | ifeq ($(DEBUG),0) | ||
| 22 | ifeq ($(CC_NO_CLANG), 0) | 23 | ifeq ($(CC_NO_CLANG), 0) |
| 23 | CFLAGS += -O3 | 24 | CFLAGS += -O3 |
| 24 | else | 25 | else |
| 25 | CFLAGS += -O6 | 26 | CFLAGS += -O6 |
| 26 | endif | 27 | endif |
| 28 | endif | ||
| 29 | |||
| 30 | ifeq ($(DEBUG),0) | ||
| 31 | CFLAGS += -D_FORTIFY_SOURCE | ||
| 32 | endif | ||
| 27 | 33 | ||
| 28 | # Treat warnings as errors unless directed not to | 34 | # Treat warnings as errors unless directed not to |
| 29 | ifneq ($(WERROR),0) | 35 | ifneq ($(WERROR),0) |
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c index 3ddcc6e2abeb..a1d82e33282c 100644 --- a/tools/perf/builtin-config.c +++ b/tools/perf/builtin-config.c | |||
| @@ -59,7 +59,7 @@ static int set_config(struct perf_config_set *set, const char *file_name, | |||
| 59 | fprintf(fp, "[%s]\n", section->name); | 59 | fprintf(fp, "[%s]\n", section->name); |
| 60 | 60 | ||
| 61 | perf_config_items__for_each_entry(§ion->items, item) { | 61 | perf_config_items__for_each_entry(§ion->items, item) { |
| 62 | if (!use_system_config && section->from_system_config) | 62 | if (!use_system_config && item->from_system_config) |
| 63 | continue; | 63 | continue; |
| 64 | if (item->value) | 64 | if (item->value) |
| 65 | fprintf(fp, "\t%s = %s\n", | 65 | fprintf(fp, "\t%s = %s\n", |
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 85e992d9215b..69523ed55894 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
| @@ -707,7 +707,7 @@ try_again: | |||
| 707 | process_interval(); | 707 | process_interval(); |
| 708 | } | 708 | } |
| 709 | } | 709 | } |
| 710 | wait(&status); | 710 | waitpid(child_pid, &status, 0); |
| 711 | 711 | ||
| 712 | if (workload_exec_errno) { | 712 | if (workload_exec_errno) { |
| 713 | const char *emsg = str_error_r(workload_exec_errno, msg, sizeof(msg)); | 713 | const char *emsg = str_error_r(workload_exec_errno, msg, sizeof(msg)); |
diff --git a/tools/perf/perf.c b/tools/perf/perf.c index e0279babe0c0..2f19e03c5c40 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c | |||
| @@ -467,15 +467,21 @@ int main(int argc, const char **argv) | |||
| 467 | * - cannot execute it externally (since it would just do | 467 | * - cannot execute it externally (since it would just do |
| 468 | * the same thing over again) | 468 | * the same thing over again) |
| 469 | * | 469 | * |
| 470 | * So we just directly call the internal command handler, and | 470 | * So we just directly call the internal command handler. If that one |
| 471 | * die if that one cannot handle it. | 471 | * fails to handle this, then maybe we just run a renamed perf binary |
| 472 | * that contains a dash in its name. To handle this scenario, we just | ||
| 473 | * fall through and ignore the "xxxx" part of the command string. | ||
| 472 | */ | 474 | */ |
| 473 | if (strstarts(cmd, "perf-")) { | 475 | if (strstarts(cmd, "perf-")) { |
| 474 | cmd += 5; | 476 | cmd += 5; |
| 475 | argv[0] = cmd; | 477 | argv[0] = cmd; |
| 476 | handle_internal_command(argc, argv); | 478 | handle_internal_command(argc, argv); |
| 477 | fprintf(stderr, "cannot handle %s internally", cmd); | 479 | /* |
| 478 | goto out; | 480 | * If the command is handled, the above function does not |
| 481 | * return undo changes and fall through in such a case. | ||
| 482 | */ | ||
| 483 | cmd -= 5; | ||
| 484 | argv[0] = cmd; | ||
| 479 | } | 485 | } |
| 480 | if (strstarts(cmd, "trace")) { | 486 | if (strstarts(cmd, "trace")) { |
| 481 | #ifdef HAVE_LIBAUDIT_SUPPORT | 487 | #ifdef HAVE_LIBAUDIT_SUPPORT |
diff --git a/tools/perf/tests/dwarf-unwind.c b/tools/perf/tests/dwarf-unwind.c index 2a7b9b47bbcb..9ba1d216a89f 100644 --- a/tools/perf/tests/dwarf-unwind.c +++ b/tools/perf/tests/dwarf-unwind.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | #include "debug.h" | 6 | #include "debug.h" |
| 7 | #include "machine.h" | 7 | #include "machine.h" |
| 8 | #include "event.h" | 8 | #include "event.h" |
| 9 | #include "unwind.h" | 9 | #include "../util/unwind.h" |
| 10 | #include "perf_regs.h" | 10 | #include "perf_regs.h" |
| 11 | #include "map.h" | 11 | #include "map.h" |
| 12 | #include "thread.h" | 12 | #include "thread.h" |
diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c index a0f24c7115c5..ae91c8148edf 100644 --- a/tools/perf/ui/progress.c +++ b/tools/perf/ui/progress.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | #include <linux/kernel.h> | ||
| 1 | #include "../cache.h" | 2 | #include "../cache.h" |
| 2 | #include "progress.h" | 3 | #include "progress.h" |
| 3 | 4 | ||
| @@ -14,10 +15,14 @@ struct ui_progress_ops *ui_progress__ops = &null_progress__ops; | |||
| 14 | 15 | ||
| 15 | void ui_progress__update(struct ui_progress *p, u64 adv) | 16 | void ui_progress__update(struct ui_progress *p, u64 adv) |
| 16 | { | 17 | { |
| 18 | u64 last = p->curr; | ||
| 19 | |||
| 17 | p->curr += adv; | 20 | p->curr += adv; |
| 18 | 21 | ||
| 19 | if (p->curr >= p->next) { | 22 | if (p->curr >= p->next) { |
| 20 | p->next += p->step; | 23 | u64 nr = DIV_ROUND_UP(p->curr - last, p->step); |
| 24 | |||
| 25 | p->next += nr * p->step; | ||
| 21 | ui_progress__ops->update(p); | 26 | ui_progress__ops->update(p); |
| 22 | } | 27 | } |
| 23 | } | 28 | } |
| @@ -25,7 +30,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv) | |||
| 25 | void ui_progress__init(struct ui_progress *p, u64 total, const char *title) | 30 | void ui_progress__init(struct ui_progress *p, u64 total, const char *title) |
| 26 | { | 31 | { |
| 27 | p->curr = 0; | 32 | p->curr = 0; |
| 28 | p->next = p->step = total / 16; | 33 | p->next = p->step = total / 16 ?: 1; |
| 29 | p->total = total; | 34 | p->total = total; |
| 30 | p->title = title; | 35 | p->title = title; |
| 31 | 36 | ||
diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c index e84bbc8ec058..263f5a906ba5 100644 --- a/tools/perf/util/data.c +++ b/tools/perf/util/data.c | |||
| @@ -10,6 +10,16 @@ | |||
| 10 | #include "util.h" | 10 | #include "util.h" |
| 11 | #include "debug.h" | 11 | #include "debug.h" |
| 12 | 12 | ||
| 13 | #ifndef O_CLOEXEC | ||
| 14 | #ifdef __sparc__ | ||
| 15 | #define O_CLOEXEC 0x400000 | ||
| 16 | #elif defined(__alpha__) || defined(__hppa__) | ||
| 17 | #define O_CLOEXEC 010000000 | ||
| 18 | #else | ||
| 19 | #define O_CLOEXEC 02000000 | ||
| 20 | #endif | ||
| 21 | #endif | ||
| 22 | |||
| 13 | static bool check_pipe(struct perf_data_file *file) | 23 | static bool check_pipe(struct perf_data_file *file) |
| 14 | { | 24 | { |
| 15 | struct stat st; | 25 | struct stat st; |
| @@ -96,7 +106,8 @@ static int open_file_write(struct perf_data_file *file) | |||
| 96 | if (check_backup(file)) | 106 | if (check_backup(file)) |
| 97 | return -1; | 107 | return -1; |
| 98 | 108 | ||
| 99 | fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR); | 109 | fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC|O_CLOEXEC, |
| 110 | S_IRUSR|S_IWUSR); | ||
| 100 | 111 | ||
| 101 | if (fd < 0) | 112 | if (fd < 0) |
| 102 | pr_err("failed to open %s : %s\n", file->path, | 113 | pr_err("failed to open %s : %s\n", file->path, |
