Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / drivers / net / mlxsw / spectrum / devlink_resources.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3
4 lib_dir=$(dirname $0)/../../../../net/forwarding
5
6 NUM_NETIFS=1
7 source $lib_dir/lib.sh
8 source devlink_lib_spectrum.sh
9
10 setup_prepare()
11 {
12         devlink_sp_read_kvd_defaults
13 }
14
15 cleanup()
16 {
17         pre_cleanup
18         devlink_sp_size_kvd_to_default
19 }
20
21 trap cleanup EXIT
22
23 setup_prepare
24
25 profiles_test()
26 {
27         local i
28
29         log_info "Running profile tests"
30
31         for i in $KVD_PROFILES; do
32                 RET=0
33                 devlink_sp_resource_kvd_profile_set $i
34                 log_test "'$i' profile"
35         done
36
37         # Default is explicitly tested at end to ensure it's actually applied
38         RET=0
39         devlink_sp_resource_kvd_profile_set "default"
40         log_test "'default' profile"
41 }
42
43 resources_min_test()
44 {
45         local size
46         local i
47         local j
48
49         log_info "Running KVD-minimum tests"
50
51         for i in $KVD_CHILDREN; do
52                 RET=0
53                 size=$(devlink_resource_get kvd "$i" | jq '.["size_min"]')
54                 devlink_resource_size_set "$size" kvd "$i"
55
56                 # In case of linear, need to minimize sub-resources as well
57                 if [[ "$i" == "linear" ]]; then
58                         for j in $KVDL_CHILDREN; do
59                                 devlink_resource_size_set 0 kvd linear "$j"
60                         done
61                 fi
62
63                 devlink_reload
64                 devlink_sp_size_kvd_to_default
65                 log_test "'$i' minimize [$size]"
66         done
67 }
68
69 resources_max_test()
70 {
71         local min_size
72         local size
73         local i
74         local j
75
76         log_info "Running KVD-maximum tests"
77         for i in $KVD_CHILDREN; do
78                 RET=0
79                 devlink_sp_resource_minimize
80
81                 # Calculate the maximum possible size for the given partition
82                 size=$(devlink_resource_size_get kvd)
83                 for j in $KVD_CHILDREN; do
84                         if [ "$i" != "$j" ]; then
85                                 min_size=$(devlink_resource_get kvd "$j" | \
86                                            jq '.["size_min"]')
87                                 size=$((size - min_size))
88                         fi
89                 done
90
91                 # Test almost maximum size
92                 devlink_resource_size_set "$((size - 128))" kvd "$i"
93                 devlink_reload
94                 log_test "'$i' almost maximize [$((size - 128))]"
95
96                 # Test above maximum size
97                 devlink resource set "$DEVLINK_DEV" \
98                         path "kvd/$i" size $((size + 128)) &> /dev/null
99                 check_fail $? "Set kvd/$i to size $((size + 128)) should fail"
100                 log_test "'$i' Overflow rejection [$((size + 128))]"
101
102                 # Test maximum size
103                 if [ "$i" == "hash_single" ] || [ "$i" == "hash_double" ]; then
104                         echo "SKIP: Observed problem with exact max $i"
105                         continue
106                 fi
107
108                 devlink_resource_size_set "$size" kvd "$i"
109                 devlink_reload
110                 log_test "'$i' maximize [$size]"
111
112                 devlink_sp_size_kvd_to_default
113         done
114 }
115
116 profiles_test
117 resources_min_test
118 resources_max_test
119
120 exit "$RET"