changeset 12989:19cd6b4c098c

6961818 panic while increasing stress on appliance
author Jesse Butler <jesse.butler@oracle.com>
date Sat, 31 Jul 2010 21:03:28 -0600
parents 7162c8dfe0ed
children 15a3cd8e01c7
files usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_scsa.h
diffstat 2 files changed, 13 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c	Fri Jul 30 23:10:58 2010 -0700
+++ b/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c	Sat Jul 31 21:03:28 2010 -0600
@@ -1644,7 +1644,9 @@
 		if (xp->dtype == SAS) {
 			pwrk->ptr = (void *) pmcs_SAS_done;
 			if ((rval = pmcs_SAS_run(sp, pwrk)) != 0) {
-				sp->cmd_tag = NULL;
+				if (rval != PMCS_WQ_RUN_FAIL_RES_CMP) {
+					sp->cmd_tag = NULL;
+				}
 				pmcs_dec_phy_ref_count(phyp);
 				pmcs_pwork(pwp, pwrk);
 				SCHEDULE_WORK(pwp, PMCS_WORK_RUN_QUEUES);
@@ -1900,6 +1902,7 @@
 			if (STAILQ_EMPTY(&xp->wq)) {
 				STAILQ_INSERT_HEAD(&xp->wq, sp, cmd_next);
 				mutex_exit(&xp->wqlock);
+				return (PMCS_WQ_RUN_FAIL_RES);
 			} else {
 				mutex_exit(&xp->wqlock);
 				CMD2PKT(sp)->pkt_scbp[0] = STATUS_QFULL;
@@ -1907,6 +1910,7 @@
 				CMD2PKT(sp)->pkt_state |= STATE_GOT_BUS |
 				    STATE_GOT_TARGET | STATE_SENT_CMD |
 				    STATE_GOT_STATUS;
+				sp->cmd_tag = NULL;
 				mutex_enter(&pwp->cq_lock);
 				STAILQ_INSERT_TAIL(&pwp->cq, sp, cmd_next);
 				PMCS_CQ_RUN_LOCKED(pwp);
@@ -1914,8 +1918,8 @@
 				pmcs_prt(pwp, PMCS_PRT_DEBUG, NULL, xp,
 				    "%s: Failed to dma_load for tgt %d (QF)",
 				    __func__, xp->target_num);
+				return (PMCS_WQ_RUN_FAIL_RES_CMP);
 			}
-			return (PMCS_WQ_RUN_FAIL_RES);
 		}
 	} else {
 		ptr[4] = LE_32(PMCIN_DATADIR_NONE);
--- a/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_scsa.h	Fri Jul 30 23:10:58 2010 -0700
+++ b/usr/src/uts/common/sys/scsi/adapters/pmcs/pmcs_scsa.h	Sat Jul 31 21:03:28 2010 -0600
@@ -17,10 +17,9 @@
  * information: Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
- *
- *
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
+ */
+/*
+ * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 /*
  * SCSI (SCSA) midlayer interface for PMC drier.
@@ -67,9 +66,10 @@
 #define	SCSA_STSLEN(sp)		sp->cmd_pkt->pkt_scblen
 #define	SCSA_TGTLEN(sp)		sp->cmd_pkt->pkt_tgtlen
 
-#define	PMCS_WQ_RUN_SUCCESS	0
-#define	PMCS_WQ_RUN_FAIL_RES	1 /* Failed to alloc rsrcs (e.g. DMA chunks) */
-#define	PMCS_WQ_RUN_FAIL_OTHER	2 /* Any other failure */
+#define	PMCS_WQ_RUN_SUCCESS		0
+#define	PMCS_WQ_RUN_FAIL_RES		1 /* Failed to alloc rsrcs */
+#define	PMCS_WQ_RUN_FAIL_RES_CMP	2 /* Failed rsrcs, but put on the CQ */
+#define	PMCS_WQ_RUN_FAIL_OTHER		3 /* Any other failure */
 
 int pmcs_scsa_init(pmcs_hw_t *, const ddi_dma_attr_t *);