• Niklas Schnelle's avatar
    s390/pci: refresh function handle in iomap · 4fe20497
    Niklas Schnelle authored
    The function handle of a PCI function is updated when disabling or
    enabling it as well as when the function's availability changes or it
    enters the error state.
    
    Until now this only occurred either while there is no struct pci_dev
    associated with the function yet or the function became unavailable.
    This meant that leaving a stale function handle in the iomap either
    didn't happen because there was no iomap yet or it lead to errors on PCI
    access but so would the correct disabled function handle.
    
    In the future a CLP Set PCI Function Disable/Enable cycle during PCI
    device recovery may be done while the device is bound to a driver.  In
    this case we must update the iomap associated with the now-stale
    function handle to ensure that the resulting zPCI instruction references
    an accurate function handle.
    
    Since the function handle is accessed by the PCI accessor helpers
    without locking use READ_ONCE()/WRITE_ONCE() to mark this access and
    prevent compiler optimizations that would move the load/store.
    
    With that infrastructure in place let's also properly update the
    function handle in the existing cases. This makes sure that in the
    future debugging of a zPCI function access through the handle will
    show an up to date handle reducing the chance of confusion. Also it
    makes sure we have one single place where a zPCI function handle is
    updated after initialization.
    Reviewed-by: default avatarPierre Morel <pmorel@linux.ibm.com>
    Reviewed-by: default avatarMatthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    4fe20497
pci_insn.c 8.14 KB