diff options
Diffstat (limited to 'tools/testing/selftests/bpf/test_maps.c')
-rw-r--r-- | tools/testing/selftests/bpf/test_maps.c | 32 |
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 | ||
243 | static void test_hashmap_walk(int task, void *data) | 243 | static 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" |
464 | static void test_sockmap(int tasks, void *data) | 464 | static 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); |
883 | out_sockmap: | 886 | out_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 | ||
934 | static 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 | |||
946 | static 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 | ||
975 | static void do_work(int fn, void *data) | 987 | static 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; |