#!/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 $?