• James Smart's avatar
    Fix nvme initiator handling when not enabled. · 4410a67a
    James Smart authored
    Fix nvme initiator handline when CONFIG_LPFC_NVME_INITIATOR is not enabled.
    
    With update nvme upstream driver sources, loading
    the driver with nvme enabled resulting in this Oops.
    
     BUG: unable to handle kernel NULL pointer dereference at 0000000000000018
     IP: lpfc_nvme_update_localport+0x23/0xd0 [lpfc]
     PGD 0
     Oops: 0000 [#1] SMP
     CPU: 0 PID: 10256 Comm: lpfc_worker_0 Tainted
     Hardware name: ...
     task: ffff881028191c40 task.stack: ffff880ffdf00000
     RIP: 0010:lpfc_nvme_update_localport+0x23/0xd0 [lpfc]
     RSP: 0018:ffff880ffdf03c20 EFLAGS: 00010202
    
    Cause: As the initiator driver completes discovery at different stages,
    it call lpfc_nvme_update_localport to hint that the DID and role may have
    changed.  In the implementation of lpfc_nvme_update_localport, the driver
    was not validating the localport or the lport during the execution
    of the update_localport routine.  With the recent upstream additions to
    the driver, the create_localport routine didn't run and so the localport
    was NULL causing the page-fault Oops.
    
    Fix: Add the CONFIG_LPFC_NVME_INITIATOR preprocessor inclusions to
    lpfc_nvme_update_localport to turn off all routine processing when
    the running kernel does not have NVME configured.  Add NULL pointer
    checks on the localport and lport in lpfc_nvme_update_localport and
    dump messages if they are NULL and just exit.
    Also one alingment issue fixed.
    Repalces the ifdef with the IS_ENABLED macro.
    Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
    Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
    Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
    4410a67a
lpfc_nvme.c 78.1 KB