• Rafael J. Wysocki's avatar
    PCI: Retry BARs restoration for Type 0 headers only · a6cb9ee7
    Rafael J. Wysocki authored
    Some shortcomings introduced into pci_restore_state() by commit
    26f41062 ("PCI: check for pci bar restore completion and retry")
    have been fixed by recent commit ebfc5b80 ("PCI: Fix regression in
    pci_restore_state(), v3"), but that commit treats all PCI devices as
    those with Type 0 configuration headers.
    
    That is not entirely correct, because Type 1 and Type 2 headers have
    different layouts.  In particular, the area occupied by BARs in Type 0
    config headers contains the secondary status register in Type 1 ones and
    it doesn't make sense to retry the restoration of that register even if
    the value read back from it after a write is not the same as the written
    one (it very well may be different).
    
    For this reason, make pci_restore_state() only retry the restoration
    of BARs for Type 0 config headers.  This effectively makes it behave
    as before commit 26f41062 for all header types except for Type 0.
    Tested-by: default avatarMikko Vinni <mmvinni@yahoo.com>
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a6cb9ee7
pci.c 101 KB