diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/include/uapi/linux/bpf_perf_event.h | 18 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 2 | ||||
-rw-r--r-- | tools/testing/selftests/bpf/Makefile | 19 | ||||
-rw-r--r-- | tools/testing/selftests/bpf/test_maps.c | 29 | ||||
-rw-r--r-- | tools/testing/selftests/bpf/test_verifier.c | 4 | ||||
-rw-r--r-- | tools/testing/selftests/powerpc/include/vsx_asm.h | 48 |
6 files changed, 84 insertions, 36 deletions
diff --git a/tools/include/uapi/linux/bpf_perf_event.h b/tools/include/uapi/linux/bpf_perf_event.h new file mode 100644 index 000000000000..067427259820 --- /dev/null +++ b/tools/include/uapi/linux/bpf_perf_event.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* Copyright (c) 2016 Facebook | ||
2 | * | ||
3 | * This program is free software; you can redistribute it and/or | ||
4 | * modify it under the terms of version 2 of the GNU General Public | ||
5 | * License as published by the Free Software Foundation. | ||
6 | */ | ||
7 | #ifndef _UAPI__LINUX_BPF_PERF_EVENT_H__ | ||
8 | #define _UAPI__LINUX_BPF_PERF_EVENT_H__ | ||
9 | |||
10 | #include <linux/types.h> | ||
11 | #include <linux/ptrace.h> | ||
12 | |||
13 | struct bpf_perf_event_data { | ||
14 | struct pt_regs regs; | ||
15 | __u64 sample_period; | ||
16 | }; | ||
17 | |||
18 | #endif /* _UAPI__LINUX_BPF_PERF_EVENT_H__ */ | ||
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 70e389bc4af7..9b4d8ba22fed 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -202,7 +202,7 @@ void symbols__fixup_end(struct rb_root *symbols) | |||
202 | 202 | ||
203 | /* Last entry */ | 203 | /* Last entry */ |
204 | if (curr->end == curr->start) | 204 | if (curr->end == curr->start) |
205 | curr->end = roundup(curr->start, 4096); | 205 | curr->end = roundup(curr->start, 4096) + 4096; |
206 | } | 206 | } |
207 | 207 | ||
208 | void __map_groups__fixup_end(struct map_groups *mg, enum map_type type) | 208 | void __map_groups__fixup_end(struct map_groups *mg, enum map_type type) |
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index 4b498265dae6..6a1ad58cb66f 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile | |||
@@ -1,20 +1,23 @@ | |||
1 | LIBDIR := ../../../lib | 1 | LIBDIR := ../../../lib |
2 | BPFOBJ := $(LIBDIR)/bpf/bpf.o | 2 | BPFDIR := $(LIBDIR)/bpf |
3 | 3 | ||
4 | CFLAGS += -Wall -O2 -lcap -I../../../include/uapi -I$(LIBDIR) | 4 | CFLAGS += -Wall -O2 -I../../../include/uapi -I$(LIBDIR) |
5 | LDLIBS += -lcap | ||
5 | 6 | ||
6 | TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map | 7 | TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map |
7 | 8 | ||
8 | TEST_PROGS := test_kmod.sh | 9 | TEST_PROGS := test_kmod.sh |
9 | 10 | ||
10 | .PHONY: all clean force | 11 | include ../lib.mk |
12 | |||
13 | BPFOBJ := $(OUTPUT)/bpf.o | ||
14 | |||
15 | $(TEST_GEN_PROGS): $(BPFOBJ) | ||
16 | |||
17 | .PHONY: force | ||
11 | 18 | ||
12 | # force a rebuild of BPFOBJ when its dependencies are updated | 19 | # force a rebuild of BPFOBJ when its dependencies are updated |
13 | force: | 20 | force: |
14 | 21 | ||
15 | $(BPFOBJ): force | 22 | $(BPFOBJ): force |
16 | $(MAKE) -C $(dir $(BPFOBJ)) | 23 | $(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ |
17 | |||
18 | $(test_objs): $(BPFOBJ) | ||
19 | |||
20 | include ../lib.mk | ||
diff --git a/tools/testing/selftests/bpf/test_maps.c b/tools/testing/selftests/bpf/test_maps.c index cada17ac00b8..a0aa2009b0e0 100644 --- a/tools/testing/selftests/bpf/test_maps.c +++ b/tools/testing/selftests/bpf/test_maps.c | |||
@@ -80,8 +80,9 @@ static void test_hashmap(int task, void *data) | |||
80 | assert(bpf_map_update_elem(fd, &key, &value, BPF_EXIST) == 0); | 80 | assert(bpf_map_update_elem(fd, &key, &value, BPF_EXIST) == 0); |
81 | key = 2; | 81 | key = 2; |
82 | assert(bpf_map_update_elem(fd, &key, &value, BPF_ANY) == 0); | 82 | assert(bpf_map_update_elem(fd, &key, &value, BPF_ANY) == 0); |
83 | key = 1; | 83 | key = 3; |
84 | assert(bpf_map_update_elem(fd, &key, &value, BPF_ANY) == 0); | 84 | assert(bpf_map_update_elem(fd, &key, &value, BPF_NOEXIST) == -1 && |
85 | errno == E2BIG); | ||
85 | 86 | ||
86 | /* Check that key = 0 doesn't exist. */ | 87 | /* Check that key = 0 doesn't exist. */ |
87 | key = 0; | 88 | key = 0; |
@@ -110,6 +111,24 @@ static void test_hashmap(int task, void *data) | |||
110 | close(fd); | 111 | close(fd); |
111 | } | 112 | } |
112 | 113 | ||
114 | static void test_hashmap_sizes(int task, void *data) | ||
115 | { | ||
116 | int fd, i, j; | ||
117 | |||
118 | for (i = 1; i <= 512; i <<= 1) | ||
119 | for (j = 1; j <= 1 << 18; j <<= 1) { | ||
120 | fd = bpf_create_map(BPF_MAP_TYPE_HASH, i, j, | ||
121 | 2, map_flags); | ||
122 | if (fd < 0) { | ||
123 | printf("Failed to create hashmap key=%d value=%d '%s'\n", | ||
124 | i, j, strerror(errno)); | ||
125 | exit(1); | ||
126 | } | ||
127 | close(fd); | ||
128 | usleep(10); /* give kernel time to destroy */ | ||
129 | } | ||
130 | } | ||
131 | |||
113 | static void test_hashmap_percpu(int task, void *data) | 132 | static void test_hashmap_percpu(int task, void *data) |
114 | { | 133 | { |
115 | unsigned int nr_cpus = bpf_num_possible_cpus(); | 134 | unsigned int nr_cpus = bpf_num_possible_cpus(); |
@@ -317,7 +336,10 @@ static void test_arraymap_percpu(int task, void *data) | |||
317 | static void test_arraymap_percpu_many_keys(void) | 336 | static void test_arraymap_percpu_many_keys(void) |
318 | { | 337 | { |
319 | unsigned int nr_cpus = bpf_num_possible_cpus(); | 338 | unsigned int nr_cpus = bpf_num_possible_cpus(); |
320 | unsigned int nr_keys = 20000; | 339 | /* nr_keys is not too large otherwise the test stresses percpu |
340 | * allocator more than anything else | ||
341 | */ | ||
342 | unsigned int nr_keys = 2000; | ||
321 | long values[nr_cpus]; | 343 | long values[nr_cpus]; |
322 | int key, fd, i; | 344 | int key, fd, i; |
323 | 345 | ||
@@ -419,6 +441,7 @@ static void test_map_stress(void) | |||
419 | { | 441 | { |
420 | run_parallel(100, test_hashmap, NULL); | 442 | run_parallel(100, test_hashmap, NULL); |
421 | run_parallel(100, test_hashmap_percpu, NULL); | 443 | run_parallel(100, test_hashmap_percpu, NULL); |
444 | run_parallel(100, test_hashmap_sizes, NULL); | ||
422 | 445 | ||
423 | run_parallel(100, test_arraymap, NULL); | 446 | run_parallel(100, test_arraymap, NULL); |
424 | run_parallel(100, test_arraymap_percpu, NULL); | 447 | run_parallel(100, test_arraymap_percpu, NULL); |
diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index e1f5b9eea1e8..d1555e4240c0 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c | |||
@@ -8,6 +8,8 @@ | |||
8 | * License as published by the Free Software Foundation. | 8 | * License as published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <asm/types.h> | ||
12 | #include <linux/types.h> | ||
11 | #include <stdint.h> | 13 | #include <stdint.h> |
12 | #include <stdio.h> | 14 | #include <stdio.h> |
13 | #include <stdlib.h> | 15 | #include <stdlib.h> |
@@ -4583,10 +4585,12 @@ static bool is_admin(void) | |||
4583 | cap_flag_value_t sysadmin = CAP_CLEAR; | 4585 | cap_flag_value_t sysadmin = CAP_CLEAR; |
4584 | const cap_value_t cap_val = CAP_SYS_ADMIN; | 4586 | const cap_value_t cap_val = CAP_SYS_ADMIN; |
4585 | 4587 | ||
4588 | #ifdef CAP_IS_SUPPORTED | ||
4586 | if (!CAP_IS_SUPPORTED(CAP_SETFCAP)) { | 4589 | if (!CAP_IS_SUPPORTED(CAP_SETFCAP)) { |
4587 | perror("cap_get_flag"); | 4590 | perror("cap_get_flag"); |
4588 | return false; | 4591 | return false; |
4589 | } | 4592 | } |
4593 | #endif | ||
4590 | caps = cap_get_proc(); | 4594 | caps = cap_get_proc(); |
4591 | if (!caps) { | 4595 | if (!caps) { |
4592 | perror("cap_get_proc"); | 4596 | perror("cap_get_proc"); |
diff --git a/tools/testing/selftests/powerpc/include/vsx_asm.h b/tools/testing/selftests/powerpc/include/vsx_asm.h index d828bfb6ef2d..54064ced9e95 100644 --- a/tools/testing/selftests/powerpc/include/vsx_asm.h +++ b/tools/testing/selftests/powerpc/include/vsx_asm.h | |||
@@ -16,56 +16,56 @@ | |||
16 | */ | 16 | */ |
17 | FUNC_START(load_vsx) | 17 | FUNC_START(load_vsx) |
18 | li r5,0 | 18 | li r5,0 |
19 | lxvx vs20,r5,r3 | 19 | lxvd2x vs20,r5,r3 |
20 | addi r5,r5,16 | 20 | addi r5,r5,16 |
21 | lxvx vs21,r5,r3 | 21 | lxvd2x vs21,r5,r3 |
22 | addi r5,r5,16 | 22 | addi r5,r5,16 |
23 | lxvx vs22,r5,r3 | 23 | lxvd2x vs22,r5,r3 |
24 | addi r5,r5,16 | 24 | addi r5,r5,16 |
25 | lxvx vs23,r5,r3 | 25 | lxvd2x vs23,r5,r3 |
26 | addi r5,r5,16 | 26 | addi r5,r5,16 |
27 | lxvx vs24,r5,r3 | 27 | lxvd2x vs24,r5,r3 |
28 | addi r5,r5,16 | 28 | addi r5,r5,16 |
29 | lxvx vs25,r5,r3 | 29 | lxvd2x vs25,r5,r3 |
30 | addi r5,r5,16 | 30 | addi r5,r5,16 |
31 | lxvx vs26,r5,r3 | 31 | lxvd2x vs26,r5,r3 |
32 | addi r5,r5,16 | 32 | addi r5,r5,16 |
33 | lxvx vs27,r5,r3 | 33 | lxvd2x vs27,r5,r3 |
34 | addi r5,r5,16 | 34 | addi r5,r5,16 |
35 | lxvx vs28,r5,r3 | 35 | lxvd2x vs28,r5,r3 |
36 | addi r5,r5,16 | 36 | addi r5,r5,16 |
37 | lxvx vs29,r5,r3 | 37 | lxvd2x vs29,r5,r3 |
38 | addi r5,r5,16 | 38 | addi r5,r5,16 |
39 | lxvx vs30,r5,r3 | 39 | lxvd2x vs30,r5,r3 |
40 | addi r5,r5,16 | 40 | addi r5,r5,16 |
41 | lxvx vs31,r5,r3 | 41 | lxvd2x vs31,r5,r3 |
42 | blr | 42 | blr |
43 | FUNC_END(load_vsx) | 43 | FUNC_END(load_vsx) |
44 | 44 | ||
45 | FUNC_START(store_vsx) | 45 | FUNC_START(store_vsx) |
46 | li r5,0 | 46 | li r5,0 |
47 | stxvx vs20,r5,r3 | 47 | stxvd2x vs20,r5,r3 |
48 | addi r5,r5,16 | 48 | addi r5,r5,16 |
49 | stxvx vs21,r5,r3 | 49 | stxvd2x vs21,r5,r3 |
50 | addi r5,r5,16 | 50 | addi r5,r5,16 |
51 | stxvx vs22,r5,r3 | 51 | stxvd2x vs22,r5,r3 |
52 | addi r5,r5,16 | 52 | addi r5,r5,16 |
53 | stxvx vs23,r5,r3 | 53 | stxvd2x vs23,r5,r3 |
54 | addi r5,r5,16 | 54 | addi r5,r5,16 |
55 | stxvx vs24,r5,r3 | 55 | stxvd2x vs24,r5,r3 |
56 | addi r5,r5,16 | 56 | addi r5,r5,16 |
57 | stxvx vs25,r5,r3 | 57 | stxvd2x vs25,r5,r3 |
58 | addi r5,r5,16 | 58 | addi r5,r5,16 |
59 | stxvx vs26,r5,r3 | 59 | stxvd2x vs26,r5,r3 |
60 | addi r5,r5,16 | 60 | addi r5,r5,16 |
61 | stxvx vs27,r5,r3 | 61 | stxvd2x vs27,r5,r3 |
62 | addi r5,r5,16 | 62 | addi r5,r5,16 |
63 | stxvx vs28,r5,r3 | 63 | stxvd2x vs28,r5,r3 |
64 | addi r5,r5,16 | 64 | addi r5,r5,16 |
65 | stxvx vs29,r5,r3 | 65 | stxvd2x vs29,r5,r3 |
66 | addi r5,r5,16 | 66 | addi r5,r5,16 |
67 | stxvx vs30,r5,r3 | 67 | stxvd2x vs30,r5,r3 |
68 | addi r5,r5,16 | 68 | addi r5,r5,16 |
69 | stxvx vs31,r5,r3 | 69 | stxvd2x vs31,r5,r3 |
70 | blr | 70 | blr |
71 | FUNC_END(store_vsx) | 71 | FUNC_END(store_vsx) |