r329522 created problemss with commands that enter the TIMEDOUT state but

are successfully returned by the card (usually due to an abort being issued
as part of timeout recovery). Remove what amounts to an insufficient
KASSERT, and don't overwrite the state value. State should probably be
re-designed, and that will be done with a future commit.

Reported by:	phk, bei.io
Reviewed by:	imp, mav
Differential Revision:	D19677
This commit is contained in:
Scott Long 2019-03-24 19:09:50 +00:00
parent fbc6daa1dc
commit 37b807ff36
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=345479
2 changed files with 4 additions and 7 deletions

View File

@ -2617,10 +2617,8 @@ mpr_intr_locked(void *data)
} else {
cm = &sc->commands[
le16toh(desc->AddressReply.SMID)];
KASSERT(cm->cm_state == MPR_CM_STATE_INQUEUE,
("command SMID %d not inqueue\n",
desc->AddressReply.SMID));
cm->cm_state = MPR_CM_STATE_BUSY;
if (cm->cm_state != MPR_CM_STATE_TIMEDOUT)
cm->cm_state = MPR_CM_STATE_BUSY;
cm->cm_reply = reply;
cm->cm_reply_data =
le32toh(desc->AddressReply.

View File

@ -2481,9 +2481,8 @@ mps_intr_locked(void *data)
} else {
cm = &sc->commands[
le16toh(desc->AddressReply.SMID)];
KASSERT(cm->cm_state == MPS_CM_STATE_INQUEUE,
("command not inqueue\n"));
cm->cm_state = MPS_CM_STATE_BUSY;
if (cm->cm_state != MPS_MPS_STATE_TIMEDOUT)
cm->cm_state = MPS_CM_STATE_BUSY;
cm->cm_reply = reply;
cm->cm_reply_data = le32toh(
desc->AddressReply.ReplyFrameAddress);