Author: mav
Date: Tue Nov 17 19:36:06 2009
New Revision: 199420
URL: http://svn.freebsd.org/changeset/base/199420

Log:
  MFC r197838:
  On command timeout handle frozen command first, to not run it inside
  XXX_end_transaction().

Modified:
  stable/8/sys/dev/ahci/ahci.c
  stable/8/sys/dev/siis/siis.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/dev/ahci/ahci.c
==============================================================================
--- stable/8/sys/dev/ahci/ahci.c        Tue Nov 17 19:35:39 2009        
(r199419)
+++ stable/8/sys/dev/ahci/ahci.c        Tue Nov 17 19:36:06 2009        
(r199420)
@@ -1259,15 +1259,16 @@ ahci_timeout(struct ahci_slot *slot)
 
        if (!ch->readlog)
                xpt_freeze_simq(ch->sim, ch->numrslots);
-       /* Handle command with timeout. */
-       ahci_end_transaction(&ch->slot[slot->slot], AHCI_ERR_TIMEOUT);
-       /* Handle the rest of commands. */
+       /* Handle frozen command. */
        if (ch->frozen) {
                union ccb *fccb = ch->frozen;
                ch->frozen = NULL;
                fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ;
                xpt_done(fccb);
        }
+       /* Handle command with timeout. */
+       ahci_end_transaction(&ch->slot[slot->slot], AHCI_ERR_TIMEOUT);
+       /* Handle the rest of commands. */
        for (i = 0; i < ch->numslots; i++) {
                /* Do we have a running request on slot? */
                if (ch->slot[i].state < AHCI_SLOT_RUNNING)

Modified: stable/8/sys/dev/siis/siis.c
==============================================================================
--- stable/8/sys/dev/siis/siis.c        Tue Nov 17 19:35:39 2009        
(r199419)
+++ stable/8/sys/dev/siis/siis.c        Tue Nov 17 19:36:06 2009        
(r199420)
@@ -982,15 +982,16 @@ device_printf(dev, "%s is %08x ss %08x r
 
        if (!ch->readlog)
                xpt_freeze_simq(ch->sim, ch->numrslots);
-       /* Handle command with timeout. */
-       siis_end_transaction(&ch->slot[slot->slot], SIIS_ERR_TIMEOUT);
-       /* Handle the rest of commands. */
+       /* Handle frozen command. */
        if (ch->frozen) {
                union ccb *fccb = ch->frozen;
                ch->frozen = NULL;
                fccb->ccb_h.status = CAM_REQUEUE_REQ | CAM_RELEASE_SIMQ;
                xpt_done(fccb);
        }
+       /* Handle command with timeout. */
+       siis_end_transaction(&ch->slot[slot->slot], SIIS_ERR_TIMEOUT);
+       /* Handle the rest of commands. */
        for (i = 0; i < SIIS_MAX_SLOTS; i++) {
                /* Do we have a running request on slot? */
                if (ch->slot[i].state < SIIS_SLOT_RUNNING)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to