s390/pci: Recover handle in clp_set_pci_fn()
authorNiklas Schnelle <schnelle@linux.ibm.com>
Tue, 17 Dec 2019 08:34:46 +0000 (09:34 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Wed, 22 Jan 2020 12:05:34 +0000 (13:05 +0100)
commit17cdec960cf776b20b1fb08c622221babe591d51
tree118efa4a32aea55bbafc79fc1d6d95ea4559deba
parentd1eef1c619749b2a57e514a3fa67d9a516ffa919
s390/pci: Recover handle in clp_set_pci_fn()

When we try to recover a PCI function using

    echo 1 > /sys/bus/pci/devices/<id>/recover

or manually with

    echo 1 > /sys/bus/pci/devices/<id>/remove
    echo 0 > /sys/bus/pci/slots/<slot>/power
    echo 1 > /sys/bus/pci/slots/<slot>/power

clp_disable_fn() / clp_enable_fn() call clp_set_pci_fn() to first
disable and then reenable the function.

When the function is already in the requested state we may be left with
an invalid function handle.

To get a new valid handle we do a clp_list_pci() call. For this we need
both the function ID and function handle in clp_set_pci_fn() so pass the
zdev and get both.

To simplify things also pull setting the refreshed function handle into
clp_set_pci_fn()

Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/pci.h
arch/s390/pci/pci.c
arch/s390/pci/pci_clp.c