From 9b3773db687c6fe995cc12de63d135aa1312e056 Mon Sep 17 00:00:00 2001 From: Michal Berger Date: Tue, 11 May 2021 12:07:09 +0200 Subject: [PATCH] scripts/common: Cache pci modalias Additionally, include the first resolved alias of the module. Signed-off-by: Michal Berger Change-Id: I71c7c15398ea36f3dea3340f5c98568ff6b6a68a Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7848 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Tomasz Zawadzki --- scripts/common.sh | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/scripts/common.sh b/scripts/common.sh index fd5d492ac0..2edd0eddfa 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -28,11 +28,23 @@ function pci_can_use() { return 1 } +resolve_mod() { + local mod=$1 aliases=() + + if aliases=($(modprobe -R "$mod")); then + echo "${aliases[0]}" + else + echo "unknown" + fi 2> /dev/null +} + cache_pci_init() { local -gA pci_bus_cache local -gA pci_ids_vendor local -gA pci_ids_device local -gA pci_bus_driver + local -gA pci_mod_driver + local -gA pci_mod_resolved [[ -z ${pci_bus_cache[*]} || $CMD == reset ]] || return 1 @@ -40,10 +52,12 @@ cache_pci_init() { pci_bus_ids_vendor=() pci_bus_ids_device=() pci_bus_driver=() + pci_mod_driver=() + pci_mod_resolved=() } cache_pci() { - local pci=$1 class=$2 vendor=$3 device=$4 driver=$5 + local pci=$1 class=$2 vendor=$3 device=$4 driver=$5 mod=$6 if [[ -n $class ]]; then class=0x${class/0x/} @@ -59,6 +73,10 @@ cache_pci() { if [[ -n $driver ]]; then pci_bus_driver["$pci"]=$driver fi + if [[ -n $mod ]]; then + pci_mod_driver["$pci"]=$mod + pci_mod_resolved["$pci"]=$(resolve_mod "$mod") + fi } cache_pci_bus_sysfs() { @@ -67,17 +85,20 @@ cache_pci_bus_sysfs() { cache_pci_init || return 0 local pci - local class vendor device driver + local class vendor device driver mod for pci in /sys/bus/pci/devices/*; do - class=$(< "$pci/class") vendor=$(< "$pci/vendor") device=$(< "$pci/device") driver="" + class=$(< "$pci/class") vendor=$(< "$pci/vendor") device=$(< "$pci/device") driver="" mod="" if [[ -e $pci/driver ]]; then driver=$(readlink -f "$pci/driver") driver=${driver##*/} else driver=unbound fi - cache_pci "${pci##*/}" "$class" "$vendor" "$device" "$driver" + if [[ -e $pci/modalias ]]; then + mod=$(< "$pci/modalias") + fi + cache_pci "${pci##*/}" "$class" "$vendor" "$device" "$driver" "$mod" done }