Mercurial > illumos > illumos-gate
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 *);