2 # SPDX-License-Identifier: GPL-2.0
4 ##############################################################################
7 relative_path="${BASH_SOURCE%/*}"
8 if [[ "$relative_path" == "${BASH_SOURCE}" ]]; then
12 source "$relative_path/lib.sh"
14 ##############################################################################
17 DEVLINK_DEV=$(devlink port show | grep "${NETIFS[p1]}" | \
18 grep -v "${NETIFS[p1]}[0-9]" | cut -d" " -f1 | \
19 rev | cut -d"/" -f2- | rev)
20 if [ -z "$DEVLINK_DEV" ]; then
21 echo "SKIP: ${NETIFS[p1]} has no devlink device registered for it"
24 if [[ "$(echo $DEVLINK_DEV | grep -c pci)" -eq 0 ]]; then
25 echo "SKIP: devlink device's bus is not PCI"
29 DEVLINK_VIDDID=$(lspci -s $(echo $DEVLINK_DEV | cut -d"/" -f2) \
32 ##############################################################################
35 devlink -j resource show "$DEVLINK_DEV" &> /dev/null
37 echo "SKIP: iproute2 too old, missing devlink resource support"
41 ##############################################################################
44 devlink_resource_names_to_path()
49 for resource in "${@}"; do
50 if [ "$path" == "" ]; then
53 path="${path}/$resource"
60 devlink_resource_get()
63 local resource_name=.[][\"$DEVLINK_DEV\"]
65 resource_name="$resource_name | .[] | select (.name == \"$name\")"
68 for resource in "${@}"; do
69 resource_name="${resource_name} | .[\"resources\"][] | \
70 select (.name == \"$resource\")"
73 devlink -j resource show "$DEVLINK_DEV" | jq "$resource_name"
76 devlink_resource_size_get()
78 local size=$(devlink_resource_get "$@" | jq '.["size_new"]')
80 if [ "$size" == "null" ]; then
81 devlink_resource_get "$@" | jq '.["size"]'
87 devlink_resource_size_set()
93 path=$(devlink_resource_names_to_path "$@")
94 devlink resource set "$DEVLINK_DEV" path "$path" size "$new_size"
95 check_err $? "Failed setting path $path to size $size"
102 devlink dev reload "$DEVLINK_DEV" &> /dev/null
103 check_err $? "Failed reload"
105 still_pending=$(devlink resource show "$DEVLINK_DEV" | \
107 check_err $still_pending "Failed reload - There are still unset sizes"