Patch "bnx2: Wait for in-flight DMA to complete at probe stage" has been added to the 4.8-stable tree
This is a note to let you know that I've just added the patch titled
bnx2: Wait for in-flight DMA to complete at probe stage
to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
bnx2-wait-for-in-flight-dma-to-complete-at-probe-stage.patch
and it can be found in the queue-4.8 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Fri Nov 18 11:35:46 CET 2016
From: Baoquan He <[email protected]>
Date: Sun, 13 Nov 2016 13:01:33 +0800
Subject: bnx2: Wait for in-flight DMA to complete at probe stage
From: Baoquan He <[email protected]>
[ Upstream commit 6df77862f63f389df3b1ad879738e04440d7385d ]
In-flight DMA from 1st kernel could continue going in kdump kernel. New io-page table has been created before bnx2 does reset at open stage. We have to wait for the in-flight DMA to complete to avoid it look up into the newly created io-page table at probe stage.
--- drivers/net/ethernet/broadcom/bnx2.c | 38 +++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-)
drivers/net/ethernet/broadcom/bnx2.c +32 -6
@@ -49,6 +49,7 @@#include <linux/firmware.h> #include <linux/log2.h> #include <linux/aer.h> +#include <linux/crash_dump.h> #if defined(CONFIG_CNIC ) || defined(CONFIG_CNIC_MODULE )#define BCM_CNIC 1
@@ -4759,15 +4760,16 @@ bnx2_setup_msix_tbl(struct bnx2 *bp)BNX2_WR (bp,BNX2_PCI_GRC_WINDOW3_ADDR ,BNX2_MSIX_PBA_ADDR ); } -static int -bnx2_reset_chip (struct bnx2 *bp,u32 reset_code) +static void +bnx2_wait_dma_complete (struct bnx2 *bp) {u32 val; -int i, rc =0 ; -u8 old_port; +int i; -/* Wait for the current PCI transaction to complete before -* issuing a reset. */ +/* +* Wait for the current PCI transaction to complete before +* issuing a reset. +*/ if ((BNX2_CHIP (bp) ==BNX2_CHIP_5706 ) || (BNX2_CHIP (bp) ==BNX2_CHIP_5708 )) { BNX2_WR(bp, BNX2_MISC_ENABLE_CLR_BITS,
@@ -4791,6 +4793,21 @@ bnx2_reset_chip(struct bnx2 *bp, u32 res } } +return ; +} + + +static int +bnx2_reset_chip (struct bnx2 *bp,u32 reset_code) +{ +u32 val; +int i, rc =0 ; +u8 old_port; + +/* Wait for the current PCI transaction to complete before +* issuing a reset. */ +bnx2_wait_dma_complete (bp); +/* Wait for the firmware to tell us it is ok to issue a reset. */ bnx2_fw_sync (bp,BNX2_DRV_MSG_DATA_WAIT0 | reset_code,1 ,1 );
@@ -8575,6 +8592,15 @@ bnx2_init_one(struct pci_dev *pdev, conspci_set_drvdata (pdev, dev); +/* +* In-flight DMA from 1st kernel could continue going in kdump kernel. +* New io-page table has been created before bnx2 does reset at open stage. +* We have to wait for the in-flight DMA to complete to avoid it look up +* into the newly created io-page table. +*/ +if (is_kdump_kernel ()) +bnx2_wait_dma_complete (bp); +memcpy (dev->dev_addr, bp->mac_addr,ETH_ALEN ); dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG |
Patches currently in stable-queue which might be from [email protected] are
queue-4.8/revert-bnx2-reset-device-during-driver-initialization.patch queue-4.8/bnx2-wait-for-in-flight-dma-to-complete-at-probe-stage.patch