Author: mav
Date: Sun Feb 14 12:27:49 2010
New Revision: 203870
URL: http://svn.freebsd.org/changeset/base/203870

Log:
  MFp4:
  After last running command completed, give commands in timeout state
  second time.

Modified:
  head/sys/dev/siis/siis.c

Modified: head/sys/dev/siis/siis.c
==============================================================================
--- head/sys/dev/siis/siis.c    Sun Feb 14 12:25:39 2010        (r203869)
+++ head/sys/dev/siis/siis.c    Sun Feb 14 12:27:49 2010        (r203870)
@@ -1074,6 +1074,28 @@ siis_process_timeout(device_t dev)
        }
 }
 
+/* Must be called with channel locked. */
+static void
+siis_rearm_timeout(device_t dev)
+{
+       struct siis_channel *ch = device_get_softc(dev);
+       int i;
+
+       mtx_assert(&ch->mtx, MA_OWNED);
+       for (i = 0; i < SIIS_MAX_SLOTS; i++) {
+               struct siis_slot *slot = &ch->slot[i];
+
+               /* Do we have a running request on slot? */
+               if (slot->state < SIIS_SLOT_RUNNING)
+                       continue;
+               if ((ch->toslots & (1 << i)) == 0)
+                       continue;
+               callout_reset(&slot->timeout,
+                   (int)slot->ccb->ccb_h.timeout * hz / 1000,
+                   (timeout_t*)siis_timeout, slot);
+       }
+}
+
 /* Locked by callout mechanism. */
 static void
 siis_timeout(struct siis_slot *slot)
@@ -1235,8 +1257,9 @@ siis_end_transaction(struct siis_slot *s
                                siis_issue_read_log(dev);
                }
        /* If all the reset of commands are in timeout - abort them. */
-       } else if ((ch->rslots & ~ch->toslots) == 0)
-               siis_process_timeout(dev);
+       } else if ((ch->rslots & ~ch->toslots) == 0 &&
+           et != SIIS_ERR_TIMEOUT)
+               siis_rearm_timeout(dev);
 }
 
 static void
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to