Commit b4661739c67acd15a02f8e112f8cc52d24b609ed

Authored by Eilon Greenstein
Committed by David S. Miller
1 parent 693fc0d143

bnx2x: Potential race after iSCSI boot

The lock was release too soon. Make sure the HW is marked as locked until the
boot driver was unloaded from FW perspective

Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 9 additions and 5 deletions Side-by-side Diff

drivers/net/bnx2x_main.c
... ... @@ -6874,10 +6874,6 @@
6874 6874 */
6875 6875 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
6876 6876 val = REG_RD(bp, DORQ_REG_NORM_CID_OFST);
6877   - if (val == 0x7)
6878   - REG_WR(bp, DORQ_REG_NORM_CID_OFST, 0);
6879   - bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
6880   -
6881 6877 if (val == 0x7) {
6882 6878 u32 reset_code = DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS;
6883 6879 /* save our func */
... ... @@ -6885,6 +6881,9 @@
6885 6881 u32 swap_en;
6886 6882 u32 swap_val;
6887 6883  
  6884 + /* clear the UNDI indication */
  6885 + REG_WR(bp, DORQ_REG_NORM_CID_OFST, 0);
  6886 +
6888 6887 BNX2X_DEV_INFO("UNDI is active! reset device\n");
6889 6888  
6890 6889 /* try unload UNDI on port 0 */
... ... @@ -6910,6 +6909,9 @@
6910 6909 bnx2x_fw_command(bp, reset_code);
6911 6910 }
6912 6911  
  6912 + /* now it's safe to release the lock */
  6913 + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
  6914 +
6913 6915 REG_WR(bp, (BP_PORT(bp) ? HC_REG_CONFIG_1 :
6914 6916 HC_REG_CONFIG_0), 0x1000);
6915 6917  
... ... @@ -6954,7 +6956,9 @@
6954 6956 bp->fw_seq =
6955 6957 (SHMEM_RD(bp, func_mb[bp->func].drv_mb_header) &
6956 6958 DRV_MSG_SEQ_NUMBER_MASK);
6957   - }
  6959 +
  6960 + } else
  6961 + bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
6958 6962 }
6959 6963 }
6960 6964