numam-spdk/test/setup/driver.sh
Michal Berger d69b091262 test/setup: Check if correct driver is in use
Signed-off-by: Michal Berger <michalx.berger@intel.com>
Change-Id: I9023a311442c01ef18d05903bed2eb1513f58a0f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5310
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2021-03-29 07:24:14 +00:00

78 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../")
source "$testdir/common.sh"
shopt -s nullglob extglob
dep() { modprobe --show-depends "$1"; }
mod() { [[ $(dep "$1") == *".ko"* ]]; }
bui() { [[ $(dep "$1") == "builtin $1" ]]; }
is_driver() { mod "$1" || bui "$1"; }
uio() {
is_driver uio_pci_generic
}
vfio() {
local iommu_grups
local unsafe_vfio
[[ -e /sys/module/vfio/parameters/enable_unsafe_noiommu_mode ]] \
&& unsafe_vfio=$(< /sys/module/vfio/parameters/enable_unsafe_noiommu_mode)
iommu_groups=(/sys/kernel/iommu_groups/*)
if ((${#iommu_groups[@]} > 0)) || [[ $unsafe_vfio == Y ]]; then
is_driver vfio_pci && return 0
fi
return 1
}
igb_uio() {
is_driver igb_uio
}
pick_driver() {
if vfio; then
echo "vfio-pci"
elif uio; then
# Consider special case for broken uio_pci_generic driver
if igb_uio; then
echo "@(uio_pci_generic|igb_uio)"
else
echo "uio_pci_generic"
fi
elif igb_uio; then
echo "igb_uio"
else
echo "No valid driver found"
fi
}
guess_driver() {
local driver setup_driver marker
local fail=0
driver=$(pick_driver)
if [[ $driver == "No valid driver found" ]]; then
[[ $(setup output config) == "$driver"* ]]
return 0
fi
echo "Looking for driver=$driver"
while read -r _ _ _ _ marker setup_driver; do
[[ $marker == "->" ]] || continue
# Allow for more open matching
# shellcheck disable=SC2053
[[ $setup_driver == $driver ]] || fail=1
done < <(setup output config)
((fail == 0))
setup reset
}
setup reset
run_test "guess_driver" "guess_driver"