From d69b09126238152c225d5cdfaf1e8ba43d412647 Mon Sep 17 00:00:00 2001 From: Michal Berger Date: Fri, 27 Nov 2020 12:13:56 +0100 Subject: [PATCH] test/setup: Check if correct driver is in use Signed-off-by: Michal Berger Change-Id: I9023a311442c01ef18d05903bed2eb1513f58a0f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5310 Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- test/setup/driver.sh | 77 ++++++++++++++++++++++++++++++++++++++++ test/setup/test-setup.sh | 1 + 2 files changed, 78 insertions(+) create mode 100755 test/setup/driver.sh diff --git a/test/setup/driver.sh b/test/setup/driver.sh new file mode 100755 index 000000000..823d723de --- /dev/null +++ b/test/setup/driver.sh @@ -0,0 +1,77 @@ +#!/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" diff --git a/test/setup/test-setup.sh b/test/setup/test-setup.sh index 1ff0b937e..ee5ba0f0d 100755 --- a/test/setup/test-setup.sh +++ b/test/setup/test-setup.sh @@ -7,3 +7,4 @@ source "$testdir/common.sh" run_test "acl" "$testdir/acl.sh" run_test "hugepages" "$testdir/hugepages.sh" +run_test "driver" "$testdir/driver.sh"