File Index
Files and directories
Sign in
FILE

devlink_lib_spectrum.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/drivers/net/mlxsw/spectrum/devlink_lib_spectrum.sh BASH
  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}
~/ Read-only file preview.