diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-10-07 05:24:24 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-10-07 05:24:24 -0400 |
commit | 25a9a924c0c8723ced99179eb639e8c5372a2557 (patch) | |
tree | 83170168d50b9703486327b5b3a0bfb1d8da9b2b /tools | |
parent | 0b101e62afe626ecae60173f92f1e0ec72151653 (diff) | |
parent | a0eeb8dd34f21fddfe85b37832b5f3d02ee6e34b (diff) |
Merge branch 'linus' into x86/asm, to pick up fixes before applying new changes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/build/Makefile.feature | 8 | ||||
-rw-r--r-- | tools/build/feature/Makefile | 10 | ||||
-rw-r--r-- | tools/build/feature/test-all.c | 10 | ||||
-rw-r--r-- | tools/build/feature/test-get_cpuid.c | 7 | ||||
-rw-r--r-- | tools/build/feature/test-numa_num_possible_cpus.c | 6 | ||||
-rw-r--r-- | tools/lib/traceevent/event-parse.c | 23 | ||||
-rw-r--r-- | tools/perf/Documentation/intel-pt.txt | 15 | ||||
-rw-r--r-- | tools/perf/config/Makefile | 20 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 13 | ||||
-rw-r--r-- | tools/perf/util/session.c | 5 | ||||
-rw-r--r-- | tools/perf/util/stat.c | 16 | ||||
-rw-r--r-- | tools/perf/util/symbol-elf.c | 37 | ||||
-rw-r--r-- | tools/perf/util/util.c | 2 | ||||
-rw-r--r-- | tools/power/x86/turbostat/turbostat.c | 39 | ||||
-rw-r--r-- | tools/testing/selftests/membarrier/Makefile | 7 | ||||
-rw-r--r-- | tools/testing/selftests/membarrier/membarrier_test.c | 5 | ||||
-rw-r--r-- | tools/testing/selftests/vm/Makefile | 9 | ||||
-rw-r--r-- | tools/testing/selftests/vm/userfaultfd.c | 54 |
18 files changed, 186 insertions, 100 deletions
diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index 2975632d51e2..c8fe6d177119 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature | |||
@@ -41,6 +41,7 @@ FEATURE_TESTS ?= \ | |||
41 | libelf-getphdrnum \ | 41 | libelf-getphdrnum \ |
42 | libelf-mmap \ | 42 | libelf-mmap \ |
43 | libnuma \ | 43 | libnuma \ |
44 | numa_num_possible_cpus \ | ||
44 | libperl \ | 45 | libperl \ |
45 | libpython \ | 46 | libpython \ |
46 | libpython-version \ | 47 | libpython-version \ |
@@ -51,7 +52,8 @@ FEATURE_TESTS ?= \ | |||
51 | timerfd \ | 52 | timerfd \ |
52 | libdw-dwarf-unwind \ | 53 | libdw-dwarf-unwind \ |
53 | zlib \ | 54 | zlib \ |
54 | lzma | 55 | lzma \ |
56 | get_cpuid | ||
55 | 57 | ||
56 | FEATURE_DISPLAY ?= \ | 58 | FEATURE_DISPLAY ?= \ |
57 | dwarf \ | 59 | dwarf \ |
@@ -61,13 +63,15 @@ FEATURE_DISPLAY ?= \ | |||
61 | libbfd \ | 63 | libbfd \ |
62 | libelf \ | 64 | libelf \ |
63 | libnuma \ | 65 | libnuma \ |
66 | numa_num_possible_cpus \ | ||
64 | libperl \ | 67 | libperl \ |
65 | libpython \ | 68 | libpython \ |
66 | libslang \ | 69 | libslang \ |
67 | libunwind \ | 70 | libunwind \ |
68 | libdw-dwarf-unwind \ | 71 | libdw-dwarf-unwind \ |
69 | zlib \ | 72 | zlib \ |
70 | lzma | 73 | lzma \ |
74 | get_cpuid | ||
71 | 75 | ||
72 | # Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features. | 76 | # Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features. |
73 | # If in the future we need per-feature checks/flags for features not | 77 | # If in the future we need per-feature checks/flags for features not |
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 74ca42093d70..e43a2971bf56 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile | |||
@@ -19,6 +19,7 @@ FILES= \ | |||
19 | test-libelf-getphdrnum.bin \ | 19 | test-libelf-getphdrnum.bin \ |
20 | test-libelf-mmap.bin \ | 20 | test-libelf-mmap.bin \ |
21 | test-libnuma.bin \ | 21 | test-libnuma.bin \ |
22 | test-numa_num_possible_cpus.bin \ | ||
22 | test-libperl.bin \ | 23 | test-libperl.bin \ |
23 | test-libpython.bin \ | 24 | test-libpython.bin \ |
24 | test-libpython-version.bin \ | 25 | test-libpython-version.bin \ |
@@ -34,7 +35,8 @@ FILES= \ | |||
34 | test-compile-x32.bin \ | 35 | test-compile-x32.bin \ |
35 | test-zlib.bin \ | 36 | test-zlib.bin \ |
36 | test-lzma.bin \ | 37 | test-lzma.bin \ |
37 | test-bpf.bin | 38 | test-bpf.bin \ |
39 | test-get_cpuid.bin | ||
38 | 40 | ||
39 | CC := $(CROSS_COMPILE)gcc -MD | 41 | CC := $(CROSS_COMPILE)gcc -MD |
40 | PKG_CONFIG := $(CROSS_COMPILE)pkg-config | 42 | PKG_CONFIG := $(CROSS_COMPILE)pkg-config |
@@ -87,6 +89,9 @@ test-libelf-getphdrnum.bin: | |||
87 | test-libnuma.bin: | 89 | test-libnuma.bin: |
88 | $(BUILD) -lnuma | 90 | $(BUILD) -lnuma |
89 | 91 | ||
92 | test-numa_num_possible_cpus.bin: | ||
93 | $(BUILD) -lnuma | ||
94 | |||
90 | test-libunwind.bin: | 95 | test-libunwind.bin: |
91 | $(BUILD) -lelf | 96 | $(BUILD) -lelf |
92 | 97 | ||
@@ -162,6 +167,9 @@ test-zlib.bin: | |||
162 | test-lzma.bin: | 167 | test-lzma.bin: |
163 | $(BUILD) -llzma | 168 | $(BUILD) -llzma |
164 | 169 | ||
170 | test-get_cpuid.bin: | ||
171 | $(BUILD) | ||
172 | |||
165 | test-bpf.bin: | 173 | test-bpf.bin: |
166 | $(BUILD) | 174 | $(BUILD) |
167 | 175 | ||
diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c index 84689a67814a..33cf6f20bd4e 100644 --- a/tools/build/feature/test-all.c +++ b/tools/build/feature/test-all.c | |||
@@ -77,6 +77,10 @@ | |||
77 | # include "test-libnuma.c" | 77 | # include "test-libnuma.c" |
78 | #undef main | 78 | #undef main |
79 | 79 | ||
80 | #define main main_test_numa_num_possible_cpus | ||
81 | # include "test-numa_num_possible_cpus.c" | ||
82 | #undef main | ||
83 | |||
80 | #define main main_test_timerfd | 84 | #define main main_test_timerfd |
81 | # include "test-timerfd.c" | 85 | # include "test-timerfd.c" |
82 | #undef main | 86 | #undef main |
@@ -117,6 +121,10 @@ | |||
117 | # include "test-lzma.c" | 121 | # include "test-lzma.c" |
118 | #undef main | 122 | #undef main |
119 | 123 | ||
124 | #define main main_test_get_cpuid | ||
125 | # include "test-get_cpuid.c" | ||
126 | #undef main | ||
127 | |||
120 | int main(int argc, char *argv[]) | 128 | int main(int argc, char *argv[]) |
121 | { | 129 | { |
122 | main_test_libpython(); | 130 | main_test_libpython(); |
@@ -136,6 +144,7 @@ int main(int argc, char *argv[]) | |||
136 | main_test_libbfd(); | 144 | main_test_libbfd(); |
137 | main_test_backtrace(); | 145 | main_test_backtrace(); |
138 | main_test_libnuma(); | 146 | main_test_libnuma(); |
147 | main_test_numa_num_possible_cpus(); | ||
139 | main_test_timerfd(); | 148 | main_test_timerfd(); |
140 | main_test_stackprotector_all(); | 149 | main_test_stackprotector_all(); |
141 | main_test_libdw_dwarf_unwind(); | 150 | main_test_libdw_dwarf_unwind(); |
@@ -143,6 +152,7 @@ int main(int argc, char *argv[]) | |||
143 | main_test_zlib(); | 152 | main_test_zlib(); |
144 | main_test_pthread_attr_setaffinity_np(); | 153 | main_test_pthread_attr_setaffinity_np(); |
145 | main_test_lzma(); | 154 | main_test_lzma(); |
155 | main_test_get_cpuid(); | ||
146 | 156 | ||
147 | return 0; | 157 | return 0; |
148 | } | 158 | } |
diff --git a/tools/build/feature/test-get_cpuid.c b/tools/build/feature/test-get_cpuid.c new file mode 100644 index 000000000000..d7a2c407130d --- /dev/null +++ b/tools/build/feature/test-get_cpuid.c | |||
@@ -0,0 +1,7 @@ | |||
1 | #include <cpuid.h> | ||
2 | |||
3 | int main(void) | ||
4 | { | ||
5 | unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0; | ||
6 | return __get_cpuid(0x15, &eax, &ebx, &ecx, &edx); | ||
7 | } | ||
diff --git a/tools/build/feature/test-numa_num_possible_cpus.c b/tools/build/feature/test-numa_num_possible_cpus.c new file mode 100644 index 000000000000..2606e94b0659 --- /dev/null +++ b/tools/build/feature/test-numa_num_possible_cpus.c | |||
@@ -0,0 +1,6 @@ | |||
1 | #include <numa.h> | ||
2 | |||
3 | int main(void) | ||
4 | { | ||
5 | return numa_num_possible_cpus(); | ||
6 | } | ||
diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index 4d885934b919..cf42b090477b 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c | |||
@@ -3795,7 +3795,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, | |||
3795 | struct format_field *field; | 3795 | struct format_field *field; |
3796 | struct printk_map *printk; | 3796 | struct printk_map *printk; |
3797 | long long val, fval; | 3797 | long long val, fval; |
3798 | unsigned long addr; | 3798 | unsigned long long addr; |
3799 | char *str; | 3799 | char *str; |
3800 | unsigned char *hex; | 3800 | unsigned char *hex; |
3801 | int print; | 3801 | int print; |
@@ -3828,13 +3828,30 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, | |||
3828 | */ | 3828 | */ |
3829 | if (!(field->flags & FIELD_IS_ARRAY) && | 3829 | if (!(field->flags & FIELD_IS_ARRAY) && |
3830 | field->size == pevent->long_size) { | 3830 | field->size == pevent->long_size) { |
3831 | addr = *(unsigned long *)(data + field->offset); | 3831 | |
3832 | /* Handle heterogeneous recording and processing | ||
3833 | * architectures | ||
3834 | * | ||
3835 | * CASE I: | ||
3836 | * Traces recorded on 32-bit devices (32-bit | ||
3837 | * addressing) and processed on 64-bit devices: | ||
3838 | * In this case, only 32 bits should be read. | ||
3839 | * | ||
3840 | * CASE II: | ||
3841 | * Traces recorded on 64 bit devices and processed | ||
3842 | * on 32-bit devices: | ||
3843 | * In this case, 64 bits must be read. | ||
3844 | */ | ||
3845 | addr = (pevent->long_size == 8) ? | ||
3846 | *(unsigned long long *)(data + field->offset) : | ||
3847 | (unsigned long long)*(unsigned int *)(data + field->offset); | ||
3848 | |||
3832 | /* Check if it matches a print format */ | 3849 | /* Check if it matches a print format */ |
3833 | printk = find_printk(pevent, addr); | 3850 | printk = find_printk(pevent, addr); |
3834 | if (printk) | 3851 | if (printk) |
3835 | trace_seq_puts(s, printk->printk); | 3852 | trace_seq_puts(s, printk->printk); |
3836 | else | 3853 | else |
3837 | trace_seq_printf(s, "%lx", addr); | 3854 | trace_seq_printf(s, "%llx", addr); |
3838 | break; | 3855 | break; |
3839 | } | 3856 | } |
3840 | str = malloc(len + 1); | 3857 | str = malloc(len + 1); |
diff --git a/tools/perf/Documentation/intel-pt.txt b/tools/perf/Documentation/intel-pt.txt index 4a0501d7a3b4..c94c9de3173e 100644 --- a/tools/perf/Documentation/intel-pt.txt +++ b/tools/perf/Documentation/intel-pt.txt | |||
@@ -364,21 +364,6 @@ cyc_thresh Specifies how frequently CYC packets are produced - see cyc | |||
364 | 364 | ||
365 | CYC packets are not requested by default. | 365 | CYC packets are not requested by default. |
366 | 366 | ||
367 | no_force_psb This is a driver option and is not in the IA32_RTIT_CTL MSR. | ||
368 | |||
369 | It stops the driver resetting the byte count to zero whenever | ||
370 | enabling the trace (for example on context switches) which in | ||
371 | turn results in no PSB being forced. However some processors | ||
372 | will produce a PSB anyway. | ||
373 | |||
374 | In any case, there is still a PSB when the trace is enabled for | ||
375 | the first time. | ||
376 | |||
377 | no_force_psb can be used to slightly decrease the trace size but | ||
378 | may make it harder for the decoder to recover from errors. | ||
379 | |||
380 | no_force_psb is not selected by default. | ||
381 | |||
382 | 367 | ||
383 | new snapshot option | 368 | new snapshot option |
384 | ------------------- | 369 | ------------------- |
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index 827557fc7511..38a08539f4bf 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile | |||
@@ -573,9 +573,14 @@ ifndef NO_LIBNUMA | |||
573 | msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev); | 573 | msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev); |
574 | NO_LIBNUMA := 1 | 574 | NO_LIBNUMA := 1 |
575 | else | 575 | else |
576 | CFLAGS += -DHAVE_LIBNUMA_SUPPORT | 576 | ifeq ($(feature-numa_num_possible_cpus), 0) |
577 | EXTLIBS += -lnuma | 577 | msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8); |
578 | $(call detected,CONFIG_NUMA) | 578 | NO_LIBNUMA := 1 |
579 | else | ||
580 | CFLAGS += -DHAVE_LIBNUMA_SUPPORT | ||
581 | EXTLIBS += -lnuma | ||
582 | $(call detected,CONFIG_NUMA) | ||
583 | endif | ||
579 | endif | 584 | endif |
580 | endif | 585 | endif |
581 | 586 | ||
@@ -621,8 +626,13 @@ ifdef LIBBABELTRACE | |||
621 | endif | 626 | endif |
622 | 627 | ||
623 | ifndef NO_AUXTRACE | 628 | ifndef NO_AUXTRACE |
624 | $(call detected,CONFIG_AUXTRACE) | 629 | ifeq ($(feature-get_cpuid), 0) |
625 | CFLAGS += -DHAVE_AUXTRACE_SUPPORT | 630 | msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc); |
631 | NO_AUXTRACE := 1 | ||
632 | else | ||
633 | $(call detected,CONFIG_AUXTRACE) | ||
634 | CFLAGS += -DHAVE_AUXTRACE_SUPPORT | ||
635 | endif | ||
626 | endif | 636 | endif |
627 | 637 | ||
628 | # Among the variables below, these: | 638 | # Among the variables below, these: |
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index eb5f18b75402..c6f9af78f6f5 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -270,12 +270,13 @@ static int kernel_get_module_dso(const char *module, struct dso **pdso) | |||
270 | int ret = 0; | 270 | int ret = 0; |
271 | 271 | ||
272 | if (module) { | 272 | if (module) { |
273 | list_for_each_entry(dso, &host_machine->dsos.head, node) { | 273 | char module_name[128]; |
274 | if (!dso->kernel) | 274 | |
275 | continue; | 275 | snprintf(module_name, sizeof(module_name), "[%s]", module); |
276 | if (strncmp(dso->short_name + 1, module, | 276 | map = map_groups__find_by_name(&host_machine->kmaps, MAP__FUNCTION, module_name); |
277 | dso->short_name_len - 2) == 0) | 277 | if (map) { |
278 | goto found; | 278 | dso = map->dso; |
279 | goto found; | ||
279 | } | 280 | } |
280 | pr_debug("Failed to find module %s.\n", module); | 281 | pr_debug("Failed to find module %s.\n", module); |
281 | return -ENOENT; | 282 | return -ENOENT; |
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 8a4537ee9bc3..fc3f7c922f99 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -1580,7 +1580,10 @@ static int __perf_session__process_events(struct perf_session *session, | |||
1580 | file_offset = page_offset; | 1580 | file_offset = page_offset; |
1581 | head = data_offset - page_offset; | 1581 | head = data_offset - page_offset; |
1582 | 1582 | ||
1583 | if (data_size && (data_offset + data_size < file_size)) | 1583 | if (data_size == 0) |
1584 | goto out; | ||
1585 | |||
1586 | if (data_offset + data_size < file_size) | ||
1584 | file_size = data_offset + data_size; | 1587 | file_size = data_offset + data_size; |
1585 | 1588 | ||
1586 | ui_progress__init(&prog, file_size, "Processing events..."); | 1589 | ui_progress__init(&prog, file_size, "Processing events..."); |
diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c index 415c359de465..2d065d065b67 100644 --- a/tools/perf/util/stat.c +++ b/tools/perf/util/stat.c | |||
@@ -196,7 +196,8 @@ static void zero_per_pkg(struct perf_evsel *counter) | |||
196 | memset(counter->per_pkg_mask, 0, MAX_NR_CPUS); | 196 | memset(counter->per_pkg_mask, 0, MAX_NR_CPUS); |
197 | } | 197 | } |
198 | 198 | ||
199 | static int check_per_pkg(struct perf_evsel *counter, int cpu, bool *skip) | 199 | static int check_per_pkg(struct perf_evsel *counter, |
200 | struct perf_counts_values *vals, int cpu, bool *skip) | ||
200 | { | 201 | { |
201 | unsigned long *mask = counter->per_pkg_mask; | 202 | unsigned long *mask = counter->per_pkg_mask; |
202 | struct cpu_map *cpus = perf_evsel__cpus(counter); | 203 | struct cpu_map *cpus = perf_evsel__cpus(counter); |
@@ -218,6 +219,17 @@ static int check_per_pkg(struct perf_evsel *counter, int cpu, bool *skip) | |||
218 | counter->per_pkg_mask = mask; | 219 | counter->per_pkg_mask = mask; |
219 | } | 220 | } |
220 | 221 | ||
222 | /* | ||
223 | * we do not consider an event that has not run as a good | ||
224 | * instance to mark a package as used (skip=1). Otherwise | ||
225 | * we may run into a situation where the first CPU in a package | ||
226 | * is not running anything, yet the second is, and this function | ||
227 | * would mark the package as used after the first CPU and would | ||
228 | * not read the values from the second CPU. | ||
229 | */ | ||
230 | if (!(vals->run && vals->ena)) | ||
231 | return 0; | ||
232 | |||
221 | s = cpu_map__get_socket(cpus, cpu); | 233 | s = cpu_map__get_socket(cpus, cpu); |
222 | if (s < 0) | 234 | if (s < 0) |
223 | return -1; | 235 | return -1; |
@@ -235,7 +247,7 @@ process_counter_values(struct perf_stat_config *config, struct perf_evsel *evsel | |||
235 | static struct perf_counts_values zero; | 247 | static struct perf_counts_values zero; |
236 | bool skip = false; | 248 | bool skip = false; |
237 | 249 | ||
238 | if (check_per_pkg(evsel, cpu, &skip)) { | 250 | if (check_per_pkg(evsel, count, cpu, &skip)) { |
239 | pr_err("failed to read per-pkg counter\n"); | 251 | pr_err("failed to read per-pkg counter\n"); |
240 | return -1; | 252 | return -1; |
241 | } | 253 | } |
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 53bb5f59ec58..475d88d0a1c9 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c | |||
@@ -38,7 +38,7 @@ static inline char *bfd_demangle(void __maybe_unused *v, | |||
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | #ifndef HAVE_ELF_GETPHDRNUM_SUPPORT | 40 | #ifndef HAVE_ELF_GETPHDRNUM_SUPPORT |
41 | int elf_getphdrnum(Elf *elf, size_t *dst) | 41 | static int elf_getphdrnum(Elf *elf, size_t *dst) |
42 | { | 42 | { |
43 | GElf_Ehdr gehdr; | 43 | GElf_Ehdr gehdr; |
44 | GElf_Ehdr *ehdr; | 44 | GElf_Ehdr *ehdr; |
@@ -1271,8 +1271,6 @@ out_close: | |||
1271 | static int kcore__init(struct kcore *kcore, char *filename, int elfclass, | 1271 | static int kcore__init(struct kcore *kcore, char *filename, int elfclass, |
1272 | bool temp) | 1272 | bool temp) |
1273 | { | 1273 | { |
1274 | GElf_Ehdr *ehdr; | ||
1275 | |||
1276 | kcore->elfclass = elfclass; | 1274 | kcore->elfclass = elfclass; |
1277 | 1275 | ||
1278 | if (temp) | 1276 | if (temp) |
@@ -1289,9 +1287,7 @@ static int kcore__init(struct kcore *kcore, char *filename, int elfclass, | |||
1289 | if (!gelf_newehdr(kcore->elf, elfclass)) | 1287 | if (!gelf_newehdr(kcore->elf, elfclass)) |
1290 | goto out_end; | 1288 | goto out_end; |
1291 | 1289 | ||
1292 | ehdr = gelf_getehdr(kcore->elf, &kcore->ehdr); | 1290 | memset(&kcore->ehdr, 0, sizeof(GElf_Ehdr)); |
1293 | if (!ehdr) | ||
1294 | goto out_end; | ||
1295 | 1291 | ||
1296 | return 0; | 1292 | return 0; |
1297 | 1293 | ||
@@ -1348,23 +1344,18 @@ static int kcore__copy_hdr(struct kcore *from, struct kcore *to, size_t count) | |||
1348 | static int kcore__add_phdr(struct kcore *kcore, int idx, off_t offset, | 1344 | static int kcore__add_phdr(struct kcore *kcore, int idx, off_t offset, |
1349 | u64 addr, u64 len) | 1345 | u64 addr, u64 len) |
1350 | { | 1346 | { |
1351 | GElf_Phdr gphdr; | 1347 | GElf_Phdr phdr = { |
1352 | GElf_Phdr *phdr; | 1348 | .p_type = PT_LOAD, |
1353 | 1349 | .p_flags = PF_R | PF_W | PF_X, | |
1354 | phdr = gelf_getphdr(kcore->elf, idx, &gphdr); | 1350 | .p_offset = offset, |
1355 | if (!phdr) | 1351 | .p_vaddr = addr, |
1356 | return -1; | 1352 | .p_paddr = 0, |
1357 | 1353 | .p_filesz = len, | |
1358 | phdr->p_type = PT_LOAD; | 1354 | .p_memsz = len, |
1359 | phdr->p_flags = PF_R | PF_W | PF_X; | 1355 | .p_align = page_size, |
1360 | phdr->p_offset = offset; | 1356 | }; |
1361 | phdr->p_vaddr = addr; | 1357 | |
1362 | phdr->p_paddr = 0; | 1358 | if (!gelf_update_phdr(kcore->elf, idx, &phdr)) |
1363 | phdr->p_filesz = len; | ||
1364 | phdr->p_memsz = len; | ||
1365 | phdr->p_align = page_size; | ||
1366 | |||
1367 | if (!gelf_update_phdr(kcore->elf, idx, phdr)) | ||
1368 | return -1; | 1359 | return -1; |
1369 | 1360 | ||
1370 | return 0; | 1361 | return 0; |
diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 7acafb3c5592..c2cd9bf2348b 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c | |||
@@ -709,7 +709,7 @@ bool find_process(const char *name) | |||
709 | 709 | ||
710 | dir = opendir(procfs__mountpoint()); | 710 | dir = opendir(procfs__mountpoint()); |
711 | if (!dir) | 711 | if (!dir) |
712 | return -1; | 712 | return false; |
713 | 713 | ||
714 | /* Walk through the directory. */ | 714 | /* Walk through the directory. */ |
715 | while (ret && (d = readdir(dir)) != NULL) { | 715 | while (ret && (d = readdir(dir)) != NULL) { |
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 9655cb49c7cb..bde0ef1a63df 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c | |||
@@ -71,8 +71,11 @@ unsigned int extra_msr_offset32; | |||
71 | unsigned int extra_msr_offset64; | 71 | unsigned int extra_msr_offset64; |
72 | unsigned int extra_delta_offset32; | 72 | unsigned int extra_delta_offset32; |
73 | unsigned int extra_delta_offset64; | 73 | unsigned int extra_delta_offset64; |
74 | unsigned int aperf_mperf_multiplier = 1; | ||
74 | int do_smi; | 75 | int do_smi; |
75 | double bclk; | 76 | double bclk; |
77 | double base_hz; | ||
78 | double tsc_tweak = 1.0; | ||
76 | unsigned int show_pkg; | 79 | unsigned int show_pkg; |
77 | unsigned int show_core; | 80 | unsigned int show_core; |
78 | unsigned int show_cpu; | 81 | unsigned int show_cpu; |
@@ -502,7 +505,7 @@ int format_counters(struct thread_data *t, struct core_data *c, | |||
502 | /* %Busy */ | 505 | /* %Busy */ |
503 | if (has_aperf) { | 506 | if (has_aperf) { |
504 | if (!skip_c0) | 507 | if (!skip_c0) |
505 | outp += sprintf(outp, "%8.2f", 100.0 * t->mperf/t->tsc); | 508 | outp += sprintf(outp, "%8.2f", 100.0 * t->mperf/t->tsc/tsc_tweak); |
506 | else | 509 | else |
507 | outp += sprintf(outp, "********"); | 510 | outp += sprintf(outp, "********"); |
508 | } | 511 | } |
@@ -510,7 +513,7 @@ int format_counters(struct thread_data *t, struct core_data *c, | |||
510 | /* Bzy_MHz */ | 513 | /* Bzy_MHz */ |
511 | if (has_aperf) | 514 | if (has_aperf) |
512 | outp += sprintf(outp, "%8.0f", | 515 | outp += sprintf(outp, "%8.0f", |
513 | 1.0 * t->tsc / units * t->aperf / t->mperf / interval_float); | 516 | 1.0 * t->tsc * tsc_tweak / units * t->aperf / t->mperf / interval_float); |
514 | 517 | ||
515 | /* TSC_MHz */ | 518 | /* TSC_MHz */ |
516 | outp += sprintf(outp, "%8.0f", 1.0 * t->tsc/units/interval_float); | 519 | outp += sprintf(outp, "%8.0f", 1.0 * t->tsc/units/interval_float); |
@@ -984,6 +987,8 @@ int get_counters(struct thread_data *t, struct core_data *c, struct pkg_data *p) | |||
984 | return -3; | 987 | return -3; |
985 | if (get_msr(cpu, MSR_IA32_MPERF, &t->mperf)) | 988 | if (get_msr(cpu, MSR_IA32_MPERF, &t->mperf)) |
986 | return -4; | 989 | return -4; |
990 | t->aperf = t->aperf * aperf_mperf_multiplier; | ||
991 | t->mperf = t->mperf * aperf_mperf_multiplier; | ||
987 | } | 992 | } |
988 | 993 | ||
989 | if (do_smi) { | 994 | if (do_smi) { |
@@ -1149,6 +1154,19 @@ int slv_pkg_cstate_limits[16] = {PCL__0, PCL__1, PCLRSV, PCLRSV, PCL__4, PCLRSV, | |||
1149 | int amt_pkg_cstate_limits[16] = {PCL__0, PCL__1, PCL__2, PCLRSV, PCLRSV, PCLRSV, PCL__6, PCL__7, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV}; | 1154 | int amt_pkg_cstate_limits[16] = {PCL__0, PCL__1, PCL__2, PCLRSV, PCLRSV, PCLRSV, PCL__6, PCL__7, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV}; |
1150 | int phi_pkg_cstate_limits[16] = {PCL__0, PCL__2, PCL_6N, PCL_6R, PCLRSV, PCLRSV, PCLRSV, PCLUNL, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV}; | 1155 | int phi_pkg_cstate_limits[16] = {PCL__0, PCL__2, PCL_6N, PCL_6R, PCLRSV, PCLRSV, PCLRSV, PCLUNL, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV, PCLRSV}; |
1151 | 1156 | ||
1157 | |||
1158 | static void | ||
1159 | calculate_tsc_tweak() | ||
1160 | { | ||
1161 | unsigned long long msr; | ||
1162 | unsigned int base_ratio; | ||
1163 | |||
1164 | get_msr(base_cpu, MSR_NHM_PLATFORM_INFO, &msr); | ||
1165 | base_ratio = (msr >> 8) & 0xFF; | ||
1166 | base_hz = base_ratio * bclk * 1000000; | ||
1167 | tsc_tweak = base_hz / tsc_hz; | ||
1168 | } | ||
1169 | |||
1152 | static void | 1170 | static void |
1153 | dump_nhm_platform_info(void) | 1171 | dump_nhm_platform_info(void) |
1154 | { | 1172 | { |
@@ -1926,8 +1944,6 @@ int has_config_tdp(unsigned int family, unsigned int model) | |||
1926 | 1944 | ||
1927 | switch (model) { | 1945 | switch (model) { |
1928 | case 0x3A: /* IVB */ | 1946 | case 0x3A: /* IVB */ |
1929 | case 0x3E: /* IVB Xeon */ | ||
1930 | |||
1931 | case 0x3C: /* HSW */ | 1947 | case 0x3C: /* HSW */ |
1932 | case 0x3F: /* HSX */ | 1948 | case 0x3F: /* HSX */ |
1933 | case 0x45: /* HSW */ | 1949 | case 0x45: /* HSW */ |
@@ -2543,6 +2559,13 @@ int is_knl(unsigned int family, unsigned int model) | |||
2543 | return 0; | 2559 | return 0; |
2544 | } | 2560 | } |
2545 | 2561 | ||
2562 | unsigned int get_aperf_mperf_multiplier(unsigned int family, unsigned int model) | ||
2563 | { | ||
2564 | if (is_knl(family, model)) | ||
2565 | return 1024; | ||
2566 | return 1; | ||
2567 | } | ||
2568 | |||
2546 | #define SLM_BCLK_FREQS 5 | 2569 | #define SLM_BCLK_FREQS 5 |
2547 | double slm_freq_table[SLM_BCLK_FREQS] = { 83.3, 100.0, 133.3, 116.7, 80.0}; | 2570 | double slm_freq_table[SLM_BCLK_FREQS] = { 83.3, 100.0, 133.3, 116.7, 80.0}; |
2548 | 2571 | ||
@@ -2744,6 +2767,9 @@ void process_cpuid() | |||
2744 | } | 2767 | } |
2745 | } | 2768 | } |
2746 | 2769 | ||
2770 | if (has_aperf) | ||
2771 | aperf_mperf_multiplier = get_aperf_mperf_multiplier(family, model); | ||
2772 | |||
2747 | do_nhm_platform_info = do_nhm_cstates = do_smi = probe_nhm_msrs(family, model); | 2773 | do_nhm_platform_info = do_nhm_cstates = do_smi = probe_nhm_msrs(family, model); |
2748 | do_snb_cstates = has_snb_msrs(family, model); | 2774 | do_snb_cstates = has_snb_msrs(family, model); |
2749 | do_pc2 = do_snb_cstates && (pkg_cstate_limit >= PCL__2); | 2775 | do_pc2 = do_snb_cstates && (pkg_cstate_limit >= PCL__2); |
@@ -2762,6 +2788,9 @@ void process_cpuid() | |||
2762 | if (debug) | 2788 | if (debug) |
2763 | dump_cstate_pstate_config_info(); | 2789 | dump_cstate_pstate_config_info(); |
2764 | 2790 | ||
2791 | if (has_skl_msrs(family, model)) | ||
2792 | calculate_tsc_tweak(); | ||
2793 | |||
2765 | return; | 2794 | return; |
2766 | } | 2795 | } |
2767 | 2796 | ||
@@ -3090,7 +3119,7 @@ int get_and_dump_counters(void) | |||
3090 | } | 3119 | } |
3091 | 3120 | ||
3092 | void print_version() { | 3121 | void print_version() { |
3093 | fprintf(stderr, "turbostat version 4.7 17-June, 2015" | 3122 | fprintf(stderr, "turbostat version 4.8 26-Sep, 2015" |
3094 | " - Len Brown <lenb@kernel.org>\n"); | 3123 | " - Len Brown <lenb@kernel.org>\n"); |
3095 | } | 3124 | } |
3096 | 3125 | ||
diff --git a/tools/testing/selftests/membarrier/Makefile b/tools/testing/selftests/membarrier/Makefile index 877a50355d7f..a1a97085847d 100644 --- a/tools/testing/selftests/membarrier/Makefile +++ b/tools/testing/selftests/membarrier/Makefile | |||
@@ -1,11 +1,10 @@ | |||
1 | CFLAGS += -g -I../../../../usr/include/ | 1 | CFLAGS += -g -I../../../../usr/include/ |
2 | 2 | ||
3 | all: | ||
4 | $(CC) $(CFLAGS) membarrier_test.c -o membarrier_test | ||
5 | |||
6 | TEST_PROGS := membarrier_test | 3 | TEST_PROGS := membarrier_test |
7 | 4 | ||
5 | all: $(TEST_PROGS) | ||
6 | |||
8 | include ../lib.mk | 7 | include ../lib.mk |
9 | 8 | ||
10 | clean: | 9 | clean: |
11 | $(RM) membarrier_test | 10 | $(RM) $(TEST_PROGS) |
diff --git a/tools/testing/selftests/membarrier/membarrier_test.c b/tools/testing/selftests/membarrier/membarrier_test.c index dde312508007..535f0fef4d0b 100644 --- a/tools/testing/selftests/membarrier/membarrier_test.c +++ b/tools/testing/selftests/membarrier/membarrier_test.c | |||
@@ -1,9 +1,6 @@ | |||
1 | #define _GNU_SOURCE | 1 | #define _GNU_SOURCE |
2 | #define __EXPORTED_HEADERS__ | ||
3 | |||
4 | #include <linux/membarrier.h> | 2 | #include <linux/membarrier.h> |
5 | #include <asm-generic/unistd.h> | 3 | #include <syscall.h> |
6 | #include <sys/syscall.h> | ||
7 | #include <stdio.h> | 4 | #include <stdio.h> |
8 | #include <errno.h> | 5 | #include <errno.h> |
9 | #include <string.h> | 6 | #include <string.h> |
diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile index d36fab7d8ebd..3c53cac15de1 100644 --- a/tools/testing/selftests/vm/Makefile +++ b/tools/testing/selftests/vm/Makefile | |||
@@ -1,6 +1,6 @@ | |||
1 | # Makefile for vm selftests | 1 | # Makefile for vm selftests |
2 | 2 | ||
3 | CFLAGS = -Wall | 3 | CFLAGS = -Wall -I ../../../../usr/include $(EXTRA_CFLAGS) |
4 | BINARIES = compaction_test | 4 | BINARIES = compaction_test |
5 | BINARIES += hugepage-mmap | 5 | BINARIES += hugepage-mmap |
6 | BINARIES += hugepage-shm | 6 | BINARIES += hugepage-shm |
@@ -12,8 +12,11 @@ BINARIES += userfaultfd | |||
12 | all: $(BINARIES) | 12 | all: $(BINARIES) |
13 | %: %.c | 13 | %: %.c |
14 | $(CC) $(CFLAGS) -o $@ $^ -lrt | 14 | $(CC) $(CFLAGS) -o $@ $^ -lrt |
15 | userfaultfd: userfaultfd.c | 15 | userfaultfd: userfaultfd.c ../../../../usr/include/linux/kernel.h |
16 | $(CC) $(CFLAGS) -O2 -o $@ $^ -lpthread | 16 | $(CC) $(CFLAGS) -O2 -o $@ $< -lpthread |
17 | |||
18 | ../../../../usr/include/linux/kernel.h: | ||
19 | make -C ../../../.. headers_install | ||
17 | 20 | ||
18 | TEST_PROGS := run_vmtests | 21 | TEST_PROGS := run_vmtests |
19 | TEST_FILES := $(BINARIES) | 22 | TEST_FILES := $(BINARIES) |
diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c index 7c1d958857d2..d77ed41b2094 100644 --- a/tools/testing/selftests/vm/userfaultfd.c +++ b/tools/testing/selftests/vm/userfaultfd.c | |||
@@ -64,19 +64,9 @@ | |||
64 | #include <sys/syscall.h> | 64 | #include <sys/syscall.h> |
65 | #include <sys/ioctl.h> | 65 | #include <sys/ioctl.h> |
66 | #include <pthread.h> | 66 | #include <pthread.h> |
67 | #include "../../../../include/uapi/linux/userfaultfd.h" | 67 | #include <linux/userfaultfd.h> |
68 | 68 | ||
69 | #ifdef __x86_64__ | 69 | #ifdef __NR_userfaultfd |
70 | #define __NR_userfaultfd 323 | ||
71 | #elif defined(__i386__) | ||
72 | #define __NR_userfaultfd 374 | ||
73 | #elif defined(__powewrpc__) | ||
74 | #define __NR_userfaultfd 364 | ||
75 | #elif defined(__s390__) | ||
76 | #define __NR_userfaultfd 355 | ||
77 | #else | ||
78 | #error "missing __NR_userfaultfd definition" | ||
79 | #endif | ||
80 | 70 | ||
81 | static unsigned long nr_cpus, nr_pages, nr_pages_per_cpu, page_size; | 71 | static unsigned long nr_cpus, nr_pages, nr_pages_per_cpu, page_size; |
82 | 72 | ||
@@ -432,7 +422,7 @@ static int userfaultfd_stress(void) | |||
432 | struct uffdio_register uffdio_register; | 422 | struct uffdio_register uffdio_register; |
433 | struct uffdio_api uffdio_api; | 423 | struct uffdio_api uffdio_api; |
434 | unsigned long cpu; | 424 | unsigned long cpu; |
435 | int uffd_flags; | 425 | int uffd_flags, err; |
436 | unsigned long userfaults[nr_cpus]; | 426 | unsigned long userfaults[nr_cpus]; |
437 | 427 | ||
438 | if (posix_memalign(&area, page_size, nr_pages * page_size)) { | 428 | if (posix_memalign(&area, page_size, nr_pages * page_size)) { |
@@ -475,6 +465,14 @@ static int userfaultfd_stress(void) | |||
475 | *area_mutex(area_src, nr) = (pthread_mutex_t) | 465 | *area_mutex(area_src, nr) = (pthread_mutex_t) |
476 | PTHREAD_MUTEX_INITIALIZER; | 466 | PTHREAD_MUTEX_INITIALIZER; |
477 | count_verify[nr] = *area_count(area_src, nr) = 1; | 467 | count_verify[nr] = *area_count(area_src, nr) = 1; |
468 | /* | ||
469 | * In the transition between 255 to 256, powerpc will | ||
470 | * read out of order in my_bcmp and see both bytes as | ||
471 | * zero, so leave a placeholder below always non-zero | ||
472 | * after the count, to avoid my_bcmp to trigger false | ||
473 | * positives. | ||
474 | */ | ||
475 | *(area_count(area_src, nr) + 1) = 1; | ||
478 | } | 476 | } |
479 | 477 | ||
480 | pipefd = malloc(sizeof(int) * nr_cpus * 2); | 478 | pipefd = malloc(sizeof(int) * nr_cpus * 2); |
@@ -501,6 +499,7 @@ static int userfaultfd_stress(void) | |||
501 | pthread_attr_init(&attr); | 499 | pthread_attr_init(&attr); |
502 | pthread_attr_setstacksize(&attr, 16*1024*1024); | 500 | pthread_attr_setstacksize(&attr, 16*1024*1024); |
503 | 501 | ||
502 | err = 0; | ||
504 | while (bounces--) { | 503 | while (bounces--) { |
505 | unsigned long expected_ioctls; | 504 | unsigned long expected_ioctls; |
506 | 505 | ||
@@ -581,20 +580,13 @@ static int userfaultfd_stress(void) | |||
581 | /* verification */ | 580 | /* verification */ |
582 | if (bounces & BOUNCE_VERIFY) { | 581 | if (bounces & BOUNCE_VERIFY) { |
583 | for (nr = 0; nr < nr_pages; nr++) { | 582 | for (nr = 0; nr < nr_pages; nr++) { |
584 | if (my_bcmp(area_dst, | ||
585 | area_dst + nr * page_size, | ||
586 | sizeof(pthread_mutex_t))) { | ||
587 | fprintf(stderr, | ||
588 | "error mutex 2 %lu\n", | ||
589 | nr); | ||
590 | bounces = 0; | ||
591 | } | ||
592 | if (*area_count(area_dst, nr) != count_verify[nr]) { | 583 | if (*area_count(area_dst, nr) != count_verify[nr]) { |
593 | fprintf(stderr, | 584 | fprintf(stderr, |
594 | "error area_count %Lu %Lu %lu\n", | 585 | "error area_count %Lu %Lu %lu\n", |
595 | *area_count(area_src, nr), | 586 | *area_count(area_src, nr), |
596 | count_verify[nr], | 587 | count_verify[nr], |
597 | nr); | 588 | nr); |
589 | err = 1; | ||
598 | bounces = 0; | 590 | bounces = 0; |
599 | } | 591 | } |
600 | } | 592 | } |
@@ -611,7 +603,7 @@ static int userfaultfd_stress(void) | |||
611 | printf("\n"); | 603 | printf("\n"); |
612 | } | 604 | } |
613 | 605 | ||
614 | return 0; | 606 | return err; |
615 | } | 607 | } |
616 | 608 | ||
617 | int main(int argc, char **argv) | 609 | int main(int argc, char **argv) |
@@ -620,8 +612,8 @@ int main(int argc, char **argv) | |||
620 | fprintf(stderr, "Usage: <MiB> <bounces>\n"), exit(1); | 612 | fprintf(stderr, "Usage: <MiB> <bounces>\n"), exit(1); |
621 | nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); | 613 | nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); |
622 | page_size = sysconf(_SC_PAGE_SIZE); | 614 | page_size = sysconf(_SC_PAGE_SIZE); |
623 | if ((unsigned long) area_count(NULL, 0) + sizeof(unsigned long long) > | 615 | if ((unsigned long) area_count(NULL, 0) + sizeof(unsigned long long) * 2 |
624 | page_size) | 616 | > page_size) |
625 | fprintf(stderr, "Impossible to run this test\n"), exit(2); | 617 | fprintf(stderr, "Impossible to run this test\n"), exit(2); |
626 | nr_pages_per_cpu = atol(argv[1]) * 1024*1024 / page_size / | 618 | nr_pages_per_cpu = atol(argv[1]) * 1024*1024 / page_size / |
627 | nr_cpus; | 619 | nr_cpus; |
@@ -639,3 +631,15 @@ int main(int argc, char **argv) | |||
639 | nr_pages, nr_pages_per_cpu); | 631 | nr_pages, nr_pages_per_cpu); |
640 | return userfaultfd_stress(); | 632 | return userfaultfd_stress(); |
641 | } | 633 | } |
634 | |||
635 | #else /* __NR_userfaultfd */ | ||
636 | |||
637 | #warning "missing __NR_userfaultfd definition" | ||
638 | |||
639 | int main(void) | ||
640 | { | ||
641 | printf("skip: Skipping userfaultfd test (missing __NR_userfaultfd)\n"); | ||
642 | return 0; | ||
643 | } | ||
644 | |||
645 | #endif /* __NR_userfaultfd */ | ||