aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/bpf/test_maps.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/testing/selftests/bpf/test_maps.c')
-rw-r--r--tools/testing/selftests/bpf/test_maps.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/tools/testing/selftests/bpf/test_maps.c b/tools/testing/selftests/bpf/test_maps.c
index 040356ecc862..436c4c72414f 100644
--- a/tools/testing/selftests/bpf/test_maps.c
+++ b/tools/testing/selftests/bpf/test_maps.c
@@ -242,7 +242,7 @@ static void test_hashmap_percpu(int task, void *data)
242 242
243static void test_hashmap_walk(int task, void *data) 243static void test_hashmap_walk(int task, void *data)
244{ 244{
245 int fd, i, max_entries = 100000; 245 int fd, i, max_entries = 1000;
246 long long key, value, next_key; 246 long long key, value, next_key;
247 bool next_key_valid = true; 247 bool next_key_valid = true;
248 248
@@ -463,7 +463,7 @@ static void test_devmap(int task, void *data)
463#define SOCKMAP_VERDICT_PROG "./sockmap_verdict_prog.o" 463#define SOCKMAP_VERDICT_PROG "./sockmap_verdict_prog.o"
464static void test_sockmap(int tasks, void *data) 464static void test_sockmap(int tasks, void *data)
465{ 465{
466 int one = 1, map_fd_rx, map_fd_tx, map_fd_break, s, sc, rc; 466 int one = 1, map_fd_rx = 0, map_fd_tx = 0, map_fd_break, s, sc, rc;
467 struct bpf_map *bpf_map_rx, *bpf_map_tx, *bpf_map_break; 467 struct bpf_map *bpf_map_rx, *bpf_map_tx, *bpf_map_break;
468 int ports[] = {50200, 50201, 50202, 50204}; 468 int ports[] = {50200, 50201, 50202, 50204};
469 int err, i, fd, udp, sfd[6] = {0xdeadbeef}; 469 int err, i, fd, udp, sfd[6] = {0xdeadbeef};
@@ -868,9 +868,12 @@ static void test_sockmap(int tasks, void *data)
868 goto out_sockmap; 868 goto out_sockmap;
869 } 869 }
870 870
871 /* Test map close sockets */ 871 /* Test map close sockets and empty maps */
872 for (i = 0; i < 6; i++) 872 for (i = 0; i < 6; i++) {
873 bpf_map_delete_elem(map_fd_tx, &i);
874 bpf_map_delete_elem(map_fd_rx, &i);
873 close(sfd[i]); 875 close(sfd[i]);
876 }
874 close(fd); 877 close(fd);
875 close(map_fd_rx); 878 close(map_fd_rx);
876 bpf_object__close(obj); 879 bpf_object__close(obj);
@@ -881,8 +884,13 @@ out:
881 printf("Failed to create sockmap '%i:%s'!\n", i, strerror(errno)); 884 printf("Failed to create sockmap '%i:%s'!\n", i, strerror(errno));
882 exit(1); 885 exit(1);
883out_sockmap: 886out_sockmap:
884 for (i = 0; i < 6; i++) 887 for (i = 0; i < 6; i++) {
888 if (map_fd_tx)
889 bpf_map_delete_elem(map_fd_tx, &i);
890 if (map_fd_rx)
891 bpf_map_delete_elem(map_fd_rx, &i);
885 close(sfd[i]); 892 close(sfd[i]);
893 }
886 close(fd); 894 close(fd);
887 exit(1); 895 exit(1);
888} 896}
@@ -931,8 +939,12 @@ static void test_map_large(void)
931 close(fd); 939 close(fd);
932} 940}
933 941
934static void run_parallel(int tasks, void (*fn)(int task, void *data), 942#define run_parallel(N, FN, DATA) \
935 void *data) 943 printf("Fork %d tasks to '" #FN "'\n", N); \
944 __run_parallel(N, FN, DATA)
945
946static void __run_parallel(int tasks, void (*fn)(int task, void *data),
947 void *data)
936{ 948{
937 pid_t pid[tasks]; 949 pid_t pid[tasks];
938 int i; 950 int i;
@@ -972,7 +984,7 @@ static void test_map_stress(void)
972#define DO_UPDATE 1 984#define DO_UPDATE 1
973#define DO_DELETE 0 985#define DO_DELETE 0
974 986
975static void do_work(int fn, void *data) 987static void test_update_delete(int fn, void *data)
976{ 988{
977 int do_update = ((int *)data)[1]; 989 int do_update = ((int *)data)[1];
978 int fd = ((int *)data)[0]; 990 int fd = ((int *)data)[0];
@@ -1012,7 +1024,7 @@ static void test_map_parallel(void)
1012 */ 1024 */
1013 data[0] = fd; 1025 data[0] = fd;
1014 data[1] = DO_UPDATE; 1026 data[1] = DO_UPDATE;
1015 run_parallel(TASKS, do_work, data); 1027 run_parallel(TASKS, test_update_delete, data);
1016 1028
1017 /* Check that key=0 is already there. */ 1029 /* Check that key=0 is already there. */
1018 assert(bpf_map_update_elem(fd, &key, &value, BPF_NOEXIST) == -1 && 1030 assert(bpf_map_update_elem(fd, &key, &value, BPF_NOEXIST) == -1 &&
@@ -1035,7 +1047,7 @@ static void test_map_parallel(void)
1035 1047
1036 /* Now let's delete all elemenets in parallel. */ 1048 /* Now let's delete all elemenets in parallel. */
1037 data[1] = DO_DELETE; 1049 data[1] = DO_DELETE;
1038 run_parallel(TASKS, do_work, data); 1050 run_parallel(TASKS, test_update_delete, data);
1039 1051
1040 /* Nothing should be left. */ 1052 /* Nothing should be left. */
1041 key = -1; 1053 key = -1;