Author: scottl
Date: Sun Mar 24 19:09:50 2019
New Revision: 345479
URL: https://svnweb.freebsd.org/changeset/base/345479

Log:
  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

Modified:
  head/sys/dev/mpr/mpr.c
  head/sys/dev/mps/mps.c

Modified: head/sys/dev/mpr/mpr.c
==============================================================================
--- head/sys/dev/mpr/mpr.c      Sun Mar 24 18:57:03 2019        (r345478)
+++ head/sys/dev/mpr/mpr.c      Sun Mar 24 19:09:50 2019        (r345479)
@@ -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.

Modified: head/sys/dev/mps/mps.c
==============================================================================
--- head/sys/dev/mps/mps.c      Sun Mar 24 18:57:03 2019        (r345478)
+++ head/sys/dev/mps/mps.c      Sun Mar 24 19:09:50 2019        (r345479)
@@ -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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to