| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #!/bin/sh
- # SPDX-License-Identifier: GPL-2.0-only
- . ./eeh-functions.sh
- eeh_test_prep # NB: may exit
- pre_lspci=`mktemp`
- lspci > $pre_lspci
- # record the devices that we break in here. Assuming everything
- # goes to plan we should get them back once the recover process
- # is finished.
- devices=""
- # Build up a list of candidate devices.
- for dev in `ls -1 /sys/bus/pci/devices/ | grep '\.0$'` ; do
- if ! eeh_can_break $dev ; then
- continue;
- fi
- # Skip VFs for now since we don't have a reliable way to break them.
- if [ -e "/sys/bus/pci/devices/$dev/physfn" ] ; then
- echo "$dev, Skipped: virtfn"
- continue;
- fi
- echo "$dev, Added"
- # Add to this list of device to check
- devices="$devices $dev"
- done
- dev_count="$(echo $devices | wc -w)"
- echo "Found ${dev_count} breakable devices..."
- failed=0
- for dev in $devices ; do
- echo "Breaking $dev..."
- if ! pe_ok $dev ; then
- echo "Skipping $dev, Initial PE state is not ok"
- failed="$((failed + 1))"
- continue;
- fi
- if ! eeh_one_dev $dev ; then
- failed="$((failed + 1))"
- fi
- done
- echo "$failed devices failed to recover ($dev_count tested)"
- lspci | diff -u $pre_lspci -
- rm -f $pre_lspci
- test "$failed" -eq 0
- exit $?
|