Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77813d0a authored by Kamil Krawczyk's avatar Kamil Krawczyk Committed by Jeff Kirsher
Browse files

i40e/i40evf: ARQ copy desc data even for failed commands



Copy desc and buffer data even for ARQ events which return error status.
Previously, a check for NVM related AQ commands which is done later in this
function would not recognize that such a command was received and would
not clear nvm_busy flag. This would block access to NVM until a driver reset.
This will fix that.

Change-ID: If69ad74e165b56081c0686b97402511d2e2880c0
Signed-off-by: default avatarKamil Krawczyk <kamil.krawczyk@intel.com>
Tested-by: default avatarJim Young <jamesx.m.young@intel.com>
Tested-by: default avatarSibai Li <sibai.li@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent b65476cd
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -979,14 +979,14 @@ i40e_status i40e_clean_arq_element(struct i40e_hw *hw,
			   I40E_DEBUG_AQ_MESSAGE,
			   "AQRX: Event received with error 0x%X.\n",
			   hw->aq.arq_last_status);
	} else {
	}

	e->desc = *desc;
	datalen = le16_to_cpu(desc->datalen);
	e->msg_size = min(datalen, e->msg_size);
	if (e->msg_buf != NULL && (e->msg_size != 0))
		memcpy(e->msg_buf, hw->aq.arq.r.arq_bi[desc_idx].va,
		       e->msg_size);
	}

	i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE, "AQRX: desc and buffer:\n");
	i40e_debug_aq(hw, I40E_DEBUG_AQ_COMMAND, (void *)desc, e->msg_buf);
+7 −7
Original line number Diff line number Diff line
@@ -927,14 +927,14 @@ i40e_status i40evf_clean_arq_element(struct i40e_hw *hw,
			   I40E_DEBUG_AQ_MESSAGE,
			   "AQRX: Event received with error 0x%X.\n",
			   hw->aq.arq_last_status);
	} else {
	}

	e->desc = *desc;
	datalen = le16_to_cpu(desc->datalen);
	e->msg_size = min(datalen, e->msg_size);
	if (e->msg_buf != NULL && (e->msg_size != 0))
		memcpy(e->msg_buf, hw->aq.arq.r.arq_bi[desc_idx].va,
		       e->msg_size);
	}

	if (i40e_is_nvm_update_op(&e->desc))
		hw->aq.nvm_busy = false;