1#!/usr/bin/env bash 2testdir=$(readlink -f "$(dirname "$0")") 3rootdir=$(readlink -f "$testdir/../../") 4source "$testdir/common.sh" 5 6declare -a devs=() 7declare -A drivers=() 8 9collect_setup_devs() { 10 local dev driver 11 12 while read -r _ dev _ _ _ driver _; do 13 [[ $dev == *:*:*.* ]] || continue 14 [[ $driver == nvme ]] || continue 15 devs+=("$dev") drivers["$dev"]=$driver 16 done < <(setup output status) 17 ((${#devs[@]} > 0)) 18} 19 20verify() { 21 local dev driver 22 23 for dev; do 24 [[ -e /sys/bus/pci/devices/$dev ]] 25 driver=$(readlink -f "/sys/bus/pci/devices/$dev/driver") 26 [[ ${drivers["$dev"]} == "${driver##*/}" ]] 27 done 28} 29 30denied() { 31 # Include OCSSD devices in the PCI_BLOCKED to make sure we don't unbind 32 # them from the pci-stub (see autotest.sh for details). 33 PCI_BLOCKED="$OCSSD_PCI_DEVICES ${devs[0]}" setup output config \ 34 | grep "Skipping denied controller at ${devs[0]}" 35 verify "${devs[0]}" 36 setup reset 37} 38 39allowed() { 40 PCI_ALLOWED="${devs[0]}" setup output config \ 41 | grep -E "${devs[0]} .*: ${drivers["${devs[0]}"]} -> .*" 42 verify "${devs[@]:1}" 43 setup reset 44} 45 46setup reset 47collect_setup_devs 48 49run_test "denied" denied 50run_test "allowed" allowed 51