• Frederic Barrat's avatar
    powerpc/powernv/eeh: Fix oops when probing cxl devices · a8a30219
    Frederic Barrat authored
    Recent cleanup in the way EEH support is added to a device causes a
    kernel oops when the cxl driver probes a device and creates virtual
    devices discovered on the FPGA:
    
      BUG: Kernel NULL pointer dereference at 0x000000a0
      Faulting instruction address: 0xc000000000048070
      Oops: Kernel access of bad area, sig: 7 [#1]
      ...
      NIP eeh_add_device_late.part.9+0x50/0x1e0
      LR  eeh_add_device_late.part.9+0x3c/0x1e0
      Call Trace:
        _dev_info+0x5c/0x6c (unreliable)
        pnv_pcibios_bus_add_device+0x60/0xb0
        pcibios_bus_add_device+0x40/0x60
        pci_bus_add_device+0x30/0x100
        pci_bus_add_devices+0x64/0xd0
        cxl_pci_vphb_add+0xe0/0x130 [cxl]
        cxl_probe+0x504/0x5b0 [cxl]
        local_pci_probe+0x6c/0x110
        work_for_cpu_fn+0x38/0x60
    
    The root cause is that those cxl virtual devices don't have a
    representation in the device tree and therefore no associated pci_dn
    structure. In eeh_add_device_late(), pdn is NULL, so edev is NULL and
    we oops.
    
    We never had explicit support for EEH for those virtual devices.
    Instead, EEH events are reported to the (real) pci device and handled
    by the cxl driver. Which can then forward to the virtual devices and
    handle dependencies. The fact that we try adding EEH support for the
    virtual devices is new and a side-effect of the recent cleanup.
    
    This patch fixes it by skipping adding EEH support on powernv for
    devices which don't have a pci_dn structure.
    
    The cxl driver doesn't create virtual devices on pseries so this patch
    doesn't fix it there intentionally.
    
    Fixes: b905f8cd ("powerpc/eeh: EEH for pSeries hot plug")
    Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
    Reviewed-by: default avatarSam Bobroff <sbobroff@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20191016162833.22509-1-fbarrat@linux.ibm.com
    a8a30219
eeh-powernv.c 44.6 KB