Commit d69b0912 authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

test/setup: Check if correct driver is in use



Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Change-Id: I9023a311442c01ef18d05903bed2eb1513f58a0f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5310


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent d60bc771
Loading
Loading
Loading
Loading

test/setup/driver.sh

0 → 100755
+77 −0
Original line number Diff line number Diff line
#!/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"
+1 −0
Original line number Diff line number Diff line
@@ -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"