diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-10-06 11:05:36 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-10-06 11:05:36 -0400 |
commit | fe19159225d8516f3f57a5fe8f735c01684f0ddd (patch) | |
tree | 1a41faa5ef5139485f4afabd6bb9d3977c0a115b /tools | |
parent | c6e1e7b5b7f031910850ddaf7bfa65ba3b4843ea (diff) | |
parent | 95913d97914f44db2b81271c2e2ebd4d2ac2df83 (diff) |
Merge branch 'sched/urgent' into sched/core, to pick up fixes before applying new changes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools')
31 files changed, 252 insertions, 133 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/Makefile b/tools/testing/selftests/Makefile index 89b05e2222c9..cfe121353eec 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile | |||
@@ -16,12 +16,12 @@ TARGETS += powerpc | |||
16 | TARGETS += ptrace | 16 | TARGETS += ptrace |
17 | TARGETS += seccomp | 17 | TARGETS += seccomp |
18 | TARGETS += size | 18 | TARGETS += size |
19 | TARGETS += static_keys | ||
19 | TARGETS += sysctl | 20 | TARGETS += sysctl |
20 | ifneq (1, $(quicktest)) | 21 | ifneq (1, $(quicktest)) |
21 | TARGETS += timers | 22 | TARGETS += timers |
22 | endif | 23 | endif |
23 | TARGETS += user | 24 | TARGETS += user |
24 | TARGETS += jumplabel | ||
25 | TARGETS += vm | 25 | TARGETS += vm |
26 | TARGETS += x86 | 26 | TARGETS += x86 |
27 | TARGETS += zram | 27 | TARGETS += zram |
diff --git a/tools/testing/selftests/exec/Makefile b/tools/testing/selftests/exec/Makefile index 6b76bfdc847e..4e400eb83657 100644 --- a/tools/testing/selftests/exec/Makefile +++ b/tools/testing/selftests/exec/Makefile | |||
@@ -1,6 +1,6 @@ | |||
1 | CFLAGS = -Wall | 1 | CFLAGS = -Wall |
2 | BINARIES = execveat | 2 | BINARIES = execveat |
3 | DEPS = execveat.symlink execveat.denatured script | 3 | DEPS = execveat.symlink execveat.denatured script subdir |
4 | all: $(BINARIES) $(DEPS) | 4 | all: $(BINARIES) $(DEPS) |
5 | 5 | ||
6 | subdir: | 6 | subdir: |
@@ -22,7 +22,5 @@ TEST_FILES := $(DEPS) | |||
22 | 22 | ||
23 | include ../lib.mk | 23 | include ../lib.mk |
24 | 24 | ||
25 | override EMIT_TESTS := echo "mkdir -p subdir; (./execveat && echo \"selftests: execveat [PASS]\") || echo \"selftests: execveat [FAIL]\"" | ||
26 | |||
27 | clean: | 25 | clean: |
28 | rm -rf $(BINARIES) $(DEPS) subdir.moved execveat.moved xxxxx* | 26 | rm -rf $(BINARIES) $(DEPS) subdir.moved execveat.moved xxxxx* |
diff --git a/tools/testing/selftests/ftrace/Makefile b/tools/testing/selftests/ftrace/Makefile index 0acbeca47225..4e6ed13e7f66 100644 --- a/tools/testing/selftests/ftrace/Makefile +++ b/tools/testing/selftests/ftrace/Makefile | |||
@@ -1,7 +1,7 @@ | |||
1 | all: | 1 | all: |
2 | 2 | ||
3 | TEST_PROGS := ftracetest | 3 | TEST_PROGS := ftracetest |
4 | TEST_DIRS := test.d/ | 4 | TEST_DIRS := test.d |
5 | 5 | ||
6 | include ../lib.mk | 6 | include ../lib.mk |
7 | 7 | ||
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index 97f1c6742066..50a93f5f13d6 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk | |||
@@ -12,13 +12,10 @@ run_tests: all | |||
12 | $(RUN_TESTS) | 12 | $(RUN_TESTS) |
13 | 13 | ||
14 | define INSTALL_RULE | 14 | define INSTALL_RULE |
15 | @if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \ | 15 | @if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \ |
16 | mkdir -p $(INSTALL_PATH); \ | 16 | mkdir -p ${INSTALL_PATH}; \ |
17 | for TEST_DIR in $(TEST_DIRS); do \ | 17 | echo "rsync -a $(TEST_DIRS) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/"; \ |
18 | cp -r $$TEST_DIR $(INSTALL_PATH); \ | 18 | rsync -a $(TEST_DIRS) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/; \ |
19 | done; \ | ||
20 | echo "install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES)"; \ | ||
21 | install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES); \ | ||
22 | fi | 19 | fi |
23 | endef | 20 | endef |
24 | 21 | ||
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/mqueue/Makefile b/tools/testing/selftests/mqueue/Makefile index 0e3b41eb85cd..eebac29acbd9 100644 --- a/tools/testing/selftests/mqueue/Makefile +++ b/tools/testing/selftests/mqueue/Makefile | |||
@@ -1,8 +1,8 @@ | |||
1 | CFLAGS = -O2 | 1 | CFLAGS += -O2 |
2 | LDLIBS = -lrt -lpthread -lpopt | ||
3 | TEST_PROGS := mq_open_tests mq_perf_tests | ||
2 | 4 | ||
3 | all: | 5 | all: $(TEST_PROGS) |
4 | $(CC) $(CFLAGS) mq_open_tests.c -o mq_open_tests -lrt | ||
5 | $(CC) $(CFLAGS) -o mq_perf_tests mq_perf_tests.c -lrt -lpthread -lpopt | ||
6 | 6 | ||
7 | include ../lib.mk | 7 | include ../lib.mk |
8 | 8 | ||
@@ -11,8 +11,6 @@ override define RUN_TESTS | |||
11 | @./mq_perf_tests || echo "selftests: mq_perf_tests [FAIL]" | 11 | @./mq_perf_tests || echo "selftests: mq_perf_tests [FAIL]" |
12 | endef | 12 | endef |
13 | 13 | ||
14 | TEST_PROGS := mq_open_tests mq_perf_tests | ||
15 | |||
16 | override define EMIT_TESTS | 14 | override define EMIT_TESTS |
17 | echo "./mq_open_tests /test1 || echo \"selftests: mq_open_tests [FAIL]\"" | 15 | echo "./mq_open_tests /test1 || echo \"selftests: mq_open_tests [FAIL]\"" |
18 | echo "./mq_perf_tests || echo \"selftests: mq_perf_tests [FAIL]\"" | 16 | echo "./mq_perf_tests || echo \"selftests: mq_perf_tests [FAIL]\"" |
diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c index a004b4cce99e..770f47adf295 100644 --- a/tools/testing/selftests/seccomp/seccomp_bpf.c +++ b/tools/testing/selftests/seccomp/seccomp_bpf.c | |||
@@ -1210,6 +1210,10 @@ TEST_F(TRACE_poke, getpid_runs_normally) | |||
1210 | # define ARCH_REGS struct pt_regs | 1210 | # define ARCH_REGS struct pt_regs |
1211 | # define SYSCALL_NUM gpr[0] | 1211 | # define SYSCALL_NUM gpr[0] |
1212 | # define SYSCALL_RET gpr[3] | 1212 | # define SYSCALL_RET gpr[3] |
1213 | #elif defined(__s390__) | ||
1214 | # define ARCH_REGS s390_regs | ||
1215 | # define SYSCALL_NUM gprs[2] | ||
1216 | # define SYSCALL_RET gprs[2] | ||
1213 | #else | 1217 | #else |
1214 | # error "Do not know how to find your architecture's registers and syscalls" | 1218 | # error "Do not know how to find your architecture's registers and syscalls" |
1215 | #endif | 1219 | #endif |
@@ -1243,7 +1247,8 @@ void change_syscall(struct __test_metadata *_metadata, | |||
1243 | ret = ptrace(PTRACE_GETREGSET, tracee, NT_PRSTATUS, &iov); | 1247 | ret = ptrace(PTRACE_GETREGSET, tracee, NT_PRSTATUS, &iov); |
1244 | EXPECT_EQ(0, ret); | 1248 | EXPECT_EQ(0, ret); |
1245 | 1249 | ||
1246 | #if defined(__x86_64__) || defined(__i386__) || defined(__aarch64__) || defined(__powerpc__) | 1250 | #if defined(__x86_64__) || defined(__i386__) || defined(__aarch64__) || \ |
1251 | defined(__powerpc__) || defined(__s390__) | ||
1247 | { | 1252 | { |
1248 | regs.SYSCALL_NUM = syscall; | 1253 | regs.SYSCALL_NUM = syscall; |
1249 | } | 1254 | } |
@@ -1281,17 +1286,21 @@ void tracer_syscall(struct __test_metadata *_metadata, pid_t tracee, | |||
1281 | ret = ptrace(PTRACE_GETEVENTMSG, tracee, NULL, &msg); | 1286 | ret = ptrace(PTRACE_GETEVENTMSG, tracee, NULL, &msg); |
1282 | EXPECT_EQ(0, ret); | 1287 | EXPECT_EQ(0, ret); |
1283 | 1288 | ||
1289 | /* Validate and take action on expected syscalls. */ | ||
1284 | switch (msg) { | 1290 | switch (msg) { |
1285 | case 0x1002: | 1291 | case 0x1002: |
1286 | /* change getpid to getppid. */ | 1292 | /* change getpid to getppid. */ |
1293 | EXPECT_EQ(__NR_getpid, get_syscall(_metadata, tracee)); | ||
1287 | change_syscall(_metadata, tracee, __NR_getppid); | 1294 | change_syscall(_metadata, tracee, __NR_getppid); |
1288 | break; | 1295 | break; |
1289 | case 0x1003: | 1296 | case 0x1003: |
1290 | /* skip gettid. */ | 1297 | /* skip gettid. */ |
1298 | EXPECT_EQ(__NR_gettid, get_syscall(_metadata, tracee)); | ||
1291 | change_syscall(_metadata, tracee, -1); | 1299 | change_syscall(_metadata, tracee, -1); |
1292 | break; | 1300 | break; |
1293 | case 0x1004: | 1301 | case 0x1004: |
1294 | /* do nothing (allow getppid) */ | 1302 | /* do nothing (allow getppid) */ |
1303 | EXPECT_EQ(__NR_getppid, get_syscall(_metadata, tracee)); | ||
1295 | break; | 1304 | break; |
1296 | default: | 1305 | default: |
1297 | EXPECT_EQ(0, msg) { | 1306 | EXPECT_EQ(0, msg) { |
@@ -1409,6 +1418,8 @@ TEST_F(TRACE_syscall, syscall_dropped) | |||
1409 | # define __NR_seccomp 277 | 1418 | # define __NR_seccomp 277 |
1410 | # elif defined(__powerpc__) | 1419 | # elif defined(__powerpc__) |
1411 | # define __NR_seccomp 358 | 1420 | # define __NR_seccomp 358 |
1421 | # elif defined(__s390__) | ||
1422 | # define __NR_seccomp 348 | ||
1412 | # else | 1423 | # else |
1413 | # warning "seccomp syscall number unknown for this architecture" | 1424 | # warning "seccomp syscall number unknown for this architecture" |
1414 | # define __NR_seccomp 0xffff | 1425 | # define __NR_seccomp 0xffff |
@@ -1453,6 +1464,9 @@ TEST(seccomp_syscall) | |||
1453 | 1464 | ||
1454 | /* Reject insane operation. */ | 1465 | /* Reject insane operation. */ |
1455 | ret = seccomp(-1, 0, &prog); | 1466 | ret = seccomp(-1, 0, &prog); |
1467 | ASSERT_NE(ENOSYS, errno) { | ||
1468 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1469 | } | ||
1456 | EXPECT_EQ(EINVAL, errno) { | 1470 | EXPECT_EQ(EINVAL, errno) { |
1457 | TH_LOG("Did not reject crazy op value!"); | 1471 | TH_LOG("Did not reject crazy op value!"); |
1458 | } | 1472 | } |
@@ -1501,6 +1515,9 @@ TEST(seccomp_syscall_mode_lock) | |||
1501 | } | 1515 | } |
1502 | 1516 | ||
1503 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &prog); | 1517 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &prog); |
1518 | ASSERT_NE(ENOSYS, errno) { | ||
1519 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1520 | } | ||
1504 | EXPECT_EQ(0, ret) { | 1521 | EXPECT_EQ(0, ret) { |
1505 | TH_LOG("Could not install filter!"); | 1522 | TH_LOG("Could not install filter!"); |
1506 | } | 1523 | } |
@@ -1535,6 +1552,9 @@ TEST(TSYNC_first) | |||
1535 | 1552 | ||
1536 | ret = seccomp(SECCOMP_SET_MODE_FILTER, SECCOMP_FLAG_FILTER_TSYNC, | 1553 | ret = seccomp(SECCOMP_SET_MODE_FILTER, SECCOMP_FLAG_FILTER_TSYNC, |
1537 | &prog); | 1554 | &prog); |
1555 | ASSERT_NE(ENOSYS, errno) { | ||
1556 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1557 | } | ||
1538 | EXPECT_EQ(0, ret) { | 1558 | EXPECT_EQ(0, ret) { |
1539 | TH_LOG("Could not install initial filter with TSYNC!"); | 1559 | TH_LOG("Could not install initial filter with TSYNC!"); |
1540 | } | 1560 | } |
@@ -1694,6 +1714,9 @@ TEST_F(TSYNC, siblings_fail_prctl) | |||
1694 | 1714 | ||
1695 | /* Check prctl failure detection by requesting sib 0 diverge. */ | 1715 | /* Check prctl failure detection by requesting sib 0 diverge. */ |
1696 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &prog); | 1716 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &prog); |
1717 | ASSERT_NE(ENOSYS, errno) { | ||
1718 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1719 | } | ||
1697 | ASSERT_EQ(0, ret) { | 1720 | ASSERT_EQ(0, ret) { |
1698 | TH_LOG("setting filter failed"); | 1721 | TH_LOG("setting filter failed"); |
1699 | } | 1722 | } |
@@ -1731,6 +1754,9 @@ TEST_F(TSYNC, two_siblings_with_ancestor) | |||
1731 | } | 1754 | } |
1732 | 1755 | ||
1733 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); | 1756 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); |
1757 | ASSERT_NE(ENOSYS, errno) { | ||
1758 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1759 | } | ||
1734 | ASSERT_EQ(0, ret) { | 1760 | ASSERT_EQ(0, ret) { |
1735 | TH_LOG("Kernel does not support SECCOMP_SET_MODE_FILTER!"); | 1761 | TH_LOG("Kernel does not support SECCOMP_SET_MODE_FILTER!"); |
1736 | } | 1762 | } |
@@ -1805,6 +1831,9 @@ TEST_F(TSYNC, two_siblings_with_no_filter) | |||
1805 | 1831 | ||
1806 | ret = seccomp(SECCOMP_SET_MODE_FILTER, SECCOMP_FLAG_FILTER_TSYNC, | 1832 | ret = seccomp(SECCOMP_SET_MODE_FILTER, SECCOMP_FLAG_FILTER_TSYNC, |
1807 | &self->apply_prog); | 1833 | &self->apply_prog); |
1834 | ASSERT_NE(ENOSYS, errno) { | ||
1835 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1836 | } | ||
1808 | ASSERT_EQ(0, ret) { | 1837 | ASSERT_EQ(0, ret) { |
1809 | TH_LOG("Could install filter on all threads!"); | 1838 | TH_LOG("Could install filter on all threads!"); |
1810 | } | 1839 | } |
@@ -1833,6 +1862,9 @@ TEST_F(TSYNC, two_siblings_with_one_divergence) | |||
1833 | } | 1862 | } |
1834 | 1863 | ||
1835 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); | 1864 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); |
1865 | ASSERT_NE(ENOSYS, errno) { | ||
1866 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1867 | } | ||
1836 | ASSERT_EQ(0, ret) { | 1868 | ASSERT_EQ(0, ret) { |
1837 | TH_LOG("Kernel does not support SECCOMP_SET_MODE_FILTER!"); | 1869 | TH_LOG("Kernel does not support SECCOMP_SET_MODE_FILTER!"); |
1838 | } | 1870 | } |
@@ -1890,6 +1922,9 @@ TEST_F(TSYNC, two_siblings_not_under_filter) | |||
1890 | } | 1922 | } |
1891 | 1923 | ||
1892 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); | 1924 | ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); |
1925 | ASSERT_NE(ENOSYS, errno) { | ||
1926 | TH_LOG("Kernel does not support seccomp syscall!"); | ||
1927 | } | ||
1893 | ASSERT_EQ(0, ret) { | 1928 | ASSERT_EQ(0, ret) { |
1894 | TH_LOG("Kernel does not support SECCOMP_SET_MODE_FILTER!"); | 1929 | TH_LOG("Kernel does not support SECCOMP_SET_MODE_FILTER!"); |
1895 | } | 1930 | } |
diff --git a/tools/testing/selftests/seccomp/test_harness.h b/tools/testing/selftests/seccomp/test_harness.h index 977a6afc4489..fb2841601f2f 100644 --- a/tools/testing/selftests/seccomp/test_harness.h +++ b/tools/testing/selftests/seccomp/test_harness.h | |||
@@ -370,11 +370,8 @@ | |||
370 | __typeof__(_expected) __exp = (_expected); \ | 370 | __typeof__(_expected) __exp = (_expected); \ |
371 | __typeof__(_seen) __seen = (_seen); \ | 371 | __typeof__(_seen) __seen = (_seen); \ |
372 | if (!(__exp _t __seen)) { \ | 372 | if (!(__exp _t __seen)) { \ |
373 | unsigned long long __exp_print = 0; \ | 373 | unsigned long long __exp_print = (unsigned long long)__exp; \ |
374 | unsigned long long __seen_print = 0; \ | 374 | unsigned long long __seen_print = (unsigned long long)__seen; \ |
375 | /* Avoid casting complaints the scariest way we can. */ \ | ||
376 | memcpy(&__exp_print, &__exp, sizeof(__exp)); \ | ||
377 | memcpy(&__seen_print, &__seen, sizeof(__seen)); \ | ||
378 | __TH_LOG("Expected %s (%llu) %s %s (%llu)", \ | 375 | __TH_LOG("Expected %s (%llu) %s %s (%llu)", \ |
379 | #_expected, __exp_print, #_t, \ | 376 | #_expected, __exp_print, #_t, \ |
380 | #_seen, __seen_print); \ | 377 | #_seen, __seen_print); \ |
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 2c7cca6f26a4..d77ed41b2094 100644 --- a/tools/testing/selftests/vm/userfaultfd.c +++ b/tools/testing/selftests/vm/userfaultfd.c | |||
@@ -64,17 +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 | #else | ||
76 | #error "missing __NR_userfaultfd definition" | ||
77 | #endif | ||
78 | 70 | ||
79 | 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; |
80 | 72 | ||
@@ -430,7 +422,7 @@ static int userfaultfd_stress(void) | |||
430 | struct uffdio_register uffdio_register; | 422 | struct uffdio_register uffdio_register; |
431 | struct uffdio_api uffdio_api; | 423 | struct uffdio_api uffdio_api; |
432 | unsigned long cpu; | 424 | unsigned long cpu; |
433 | int uffd_flags; | 425 | int uffd_flags, err; |
434 | unsigned long userfaults[nr_cpus]; | 426 | unsigned long userfaults[nr_cpus]; |
435 | 427 | ||
436 | if (posix_memalign(&area, page_size, nr_pages * page_size)) { | 428 | if (posix_memalign(&area, page_size, nr_pages * page_size)) { |
@@ -473,6 +465,14 @@ static int userfaultfd_stress(void) | |||
473 | *area_mutex(area_src, nr) = (pthread_mutex_t) | 465 | *area_mutex(area_src, nr) = (pthread_mutex_t) |
474 | PTHREAD_MUTEX_INITIALIZER; | 466 | PTHREAD_MUTEX_INITIALIZER; |
475 | 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; | ||
476 | } | 476 | } |
477 | 477 | ||
478 | pipefd = malloc(sizeof(int) * nr_cpus * 2); | 478 | pipefd = malloc(sizeof(int) * nr_cpus * 2); |
@@ -499,6 +499,7 @@ static int userfaultfd_stress(void) | |||
499 | pthread_attr_init(&attr); | 499 | pthread_attr_init(&attr); |
500 | pthread_attr_setstacksize(&attr, 16*1024*1024); | 500 | pthread_attr_setstacksize(&attr, 16*1024*1024); |
501 | 501 | ||
502 | err = 0; | ||
502 | while (bounces--) { | 503 | while (bounces--) { |
503 | unsigned long expected_ioctls; | 504 | unsigned long expected_ioctls; |
504 | 505 | ||
@@ -579,20 +580,13 @@ static int userfaultfd_stress(void) | |||
579 | /* verification */ | 580 | /* verification */ |
580 | if (bounces & BOUNCE_VERIFY) { | 581 | if (bounces & BOUNCE_VERIFY) { |
581 | for (nr = 0; nr < nr_pages; nr++) { | 582 | for (nr = 0; nr < nr_pages; nr++) { |
582 | if (my_bcmp(area_dst, | ||
583 | area_dst + nr * page_size, | ||
584 | sizeof(pthread_mutex_t))) { | ||
585 | fprintf(stderr, | ||
586 | "error mutex 2 %lu\n", | ||
587 | nr); | ||
588 | bounces = 0; | ||
589 | } | ||
590 | if (*area_count(area_dst, nr) != count_verify[nr]) { | 583 | if (*area_count(area_dst, nr) != count_verify[nr]) { |
591 | fprintf(stderr, | 584 | fprintf(stderr, |
592 | "error area_count %Lu %Lu %lu\n", | 585 | "error area_count %Lu %Lu %lu\n", |
593 | *area_count(area_src, nr), | 586 | *area_count(area_src, nr), |
594 | count_verify[nr], | 587 | count_verify[nr], |
595 | nr); | 588 | nr); |
589 | err = 1; | ||
596 | bounces = 0; | 590 | bounces = 0; |
597 | } | 591 | } |
598 | } | 592 | } |
@@ -609,7 +603,7 @@ static int userfaultfd_stress(void) | |||
609 | printf("\n"); | 603 | printf("\n"); |
610 | } | 604 | } |
611 | 605 | ||
612 | return 0; | 606 | return err; |
613 | } | 607 | } |
614 | 608 | ||
615 | int main(int argc, char **argv) | 609 | int main(int argc, char **argv) |
@@ -618,8 +612,8 @@ int main(int argc, char **argv) | |||
618 | fprintf(stderr, "Usage: <MiB> <bounces>\n"), exit(1); | 612 | fprintf(stderr, "Usage: <MiB> <bounces>\n"), exit(1); |
619 | nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); | 613 | nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); |
620 | page_size = sysconf(_SC_PAGE_SIZE); | 614 | page_size = sysconf(_SC_PAGE_SIZE); |
621 | if ((unsigned long) area_count(NULL, 0) + sizeof(unsigned long long) > | 615 | if ((unsigned long) area_count(NULL, 0) + sizeof(unsigned long long) * 2 |
622 | page_size) | 616 | > page_size) |
623 | fprintf(stderr, "Impossible to run this test\n"), exit(2); | 617 | fprintf(stderr, "Impossible to run this test\n"), exit(2); |
624 | nr_pages_per_cpu = atol(argv[1]) * 1024*1024 / page_size / | 618 | nr_pages_per_cpu = atol(argv[1]) * 1024*1024 / page_size / |
625 | nr_cpus; | 619 | nr_cpus; |
@@ -637,3 +631,15 @@ int main(int argc, char **argv) | |||
637 | nr_pages, nr_pages_per_cpu); | 631 | nr_pages, nr_pages_per_cpu); |
638 | return userfaultfd_stress(); | 632 | return userfaultfd_stress(); |
639 | } | 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 */ | ||
diff --git a/tools/testing/selftests/zram/zram.sh b/tools/testing/selftests/zram/zram.sh index 20de9a761269..683a292e3290 100755 --- a/tools/testing/selftests/zram/zram.sh +++ b/tools/testing/selftests/zram/zram.sh | |||
@@ -1,15 +1,7 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | TCID="zram.sh" | 2 | TCID="zram.sh" |
3 | 3 | ||
4 | check_prereqs() | 4 | . ./zram_lib.sh |
5 | { | ||
6 | local msg="skip all tests:" | ||
7 | |||
8 | if [ $UID != 0 ]; then | ||
9 | echo $msg must be run as root >&2 | ||
10 | exit 0 | ||
11 | fi | ||
12 | } | ||
13 | 5 | ||
14 | run_zram () { | 6 | run_zram () { |
15 | echo "--------------------" | 7 | echo "--------------------" |
diff --git a/tools/testing/selftests/zram/zram_lib.sh b/tools/testing/selftests/zram/zram_lib.sh index 424e68ed1487..f6a9c73e7a44 100755 --- a/tools/testing/selftests/zram/zram_lib.sh +++ b/tools/testing/selftests/zram/zram_lib.sh | |||
@@ -23,8 +23,9 @@ trap INT | |||
23 | check_prereqs() | 23 | check_prereqs() |
24 | { | 24 | { |
25 | local msg="skip all tests:" | 25 | local msg="skip all tests:" |
26 | local uid=$(id -u) | ||
26 | 27 | ||
27 | if [ $UID != 0 ]; then | 28 | if [ $uid -ne 0 ]; then |
28 | echo $msg must be run as root >&2 | 29 | echo $msg must be run as root >&2 |
29 | exit 0 | 30 | exit 0 |
30 | fi | 31 | fi |
diff --git a/tools/virtio/Makefile b/tools/virtio/Makefile index 505ad51b3b51..39c89a5ea990 100644 --- a/tools/virtio/Makefile +++ b/tools/virtio/Makefile | |||
@@ -6,7 +6,7 @@ vringh_test: vringh_test.o vringh.o virtio_ring.o | |||
6 | CFLAGS += -g -O2 -Werror -Wall -I. -I../include/ -I ../../usr/include/ -Wno-pointer-sign -fno-strict-overflow -fno-strict-aliasing -fno-common -MMD -U_FORTIFY_SOURCE | 6 | CFLAGS += -g -O2 -Werror -Wall -I. -I../include/ -I ../../usr/include/ -Wno-pointer-sign -fno-strict-overflow -fno-strict-aliasing -fno-common -MMD -U_FORTIFY_SOURCE |
7 | vpath %.c ../../drivers/virtio ../../drivers/vhost | 7 | vpath %.c ../../drivers/virtio ../../drivers/vhost |
8 | mod: | 8 | mod: |
9 | ${MAKE} -C `pwd`/../.. M=`pwd`/vhost_test | 9 | ${MAKE} -C `pwd`/../.. M=`pwd`/vhost_test V=${V} |
10 | .PHONY: all test mod clean | 10 | .PHONY: all test mod clean |
11 | clean: | 11 | clean: |
12 | ${RM} *.o vringh_test virtio_test vhost_test/*.o vhost_test/.*.cmd \ | 12 | ${RM} *.o vringh_test virtio_test vhost_test/*.o vhost_test/.*.cmd \ |
diff --git a/tools/virtio/asm/barrier.h b/tools/virtio/asm/barrier.h index aff61e13306c..26b7926bda88 100644 --- a/tools/virtio/asm/barrier.h +++ b/tools/virtio/asm/barrier.h | |||
@@ -3,6 +3,8 @@ | |||
3 | #define mb() __sync_synchronize() | 3 | #define mb() __sync_synchronize() |
4 | 4 | ||
5 | #define smp_mb() mb() | 5 | #define smp_mb() mb() |
6 | # define dma_rmb() barrier() | ||
7 | # define dma_wmb() barrier() | ||
6 | # define smp_rmb() barrier() | 8 | # define smp_rmb() barrier() |
7 | # define smp_wmb() barrier() | 9 | # define smp_wmb() barrier() |
8 | /* Weak barriers should be used. If not - it's a bug */ | 10 | /* Weak barriers should be used. If not - it's a bug */ |
diff --git a/tools/virtio/linux/export.h b/tools/virtio/linux/export.h new file mode 100644 index 000000000000..416875e29254 --- /dev/null +++ b/tools/virtio/linux/export.h | |||
@@ -0,0 +1,3 @@ | |||
1 | #define EXPORT_SYMBOL_GPL(sym) extern typeof(sym) sym | ||
2 | #define EXPORT_SYMBOL(sym) extern typeof(sym) sym | ||
3 | |||
diff --git a/tools/virtio/linux/kernel.h b/tools/virtio/linux/kernel.h index 1e8ce6979c1e..0a3da64638ce 100644 --- a/tools/virtio/linux/kernel.h +++ b/tools/virtio/linux/kernel.h | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | typedef unsigned long long dma_addr_t; | 23 | typedef unsigned long long dma_addr_t; |
24 | typedef size_t __kernel_size_t; | 24 | typedef size_t __kernel_size_t; |
25 | typedef unsigned int __wsum; | ||
25 | 26 | ||
26 | struct page { | 27 | struct page { |
27 | unsigned long long dummy; | 28 | unsigned long long dummy; |
@@ -47,6 +48,13 @@ static inline void *kmalloc(size_t s, gfp_t gfp) | |||
47 | return __kmalloc_fake; | 48 | return __kmalloc_fake; |
48 | return malloc(s); | 49 | return malloc(s); |
49 | } | 50 | } |
51 | static inline void *kzalloc(size_t s, gfp_t gfp) | ||
52 | { | ||
53 | void *p = kmalloc(s, gfp); | ||
54 | |||
55 | memset(p, 0, s); | ||
56 | return p; | ||
57 | } | ||
50 | 58 | ||
51 | static inline void kfree(void *p) | 59 | static inline void kfree(void *p) |
52 | { | 60 | { |