powerpc/eeh_sysfs: Make clearing EEH_DEV_SYSFS saner
authorOliver O'Halloran <oohall@gmail.com>
Mon, 15 Jul 2019 08:56:12 +0000 (18:56 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 23 Jan 2020 10:31:19 +0000 (21:31 +1100)
commit3489cdc417b20d929b33eff4d8312b4dd1f39ca1
treea765315f5093ceb34a68e4d7a6ad617337c562e7
parent758b423275f0738fa4d382057c03f3d45c12905d
powerpc/eeh_sysfs: Make clearing EEH_DEV_SYSFS saner

The eeh_sysfs_remove_device() function is supposed to clear the
EEH_DEV_SYSFS flag since it indicates the EEH sysfs entries have been added
for a pci_dev.

When the sysfs files are removed eeh_remove_device() the eeh_dev and the
pci_dev have already been de-associated. This then causes the
pci_dev_to_eeh_dev() call in eeh_sysfs_remove_device() to return NULL so
the flag can't be cleared from the still-live eeh_dev. This problem is
worked around in the caller by clearing the flag manually. However, this
behaviour doesn't make a whole lot of sense, so this patch fixes it by:

a) Re-ordering eeh_remove_device() so that eeh_sysfs_remove_device() is
   called before de-associating the pci_dev and eeh_dev.

b) Making eeh_sysfs_remove_device() emit a warning if there's no
   corresponding eeh_dev for a pci_dev. The paths where the sysfs
   files are only reachable if EEH was setup for the device
   for the device in the first place so hitting this warning
   indicates a programming error.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Reviewed-by: Sam Bobroff <sbobroff@linux.ibm.com>
Tested-by: Sam Bobroff <sbobroff@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190715085612.8802-6-oohall@gmail.com
arch/powerpc/kernel/eeh.c
arch/powerpc/kernel/eeh_sysfs.c