58 lines · bash
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.0-only3 4. ./eeh-functions.sh5 6eeh_test_prep # NB: may exit7 8pre_lspci=`mktemp`9lspci > $pre_lspci10 11# record the devices that we break in here. Assuming everything12# goes to plan we should get them back once the recover process13# is finished.14devices=""15 16# Build up a list of candidate devices.17for dev in `ls -1 /sys/bus/pci/devices/ | grep '\.0$'` ; do18 if ! eeh_can_break $dev ; then19 continue;20 fi21 22 # Skip VFs for now since we don't have a reliable way to break them.23 if [ -e "/sys/bus/pci/devices/$dev/physfn" ] ; then24 echo "$dev, Skipped: virtfn"25 continue;26 fi27 28 echo "$dev, Added"29 30 # Add to this list of device to check31 devices="$devices $dev"32done33 34dev_count="$(echo $devices | wc -w)"35echo "Found ${dev_count} breakable devices..."36 37failed=038for dev in $devices ; do39 echo "Breaking $dev..."40 41 if ! pe_ok $dev ; then42 echo "Skipping $dev, Initial PE state is not ok"43 failed="$((failed + 1))"44 continue;45 fi46 47 if ! eeh_one_dev $dev ; then48 failed="$((failed + 1))"49 fi50done51 52echo "$failed devices failed to recover ($dev_count tested)"53lspci | diff -u $pre_lspci -54rm -f $pre_lspci55 56test "$failed" -eq 057exit $?58