lkml.org 
[lkml]   [2018]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.14 044/100] bnxt_en: Need to unconditionally shut down RoCE in bnxt_shutdown
    Date
    From: Ray Jui <ray.jui@broadcom.com>

    [ Upstream commit a7f3f939dd7d8398acebecd1ceb2e9e7ffbe91d2 ]

    The current 'bnxt_shutdown' implementation only invokes
    'bnxt_ulp_shutdown' to shut down RoCE in the case when the system is in
    the path of power off (SYSTEM_POWER_OFF). While this may work in most
    cases, it does not work in the smart NIC case, when Linux 'reboot'
    command is initiated from the Linux that runs on the ARM cores of the
    NIC card. In this particular case, Linux 'reboot' results in a system
    'L3' level reset where the entire ARM and associated subsystems are
    being reset, but at the same time, Nitro core is being kept in sane state
    (to allow external PCIe connected servers to continue to work). Without
    properly shutting down RoCE and freeing all associated resources, it
    results in the ARM core to hang immediately after the 'reboot'

    By always invoking 'bnxt_ulp_shutdown' in 'bnxt_shutdown', it fixes the
    above issue

    Fixes: 0efd2fc65c92 ("bnxt_en: Add a callback to inform RDMA driver during PCI shutdown.")

    Signed-off-by: Ray Jui <ray.jui@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
    index aa764c5e3c6b..b66689a6eac0 100644
    --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
    +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
    @@ -8218,8 +8218,9 @@ static void bnxt_shutdown(struct pci_dev *pdev)
    if (netif_running(dev))
    dev_close(dev);

    + bnxt_ulp_shutdown(bp);
    +
    if (system_state == SYSTEM_POWER_OFF) {
    - bnxt_ulp_shutdown(bp);
    bnxt_clear_int_mode(bp);
    pci_wake_from_d3(pdev, bp->wol);
    pci_set_power_state(pdev, PCI_D3hot);
    --
    2.11.0
    \
     
     \ /
      Last update: 2018-01-29 00:08    [W:4.432 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site