lkml.org 
[lkml]   [2019]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 212/249] bnxt_en: Disable bus master during PCI shutdown and driver unload.
    Date
    From: Michael Chan <michael.chan@broadcom.com>

    [ Upstream commit c20dc142dd7b2884b8570eeab323bcd4a84294fa ]

    Some chips with older firmware can continue to perform DMA read from
    context memory even after the memory has been freed. In the PCI shutdown
    method, we need to call pci_disable_device() to shutdown DMA to prevent
    this DMA before we put the device into D3hot. DMA memory request in
    D3hot state will generate PCI fatal error. Similarly, in the driver
    remove method, the context memory should only be freed after DMA has
    been shutdown for correctness.

    Fixes: 98f04cf0f1fc ("bnxt_en: Check context memory requirements from firmware.")
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    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 f758b2e0591f..b9bc829aa9da 100644
    --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
    +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
    @@ -10262,10 +10262,10 @@ static void bnxt_remove_one(struct pci_dev *pdev)
    bnxt_dcb_free(bp);
    kfree(bp->edev);
    bp->edev = NULL;
    + bnxt_cleanup_pci(bp);
    bnxt_free_ctx_mem(bp);
    kfree(bp->ctx);
    bp->ctx = NULL;
    - bnxt_cleanup_pci(bp);
    bnxt_free_port_stats(bp);
    free_netdev(dev);
    }
    @@ -10859,6 +10859,7 @@ static void bnxt_shutdown(struct pci_dev *pdev)

    if (system_state == SYSTEM_POWER_OFF) {
    bnxt_clear_int_mode(bp);
    + pci_disable_device(pdev);
    pci_wake_from_d3(pdev, bp->wol);
    pci_set_power_state(pdev, PCI_D3hot);
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-15 16:15    [W:2.518 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site