• Borislav Petkov's avatar
    EDAC/amd64: Fix PCI component registration · 706657b1
    Borislav Petkov authored
    In order to setup its PCI component, the driver needs any node private
    instance in order to get a reference to the PCI device and hand that
    into edac_pci_create_generic_ctl(). For convenience, it uses the 0th
    memory controller descriptor under the assumption that if any, the 0th
    will be always present.
    
    However, this assumption goes wrong when the 0th node doesn't have
    memory and the driver doesn't initialize an instance for it:
    
      EDAC amd64: F17h detected (node 0).
      ...
      EDAC amd64: Node 0: No DIMMs detected.
    
    But looking up node instances is not really needed - all one needs is
    the pointer to the proper device which gets discovered during instance
    init.
    
    So stash that pointer into a variable and use it when setting up the
    EDAC PCI component.
    
    Clear that variable when the driver needs to unwind due to some
    instances failing init to avoid any registration imbalance.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/20201122150815.13808-1-bp@alien8.de
    706657b1
amd64_edac.c 93.8 KB