svn commit: r316169 - stable/10/sys/dev/isp
Alexander Motin
mav at FreeBSD.org
Wed Mar 29 16:17:11 UTC 2017
Author: mav
Date: Wed Mar 29 16:17:10 2017
New Revision: 316169
URL: https://svnweb.freebsd.org/changeset/base/316169
Log:
MFC r315545: Remove hackish code delaying ATIOs to unknown virtual port.
Since we support RQSTYPE_RPT_ID_ACQ, that functionality is only useful
in loop mode, which probably doesn't worth having this hack in 2017.
Modified:
stable/10/sys/dev/isp/isp.c
stable/10/sys/dev/isp/isp_freebsd.c
stable/10/sys/dev/isp/isp_target.c
stable/10/sys/dev/isp/ispvar.h
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/isp/isp.c
==============================================================================
--- stable/10/sys/dev/isp/isp.c Wed Mar 29 16:16:39 2017 (r316168)
+++ stable/10/sys/dev/isp/isp.c Wed Mar 29 16:17:10 2017 (r316169)
@@ -1323,7 +1323,6 @@ isp_init(ispsoftc_t *isp)
} else {
isp_scsi_init(isp);
}
- GET_NANOTIME(&isp->isp_init_time);
}
static void
@@ -2368,7 +2367,6 @@ isp_fc_enable_vp(ispsoftc_t *isp, int ch
__func__, chan, vp.vp_mod_hdr.rqs_flags, vp.vp_mod_status);
return (EIO);
}
- GET_NANOTIME(&isp->isp_init_time);
return (0);
}
@@ -5655,7 +5653,6 @@ isp_parse_async_fc(ispsoftc_t *isp, uint
* These are broadcast events that have to be sent across
* all active channels.
*/
- GET_NANOTIME(&isp->isp_init_time);
for (chan = 0; chan < isp->isp_nchan; chan++) {
fcp = FCPARAM(isp, chan);
int topo = fcp->isp_topo;
@@ -5710,7 +5707,6 @@ isp_parse_async_fc(ispsoftc_t *isp, uint
* This is a broadcast event that has to be sent across
* all active channels.
*/
- GET_NANOTIME(&isp->isp_init_time);
for (chan = 0; chan < isp->isp_nchan; chan++) {
fcp = FCPARAM(isp, chan);
if (fcp->role == ISP_ROLE_NONE)
@@ -5750,7 +5746,6 @@ isp_parse_async_fc(ispsoftc_t *isp, uint
* This is a broadcast event that has to be sent across
* all active channels.
*/
- GET_NANOTIME(&isp->isp_init_time);
for (chan = 0; chan < isp->isp_nchan; chan++) {
fcp = FCPARAM(isp, chan);
if (fcp->role == ISP_ROLE_NONE)
@@ -5942,7 +5937,6 @@ isp_handle_other_response(ispsoftc_t *is
portid = (uint32_t)rid.ridacq_vp_port_hi << 16 |
rid.ridacq_vp_port_lo;
if (rid.ridacq_format == 0) {
- GET_NANOTIME(&isp->isp_init_time);
for (chan = 0; chan < isp->isp_nchan; chan++) {
fcparam *fcp = FCPARAM(isp, chan);
if (fcp->role == ISP_ROLE_NONE)
Modified: stable/10/sys/dev/isp/isp_freebsd.c
==============================================================================
--- stable/10/sys/dev/isp/isp_freebsd.c Wed Mar 29 16:16:39 2017 (r316168)
+++ stable/10/sys/dev/isp/isp_freebsd.c Wed Mar 29 16:17:10 2017 (r316169)
@@ -1817,44 +1817,17 @@ isp_handle_platform_atio7(ispsoftc_t *is
sid = (aep->at_hdr.s_id[0] << 16) | (aep->at_hdr.s_id[1] << 8) | aep->at_hdr.s_id[2];
lun = CAM_EXTLUN_BYTE_SWIZZLE(be64dec(aep->at_cmnd.fcp_cmnd_lun));
- /*
- * Find the N-port handle, and Virtual Port Index for this command.
- *
- * If we can't, we're somewhat in trouble because we can't actually respond w/o that information.
- * We also, as a matter of course, need to know the WWN of the initiator too.
- */
if (ISP_CAP_MULTI_ID(isp) && isp->isp_nchan > 1) {
- /*
- * Find the right channel based upon D_ID
- */
+ /* Channel has to be derived from D_ID */
isp_find_chan_by_did(isp, did, &chan);
-
if (chan == ISP_NOCHAN) {
- NANOTIME_T now;
-
- /*
- * If we don't recognizer our own D_DID, terminate the exchange, unless we're within 2 seconds of startup
- * It's a bit tricky here as we need to stash this command *somewhere*.
- */
- GET_NANOTIME(&now);
- if (NANOTIME_SUB(&now, &isp->isp_init_time) > 2000000000ULL) {
- isp_prt(isp, ISP_LOGWARN, "%s: [RX_ID 0x%x] D_ID %x not found on any channel- dropping", __func__, aep->at_rxid, did);
- isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, ECMD_TERMINATE, 0);
- return;
- }
- tptr = get_lun_statep(isp, 0, 0);
- if (tptr == NULL) {
- tptr = get_lun_statep(isp, 0, CAM_LUN_WILDCARD);
- if (tptr == NULL) {
- isp_prt(isp, ISP_LOGWARN, "%s: [RX_ID 0x%x] D_ID %x not found on any channel and no tptr- dropping", __func__, aep->at_rxid, did);
- isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, ECMD_TERMINATE, 0);
- return;
- }
- }
- isp_prt(isp, ISP_LOGWARN, "%s: [RX_ID 0x%x] D_ID %x not found on any channel- deferring", __func__, aep->at_rxid, did);
- goto noresrc;
+ isp_prt(isp, ISP_LOGWARN,
+ "%s: [RX_ID 0x%x] D_ID %x not found on any channel",
+ __func__, aep->at_rxid, did);
+ isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN,
+ ECMD_TERMINATE, 0);
+ return;
}
- isp_prt(isp, ISP_LOGTDEBUG0, "%s: [RX_ID 0x%x] D_ID 0x%06x found on Chan %d for S_ID 0x%06x", __func__, aep->at_rxid, did, chan, sid);
} else {
chan = 0;
}
Modified: stable/10/sys/dev/isp/isp_target.c
==============================================================================
--- stable/10/sys/dev/isp/isp_target.c Wed Mar 29 16:16:39 2017 (r316168)
+++ stable/10/sys/dev/isp/isp_target.c Wed Mar 29 16:17:10 2017 (r316169)
@@ -688,8 +688,11 @@ isp_got_tmf_24xx(ispsoftc_t *isp, at7_en
/* Channel has to be derived from D_ID */
isp_find_chan_by_did(isp, did, &chan);
if (chan == ISP_NOCHAN) {
- isp_prt(isp, ISP_LOGWARN, "%s: D_ID 0x%x not found on any channel", __func__, did);
- isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, ECMD_TERMINATE, 0);
+ isp_prt(isp, ISP_LOGWARN,
+ "%s: D_ID 0x%x not found on any channel",
+ __func__, did);
+ isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN,
+ ECMD_TERMINATE, 0);
return;
}
} else {
@@ -891,17 +894,23 @@ isp_handle_abts(ispsoftc_t *isp, abts_t
nt->nt_did = did;
nt->nt_nphdl = abts->abts_nphdl;
nt->nt_sid = sid;
- isp_find_chan_by_did(isp, did, &chan);
- if (chan == ISP_NOCHAN) {
- nt->nt_tgt = TGT_ANY;
- } else {
- nt->nt_tgt = FCPARAM(isp, chan)->isp_wwpn;
- if (isp_find_pdb_by_handle(isp, chan, abts->abts_nphdl, &lp)) {
- nt->nt_wwn = lp->port_wwn;
- } else {
- nt->nt_wwn = INI_ANY;
+ if (ISP_CAP_MULTI_ID(isp) && isp->isp_nchan > 1) {
+ /* Channel has to be derived from D_ID */
+ isp_find_chan_by_did(isp, did, &chan);
+ if (chan == ISP_NOCHAN) {
+ isp_prt(isp, ISP_LOGWARN,
+ "%s: D_ID 0x%x not found on any channel",
+ __func__, did);
+ isp_acknak_abts(isp, abts, ENXIO);
+ return;
}
- }
+ } else
+ chan = 0;
+ nt->nt_tgt = FCPARAM(isp, chan)->isp_wwpn;
+ if (isp_find_pdb_by_handle(isp, chan, abts->abts_nphdl, &lp))
+ nt->nt_wwn = lp->port_wwn;
+ else
+ nt->nt_wwn = INI_ANY;
nt->nt_lun = LUN_ANY;
nt->nt_need_ack = 1;
nt->nt_tagval = abts->abts_rxid_task;
Modified: stable/10/sys/dev/isp/ispvar.h
==============================================================================
--- stable/10/sys/dev/isp/ispvar.h Wed Mar 29 16:16:39 2017 (r316168)
+++ stable/10/sys/dev/isp/ispvar.h Wed Mar 29 16:17:10 2017 (r316169)
@@ -544,7 +544,6 @@ struct ispsoftc {
uint32_t isp_rqstoutrp; /* register for REQOUTP */
uint32_t isp_respinrp; /* register for RESINP */
uint32_t isp_respoutrp; /* register for RESOUTP */
- NANOTIME_T isp_init_time; /* time were last initialized */
/*
* Volatile state
More information about the svn-src-stable-10
mailing list