Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4source "../../../../net/forwarding/devlink_lib.sh"
5source ../mlxsw_lib.sh
6
7mlxsw_only_on_spectrum 1 || exit 1
8
9# Needed for returning to default
10declare -A KVD_DEFAULTS
11
12KVD_CHILDREN="linear hash_single hash_double"
13KVDL_CHILDREN="singles chunks large_chunks"
14
15devlink_sp_resource_minimize()
16{
17 local size
18 local i
19
20 for i in $KVD_CHILDREN; do
21 size=$(devlink_resource_get kvd "$i" | jq '.["size_min"]')
22 devlink_resource_size_set "$size" kvd "$i"
23 done
24
25 for i in $KVDL_CHILDREN; do
26 size=$(devlink_resource_get kvd linear "$i" | \
27 jq '.["size_min"]')
28 devlink_resource_size_set "$size" kvd linear "$i"
29 done
30}
31
32devlink_sp_size_kvd_to_default()
33{
34 local need_reload=0
35 local i
36
37 for i in $KVD_CHILDREN; do
38 local size=$(echo "${KVD_DEFAULTS[kvd_$i]}" | jq '.["size"]')
39 current_size=$(devlink_resource_size_get kvd "$i")
40
41 if [ "$size" -ne "$current_size" ]; then
42 devlink_resource_size_set "$size" kvd "$i"
43 need_reload=1
44 fi
45 done
46
47 for i in $KVDL_CHILDREN; do
48 local size=$(echo "${KVD_DEFAULTS[kvd_linear_$i]}" | \
49 jq '.["size"]')
50 current_size=$(devlink_resource_size_get kvd linear "$i")
51
52 if [ "$size" -ne "$current_size" ]; then
53 devlink_resource_size_set "$size" kvd linear "$i"
54 need_reload=1
55 fi
56 done
57
58 if [ "$need_reload" -ne "0" ]; then
59 devlink_reload
60 fi
61}
62
63devlink_sp_read_kvd_defaults()
64{
65 local key
66 local i
67
68 KVD_DEFAULTS[kvd]=$(devlink_resource_get "kvd")
69 for i in $KVD_CHILDREN; do
70 key=kvd_$i
71 KVD_DEFAULTS[$key]=$(devlink_resource_get kvd "$i")
72 done
73
74 for i in $KVDL_CHILDREN; do
75 key=kvd_linear_$i
76 KVD_DEFAULTS[$key]=$(devlink_resource_get kvd linear "$i")
77 done
78}
79
80KVD_PROFILES="default scale ipv4_max"
81
82devlink_sp_resource_kvd_profile_set()
83{
84 local profile=$1
85
86 case "$profile" in
87 scale)
88 devlink_resource_size_set 64000 kvd linear
89 devlink_resource_size_set 15616 kvd linear singles
90 devlink_resource_size_set 32000 kvd linear chunks
91 devlink_resource_size_set 16384 kvd linear large_chunks
92 devlink_resource_size_set 128000 kvd hash_single
93 devlink_resource_size_set 48000 kvd hash_double
94 devlink_reload
95 ;;
96 ipv4_max)
97 devlink_resource_size_set 64000 kvd linear
98 devlink_resource_size_set 15616 kvd linear singles
99 devlink_resource_size_set 32000 kvd linear chunks
100 devlink_resource_size_set 16384 kvd linear large_chunks
101 devlink_resource_size_set 144000 kvd hash_single
102 devlink_resource_size_set 32768 kvd hash_double
103 devlink_reload
104 ;;
105 default)
106 devlink_resource_size_set 98304 kvd linear
107 devlink_resource_size_set 16384 kvd linear singles
108 devlink_resource_size_set 49152 kvd linear chunks
109 devlink_resource_size_set 32768 kvd linear large_chunks
110 devlink_resource_size_set 87040 kvd hash_single
111 devlink_resource_size_set 60416 kvd hash_double
112 devlink_reload
113 ;;
114 *)
115 check_err 1 "Unknown profile $profile"
116 esac
117}