Patch "fm10k: request reset when mbx->state changes" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
fm10k: request reset when mbx->state changes
to the 4.4-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:
fm10k-request-reset-when-mbx-state-changes.patch
and it can be found in the queue-4.4 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 Sun Nov 19 12:02:55 CET 2017
From: Ngai-Mint Kwan <[email protected]>
Date: Wed, 2 Nov 2016 16:44:46 -0700
Subject: fm10k: request reset when mbx->state changes
From: Ngai-Mint Kwan <[email protected]>
[ Upstream commit 2f3fc1e6200309ccf87f61dea56e57e563c4f800 ]
Multiple IES API resets can cause a race condition where the mailbox interrupt request bits can be cleared before being handled. This can leave certain mailbox messages from the PF to be untreated and the PF will enter in some inactive state. If this situation occurs, the IES API will initiate a mailbox version reset which, then, trigger a mailbox state change. Once this mailbox transition occurs (from OPEN to CONNECT state), a request for reset will be returned.
This ensures that PF will undergo a reset whenever IES API encounters an unknown global mailbox interrupt event or whenever the IES API terminates.
--- drivers/net/ethernet/intel/fm10k/fm10k_mbx.c | 10 +++++++--- drivers/net/ethernet/intel/fm10k/fm10k_pci.c | 6 +++++- 2 files changed, 12 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/fm10k/fm10k_mbx.c +7 -3
@@ -2002,9 +2002,10 @@ static void fm10k_sm_mbx_create_reply(st* function can also be used to respond to an error as the connection * resetting would also be a means of dealing with errors. **/ -static void fm10k_sm_mbx_process_reset (struct fm10k_hw *hw, -struct fm10k_mbx_info *mbx) +static s32 fm10k_sm_mbx_process_reset (struct fm10k_hw *hw, +struct fm10k_mbx_info *mbx) { +s32 err =0 ;const enum fm10k_mbx_state state = mbx->state;switch (state) {
@@ -2017,6 +2018,7 @@ static void fm10k_sm_mbx_process_reset(scase FM10K_STATE_OPEN :/* flush any incomplete work */ fm10k_sm_mbx_connect_reset (mbx); + err =FM10K_ERR_RESET_REQUESTED ;break ;case FM10K_STATE_CONNECT :/* Update remote value to match local value */
@@ -2026,6 +2028,8 @@ static void fm10k_sm_mbx_process_reset(s }fm10k_sm_mbx_create_reply (hw, mbx, mbx->tail); + +return err; }/**
@@ -2106,7 +2110,7 @@ static s32 fm10k_sm_mbx_process(struct fswitch (FM10K_MSG_HDR_FIELD_GET (mbx->mbx_hdr,SM_VER )) {case 0 : -fm10k_sm_mbx_process_reset (hw, mbx); + err =fm10k_sm_mbx_process_reset (hw, mbx);break ;case FM10K_SM_MBX_VERSION : err =fm10k_sm_mbx_process_version_1 (hw, mbx);
drivers/net/ethernet/intel/fm10k/fm10k_pci.c +5 -1
@@ -1072,6 +1072,7 @@ static irqreturn_t fm10k_msix_mbx_pf(intstruct fm10k_hw *hw = &interface->hw;struct fm10k_mbx_info *mbx = &hw->mbx;u32 eicr; +s32 err =0 ;/* unmask any set bits related to this interrupt */ eicr =fm10k_read_reg (hw,FM10K_EICR );
@@ -1087,12 +1088,15 @@ static irqreturn_t fm10k_msix_mbx_pf(int/* service mailboxes */ if (fm10k_mbx_trylock (interface)) { - mbx->ops.process (hw, mbx); + err = mbx->ops.process (hw, mbx);/* handle VFLRE events */ fm10k_iov_event (interface);fm10k_mbx_unlock (interface); } +if (err ==FM10K_ERR_RESET_REQUESTED ) + interface->flags |=FM10K_FLAG_RESET_REQUESTED ; +/* if switch toggled state we should reset GLORTs */ if (eicr &FM10K_EICR_SWITCHNOTREADY ) {/* force link down for at least 4 seconds */
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/fm10k-request-reset-when-mbx-state-changes.patch