162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci. ./eeh-functions.sh
562306a36Sopenharmony_ci
662306a36Sopenharmony_cieeh_test_prep # NB: may exit
762306a36Sopenharmony_ci
862306a36Sopenharmony_civf_list="$(eeh_enable_vfs)";
962306a36Sopenharmony_ciif $? != 0 ; then
1062306a36Sopenharmony_ci	log "No usable VFs found. Skipping EEH unaware VF test"
1162306a36Sopenharmony_ci	exit $KSELFTESTS_SKIP;
1262306a36Sopenharmony_cifi
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cilog "Enabled VFs: $vf_list"
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_citested=0
1762306a36Sopenharmony_cipassed=0
1862306a36Sopenharmony_cifor vf in $vf_list ; do
1962306a36Sopenharmony_ci	log "Testing $vf"
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	if ! eeh_can_recover $vf ; then
2262306a36Sopenharmony_ci		log "Driver for $vf doesn't support error recovery, skipping"
2362306a36Sopenharmony_ci		continue;
2462306a36Sopenharmony_ci	fi
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	tested="$((tested + 1))"
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	log "Breaking $vf..."
2962306a36Sopenharmony_ci	if ! eeh_one_dev $vf ; then
3062306a36Sopenharmony_ci		log "$vf failed to recover"
3162306a36Sopenharmony_ci		continue;
3262306a36Sopenharmony_ci	fi
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	passed="$((passed + 1))"
3562306a36Sopenharmony_cidone
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cieeh_disable_vfs
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciif [ "$tested" == 0 ] ; then
4062306a36Sopenharmony_ci	echo "No VFs with EEH aware drivers found, skipping"
4162306a36Sopenharmony_ci	exit $KSELFTESTS_SKIP
4262306a36Sopenharmony_cifi
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_citest "$failed" != 0
4562306a36Sopenharmony_ciexit $?;
46