From fb732cb782e2c31abf2e12ca96145650195bfc6b Mon Sep 17 00:00:00 2001 From: Michal Berger Date: Fri, 4 Dec 2020 11:08:46 +0100 Subject: [PATCH] scripts/qat_setup: Make sure the out-of-tree intel_qat driver is in use Change-Id: I8869b42cd42a1f18cbbde79d59e1a95df9316d4e Signed-off-by: Michal Berger Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5451 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Tomasz Zawadzki Reviewed-by: Karol Latecki Reviewed-by: Jim Harris --- scripts/qat_setup.sh | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/scripts/qat_setup.sh b/scripts/qat_setup.sh index e119f9cc3..a5fa185b4 100755 --- a/scripts/qat_setup.sh +++ b/scripts/qat_setup.sh @@ -1,9 +1,55 @@ #!/usr/bin/env bash +shopt -s nullglob rootdir=$(readlink -f $(dirname $0))/.. igb_driverdir=$rootdir/dpdk/build/build/kernel/igb_uio/ allowed_drivers=("igb_uio" "uio_pci_generic") +reload_intel_qat() { + # We need to make sure the out-of-tree intel_qat driver, provided via vm_setup.sh, is in + # use. Otherwise, some dependency modules loaded by qat_service may fail causing some + # disturbance later on during the tests - in particular, it's been seen that the adf_ctl + # was returning inconsistent data (wrong pci addresses), confusing the service into + # believing SR-IOV is not enabled. + + # If this file doesn't exist, then either intel_qat is a kernel built-in or is not loaded. + # Nothing to do in such cases, qat_service will load the module for us. + [[ -e /sys/module/intel_qat/taint ]] || return 0 + + local t v + t=$(< /sys/module/intel_qat/taint) + v=$(< /sys/module/intel_qat/version) + + # OE - out-of-tree, unsigned. By the very default, drivers built via vm_setup.sh are not + # signed. + [[ -z $t || $t != *"OE"* ]] || return 0 + + # Check the version of loaded module against the version of the same module as seen + # from .dep. perspective. if these are the same the most likely something is broken + # with the dependencies. We report a failure in such a case since reloading the module + # won't do any good anyway. + + if [[ $(modinfo -F version intel_qat) == "$v" ]]; then + cat <<- WARN + Upstream intel_qat driver detected. Same version of the driver is seen + in modules dependencies: $v. This may mean QAT build didn't update + dependencies properly. QAT setup may fail, please, rebuild the QAT + driver. + WARN + return 0 + fi + + # Ok, intel_qat is an upstream module, replace it with the out-of-tree one. + echo "Reloading intel_qat module" + + local h=(/sys/module/intel_qat/holders/*) + h=("${h[@]##*/}") + + modprobe -r "${h[@]}" intel_qat + # qat_service does that too, but be vigilant + modprobe -a intel_qat "${h[@]}" +} + # This script requires an igb_uio kernel module binary located at $igb_driverdir/igb_uio.ko # Please also note that this script is not intended to be comprehensive or production quality. # It supports configuring a single card (the Intel QAT 8970) for use with the SPDK @@ -34,6 +80,8 @@ if $bad_driver; then exit 1 fi +reload_intel_qat + # try starting the qat service. If this doesn't work, just treat it as a warning for now. if ! service qat_service start; then echo "failed to start the qat service. Something may be wrong with your 01.org driver."