--- a/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c Thu Aug 12 13:32:15 2010 -0600
+++ b/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_scsa.c Thu Aug 12 14:52:21 2010 -0600
@@ -1118,6 +1118,8 @@
pmcs_unlock_phy(pptr);
WAIT_FOR(pwrk, smp_pkt->smp_pkt_timeout * 1000, result);
pmcs_pwork(pwp, pwrk);
+ pmcs_smp_release(iport);
+ pmcs_rele_iport(iport);
pmcs_lock_phy(pptr);
if (result) {
pmcs_timed_out(pwp, htag, __func__);
@@ -1130,15 +1132,11 @@
"%s: Issuing SMP ABORT for htag 0x%08x",
__func__, htag);
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
pmcs_unlock_phy(pptr);
pmcs_release_scratch(pwp);
smp_pkt->smp_pkt_reason = ETIMEDOUT;
return (DDI_FAILURE);
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
status = LE_32(msg[2]);
if (status == PMCOUT_STATUS_OVERFLOW) {
status = PMCOUT_STATUS_OK;
--- a/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_subr.c Thu Aug 12 13:32:15 2010 -0600
+++ b/usr/src/uts/common/io/scsi/adapters/pmcs/pmcs_subr.c Thu Aug 12 14:52:21 2010 -0600
@@ -846,6 +846,8 @@
pmcs_unlock_phy(pptr);
WAIT_FOR(pwrk, 1000, result);
pmcs_pwork(pwp, pwrk);
+ pmcs_smp_release(iport);
+ pmcs_rele_iport(iport);
pmcs_lock_phy(pptr);
if (result) {
pmcs_prt(pwp, PMCS_PRT_DEBUG, pptr, NULL, pmcs_timeo, __func__);
@@ -859,12 +861,8 @@
"%s: Issuing SMP ABORT for htag 0x%08x",
__func__, htag);
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
return (EIO);
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
status = LE_32(iomb[stsoff]);
if (status != PMCOUT_STATUS_OK) {
@@ -4221,6 +4219,8 @@
pmcs_unlock_phy(pptr);
WAIT_FOR(pwrk, 1000, result);
pmcs_pwork(pwp, pwrk);
+ pmcs_smp_release(iport);
+ pmcs_rele_iport(iport);
pmcs_lock_phy(pptr);
if (result) {
pmcs_timed_out(pwp, htag, __func__);
@@ -4231,13 +4231,9 @@
"%s: SMP ABORT failed for cmd (htag 0x%08x)",
__func__, htag);
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
result = 0;
goto out;
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
mutex_enter(&pwp->config_lock);
if (pwp->config_changed) {
@@ -4457,6 +4453,8 @@
pmcs_unlock_phy(expander);
WAIT_FOR(pwrk, 1000, result);
pmcs_pwork(pwp, pwrk);
+ pmcs_smp_release(iport);
+ pmcs_rele_iport(iport);
pmcs_lock_phy(expander);
if (result) {
pmcs_prt(pwp, PMCS_PRT_DEBUG_CONFIG, pptr, NULL,
@@ -4466,13 +4464,9 @@
"%s: SMP ABORT failed for cmd (htag 0x%08x)",
__func__, htag);
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
result = -ETIMEDOUT;
goto out;
}
- pmcs_smp_release(iport);
- pmcs_rele_iport(iport);
mutex_enter(&pwp->config_lock);
if (pwp->config_changed) {