diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/testing/selftests/bpf/test_maps.c | 29 |
1 files changed, 26 insertions, 3 deletions
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); |