• Sam Bobroff's avatar
    powerpc/pseries: fix EEH recovery of some IOV devices · b87b9cf4
    Sam Bobroff authored
    EEH recovery currently fails on pSeries for some IOV capable PCI
    devices, if CONFIG_PCI_IOV is on and the hypervisor doesn't provide
    certain device tree properties for the device. (Found on an IOV
    capable device using the ipr driver.)
    
    Recovery fails in pci_enable_resources() at the check on r->parent,
    because r->flags is set and r->parent is not.  This state is due to
    sriov_init() setting the start, end and flags members of the IOV BARs
    but the parent not being set later in
    pseries_pci_fixup_iov_resources(), because the
    "ibm,open-sriov-vf-bar-info" property is missing.
    
    Correct this by zeroing the resource flags for IOV BARs when they
    can't be configured (this is the same method used by sriov_init() and
    __pci_read_base()).
    
    VFs cleared this way can't be enabled later, because that requires
    another device tree property, "ibm,number-of-configurable-vfs" as well
    as support for the RTAS function "ibm_map_pes". These are all part of
    hypervisor support for IOV and it seems unlikely that a hypervisor
    would ever partially, but not fully, support it. (None are currently
    provided by QEMU/KVM.)
    Signed-off-by: default avatarSam Bobroff <sbobroff@linux.ibm.com>
    Reviewed-by: default avatarBryant G. Ly <bryantly@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    b87b9cf4
setup.c 26.2 KB