• Zhu Yanjun's avatar
    bnx2x: fix slowpath null crash · 442866ff
    Zhu Yanjun authored
    When "NETDEV WATCHDOG: em4 (bnx2x): transmit queue 2 timed out" occurs,
    BNX2X_SP_RTNL_TX_TIMEOUT is set. In the function bnx2x_sp_rtnl_task,
    bnx2x_nic_unload and bnx2x_nic_load are executed to shutdown and open
    NIC. In the function bnx2x_nic_load, bnx2x_alloc_mem allocates dma
    failure. The message "bnx2x: [bnx2x_alloc_mem:8399(em4)]Can't
    allocate memory" pops out. The variable slowpath is set to NULL.
    When shutdown the NIC, the function bnx2x_nic_unload is called. In
    the function bnx2x_nic_unload, the following functions are executed.
    bnx2x_chip_cleanup
        bnx2x_set_storm_rx_mode
            bnx2x_set_q_rx_mode
                bnx2x_set_q_rx_mode
                    bnx2x_config_rx_mode
                        bnx2x_set_rx_mode_e2
    In the function bnx2x_set_rx_mode_e2, the variable slowpath is operated.
    Then the crash occurs.
    To fix this crash, the variable slowpath is checked. And in the function
    bnx2x_sp_rtnl_task, after dma memory allocation fails, another shutdown
    and open NIC is executed.
    
    CC: Joe Jin <joe.jin@oracle.com>
    CC: Junxiao Bi <junxiao.bi@oracle.com>
    Signed-off-by: default avatarZhu Yanjun <yanjun.zhu@oracle.com>
    Acked-by: default avatarAriel Elior <aelior@cavium.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    442866ff
bnx2x_main.c 420 KB