| From 53378961d2ea2cddda64c9e5bcb90afa688cd649 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 27 Jul 2020 11:01:27 +1000 |
| Subject: selftests/powerpc: Squash spurious errors due to device removal |
| |
| From: Oliver O'Halloran <oohall@gmail.com> |
| |
| [ Upstream commit 5f8cf6475828b600ff6d000e580c961ac839cc61 ] |
| |
| For drivers that don't have the error handling callbacks we implement |
| recovery by removing the device and re-probing it. This causes the sysfs |
| directory for the PCI device to be removed which causes the following |
| spurious error to be printed when checking the PE state: |
| |
| Breaking 0005:03:00.0... |
| ./eeh-basic.sh: line 13: can't open /sys/bus/pci/devices/0005:03:00.0/eeh_pe_state: no such file |
| 0005:03:00.0, waited 0/60 |
| 0005:03:00.0, waited 1/60 |
| 0005:03:00.0, waited 2/60 |
| 0005:03:00.0, waited 3/60 |
| 0005:03:00.0, waited 4/60 |
| 0005:03:00.0, waited 5/60 |
| 0005:03:00.0, waited 6/60 |
| 0005:03:00.0, waited 7/60 |
| 0005:03:00.0, Recovered after 8 seconds |
| |
| We currently try to avoid this by checking if the PE state file exists |
| before reading from it. This is however inherently racy so re-work the |
| state checking so that we only read from the file once, and we squash any |
| errors that occur while reading. |
| |
| Fixes: 85d86c8aa52e ("selftests/powerpc: Add basic EEH selftest") |
| Signed-off-by: Oliver O'Halloran <oohall@gmail.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/20200727010127.23698-1-oohall@gmail.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/testing/selftests/powerpc/eeh/eeh-functions.sh | 11 ++++++++--- |
| 1 file changed, 8 insertions(+), 3 deletions(-) |
| |
| diff --git a/tools/testing/selftests/powerpc/eeh/eeh-functions.sh b/tools/testing/selftests/powerpc/eeh/eeh-functions.sh |
| index f52ed92b53e74..00dc32c0ed75c 100755 |
| --- a/tools/testing/selftests/powerpc/eeh/eeh-functions.sh |
| +++ b/tools/testing/selftests/powerpc/eeh/eeh-functions.sh |
| @@ -5,12 +5,17 @@ pe_ok() { |
| local dev="$1" |
| local path="/sys/bus/pci/devices/$dev/eeh_pe_state" |
| |
| - if ! [ -e "$path" ] ; then |
| + # if a driver doesn't support the error handling callbacks then the |
| + # device is recovered by removing and re-probing it. This causes the |
| + # sysfs directory to disappear so read the PE state once and squash |
| + # any potential error messages |
| + local eeh_state="$(cat $path 2>/dev/null)" |
| + if [ -z "$eeh_state" ]; then |
| return 1; |
| fi |
| |
| - local fw_state="$(cut -d' ' -f1 < $path)" |
| - local sw_state="$(cut -d' ' -f2 < $path)" |
| + local fw_state="$(echo $eeh_state | cut -d' ' -f1)" |
| + local sw_state="$(echo $eeh_state | cut -d' ' -f2)" |
| |
| # If EEH_PE_ISOLATED or EEH_PE_RECOVERING are set then the PE is in an |
| # error state or being recovered. Either way, not ok. |
| -- |
| 2.25.1 |
| |