cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

devlink_lib_spectrum.sh (2877B)


      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}