mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 21:02:19 +00:00
i40e: fix up NVM update sm error handling
The state transitions after an error were not managed well, so these changes get us back to the INIT state or don't transition out of the INIT state after most errors. Change-ID: I90aa0e4e348dc4f58cbcdce9c5d4b7fd35981c6c Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Acked-by: Michal Kosiarz <michal.kosiarz@intel.com> Tested-by: Jim Young <jamesx.m.young@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
c509c1decb
commit
0fdd052c8c
@ -535,7 +535,10 @@ static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw,
|
||||
*errno = i40e_aq_rc_to_posix(hw->aq.asq_last_status);
|
||||
} else {
|
||||
status = i40e_nvmupd_nvm_read(hw, cmd, bytes, errno);
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_READING;
|
||||
if (status)
|
||||
i40e_release_nvm(hw);
|
||||
else
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_READING;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -571,7 +574,10 @@ static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw,
|
||||
*errno = i40e_aq_rc_to_posix(hw->aq.asq_last_status);
|
||||
} else {
|
||||
status = i40e_nvmupd_nvm_write(hw, cmd, bytes, errno);
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_WRITING;
|
||||
if (status)
|
||||
i40e_release_nvm(hw);
|
||||
else
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_WRITING;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -671,32 +677,32 @@ static i40e_status i40e_nvmupd_state_writing(struct i40e_hw *hw,
|
||||
|
||||
case I40E_NVMUPD_WRITE_LCB:
|
||||
status = i40e_nvmupd_nvm_write(hw, cmd, bytes, errno);
|
||||
if (!status) {
|
||||
if (!status)
|
||||
hw->aq.nvm_release_on_done = true;
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT;
|
||||
}
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT;
|
||||
break;
|
||||
|
||||
case I40E_NVMUPD_CSUM_CON:
|
||||
status = i40e_update_nvm_checksum(hw);
|
||||
if (status)
|
||||
*errno = hw->aq.asq_last_status ?
|
||||
i40e_aq_rc_to_posix(hw->aq.asq_last_status) :
|
||||
-EIO;
|
||||
break;
|
||||
|
||||
case I40E_NVMUPD_CSUM_LCB:
|
||||
status = i40e_update_nvm_checksum(hw);
|
||||
if (status) {
|
||||
*errno = hw->aq.asq_last_status ?
|
||||
i40e_aq_rc_to_posix(hw->aq.asq_last_status) :
|
||||
-EIO;
|
||||
} else {
|
||||
hw->aq.nvm_release_on_done = true;
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT;
|
||||
}
|
||||
break;
|
||||
|
||||
case I40E_NVMUPD_CSUM_LCB:
|
||||
status = i40e_update_nvm_checksum(hw);
|
||||
if (status)
|
||||
*errno = hw->aq.asq_last_status ?
|
||||
i40e_aq_rc_to_posix(hw->aq.asq_last_status) :
|
||||
-EIO;
|
||||
else
|
||||
hw->aq.nvm_release_on_done = true;
|
||||
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT;
|
||||
break;
|
||||
|
||||
default:
|
||||
i40e_debug(hw, I40E_DEBUG_NVM,
|
||||
"NVMUPD: bad cmd %s in writing state.\n",
|
||||
|
Loading…
Reference in New Issue
Block a user