• Gavin Shan's avatar
    powerpc/eeh: Restore initial state in eeh_pe_reset_and_recover() · 9365bd6c
    Gavin Shan authored
    [ Upstream commit 5a0cdbfd ]
    
    The function eeh_pe_reset_and_recover() is used to recover EEH
    error when the passthrou device are transferred to guest and
    backwards. The content in the device's config space will be lost
    on PE reset issued in the middle of the recovery. The function
    saves/restores it before/after the reset. However, config access
    to some adapters like Broadcom BCM5719 at this point will causes
    fenced PHB. The config space is always blocked and we save 0xFF's
    that are restored at late point. The memory BARs are totally
    corrupted, causing another EEH error upon access to one of the
    memory BARs.
    
    This restores the config space on those adapters like BCM5719
    from the content saved to the EEH device when it's populated,
    to resolve above issue.
    
    Fixes: 5cfb20b9 ("powerpc/eeh: Emulate EEH recovery for VFIO devices")
    Cc: stable@vger.kernel.org #v3.18+
    Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Reviewed-by: default avatarRussell Currey <ruscur@russell.cc>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
    9365bd6c
eeh_driver.c 25.1 KB