isp_freebsd.c (285147) | isp_freebsd.c (285154) |
---|---|
1/*- 2 * Copyright (c) 1997-2009 by Matthew Jacob 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * Platform (FreeBSD) dependent common attachment code for Qlogic adapters. 29 */ 30#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1997-2009 by Matthew Jacob 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * Platform (FreeBSD) dependent common attachment code for Qlogic adapters. 29 */ 30#include <sys/cdefs.h> |
31__FBSDID("$FreeBSD: head/sys/dev/isp/isp_freebsd.c 285147 2015-07-04 18:51:54Z mav $"); | 31__FBSDID("$FreeBSD: head/sys/dev/isp/isp_freebsd.c 285154 2015-07-05 02:09:46Z mav $"); |
32 33#include <dev/isp/isp_freebsd.h> 34#include <sys/unistd.h> 35#include <sys/kthread.h> 36#include <sys/conf.h> 37#include <sys/module.h> 38#include <sys/ioccom.h> 39#include <dev/isp/isp_ioctl.h> --- 4639 unchanged lines hidden (view full) --- 4679 4680static void 4681isp_gdt_task(void *arg, int pending) 4682{ 4683 struct isp_fc *fc = arg; 4684 ispsoftc_t *isp = fc->isp; 4685 int chan = fc - isp->isp_osinfo.pc.fc; 4686 fcportdb_t *lp; | 32 33#include <dev/isp/isp_freebsd.h> 34#include <sys/unistd.h> 35#include <sys/kthread.h> 36#include <sys/conf.h> 37#include <sys/module.h> 38#include <sys/ioccom.h> 39#include <dev/isp/isp_ioctl.h> --- 4639 unchanged lines hidden (view full) --- 4679 4680static void 4681isp_gdt_task(void *arg, int pending) 4682{ 4683 struct isp_fc *fc = arg; 4684 ispsoftc_t *isp = fc->isp; 4685 int chan = fc - isp->isp_osinfo.pc.fc; 4686 fcportdb_t *lp; |
4687 int dbidx, tgt, more_to_do = 0; | 4687 int dbidx, more_to_do = 0; |
4688 4689 ISP_LOCK(isp); 4690 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d GDT timer expired", chan); 4691 for (dbidx = 0; dbidx < MAX_FC_TARG; dbidx++) { 4692 lp = &FCPARAM(isp, chan)->portdb[dbidx]; 4693 4694 if (lp->state != FC_PORTDB_STATE_ZOMBIE) { 4695 continue; 4696 } 4697 if (lp->dev_map_idx == 0 || lp->target_mode) { 4698 continue; 4699 } 4700 if (lp->gone_timer != 0) { 4701 isp_prt(isp, ISP_LOG_SANCFG, "%s: Chan %d more to do for target %u (timer=%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer); 4702 lp->gone_timer -= 1; 4703 more_to_do++; 4704 continue; 4705 } | 4688 4689 ISP_LOCK(isp); 4690 isp_prt(isp, ISP_LOGDEBUG0, "Chan %d GDT timer expired", chan); 4691 for (dbidx = 0; dbidx < MAX_FC_TARG; dbidx++) { 4692 lp = &FCPARAM(isp, chan)->portdb[dbidx]; 4693 4694 if (lp->state != FC_PORTDB_STATE_ZOMBIE) { 4695 continue; 4696 } 4697 if (lp->dev_map_idx == 0 || lp->target_mode) { 4698 continue; 4699 } 4700 if (lp->gone_timer != 0) { 4701 isp_prt(isp, ISP_LOG_SANCFG, "%s: Chan %d more to do for target %u (timer=%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer); 4702 lp->gone_timer -= 1; 4703 more_to_do++; 4704 continue; 4705 } |
4706 tgt = lp->dev_map_idx - 1; 4707 FCPARAM(isp, chan)->isp_dev_map[tgt] = 0; | |
4708 lp->dev_map_idx = 0; 4709 lp->state = FC_PORTDB_STATE_NIL; | 4706 lp->dev_map_idx = 0; 4707 lp->state = FC_PORTDB_STATE_NIL; |
4710 isp_prt(isp, ISP_LOGCONFIG, prom3, chan, lp->portid, tgt, "Gone Device Timeout"); 4711 isp_make_gone(isp, lp, chan, tgt); | 4708 isp_prt(isp, ISP_LOGCONFIG, prom3, chan, lp->portid, dbidx, "Gone Device Timeout"); 4709 isp_make_gone(isp, lp, chan, dbidx); |
4712 } 4713 if (fc->ready) { 4714 if (more_to_do) { 4715 callout_reset(&fc->gdt, hz, isp_gdt, fc); 4716 } else { 4717 callout_deactivate(&fc->gdt); 4718 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Stopping Gone Device Timer @ %lu", chan, (unsigned long) time_uptime); 4719 } --- 19 unchanged lines hidden (view full) --- 4739 4740static void 4741isp_ldt_task(void *arg, int pending) 4742{ 4743 struct isp_fc *fc = arg; 4744 ispsoftc_t *isp = fc->isp; 4745 int chan = fc - isp->isp_osinfo.pc.fc; 4746 fcportdb_t *lp; | 4710 } 4711 if (fc->ready) { 4712 if (more_to_do) { 4713 callout_reset(&fc->gdt, hz, isp_gdt, fc); 4714 } else { 4715 callout_deactivate(&fc->gdt); 4716 isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Stopping Gone Device Timer @ %lu", chan, (unsigned long) time_uptime); 4717 } --- 19 unchanged lines hidden (view full) --- 4737 4738static void 4739isp_ldt_task(void *arg, int pending) 4740{ 4741 struct isp_fc *fc = arg; 4742 ispsoftc_t *isp = fc->isp; 4743 int chan = fc - isp->isp_osinfo.pc.fc; 4744 fcportdb_t *lp; |
4747 int dbidx, tgt, i; | 4745 int dbidx, i; |
4748 4749 ISP_LOCK(isp); 4750 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expired @ %lu", chan, (unsigned long) time_uptime); 4751 callout_deactivate(&fc->ldt); 4752 4753 /* 4754 * Notify to the OS all targets who we now consider have departed. 4755 */ --- 16 unchanged lines hidden (view full) --- 4772 struct ccb_scsiio *xs; 4773 4774 if (!ISP_VALID_HANDLE(isp, isp->isp_xflist[i].handle)) { 4775 continue; 4776 } 4777 if ((xs = isp->isp_xflist[i].cmd) == NULL) { 4778 continue; 4779 } | 4746 4747 ISP_LOCK(isp); 4748 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expired @ %lu", chan, (unsigned long) time_uptime); 4749 callout_deactivate(&fc->ldt); 4750 4751 /* 4752 * Notify to the OS all targets who we now consider have departed. 4753 */ --- 16 unchanged lines hidden (view full) --- 4770 struct ccb_scsiio *xs; 4771 4772 if (!ISP_VALID_HANDLE(isp, isp->isp_xflist[i].handle)) { 4773 continue; 4774 } 4775 if ((xs = isp->isp_xflist[i].cmd) == NULL) { 4776 continue; 4777 } |
4780 if (dbidx != (FCPARAM(isp, chan)->isp_dev_map[XS_TGT(xs)] - 1)) { | 4778 if (dbidx != XS_TGT(xs)) { |
4781 continue; 4782 } 4783 isp_prt(isp, ISP_LOGWARN, "command handle 0x%x for %d.%d.%d orphaned by loop down timeout", 4784 isp->isp_xflist[i].handle, chan, XS_TGT(xs), XS_LUN(xs)); 4785 } 4786 4787 /* 4788 * Mark that we've announced that this device is gone.... 4789 */ 4790 lp->announced = 1; | 4779 continue; 4780 } 4781 isp_prt(isp, ISP_LOGWARN, "command handle 0x%x for %d.%d.%d orphaned by loop down timeout", 4782 isp->isp_xflist[i].handle, chan, XS_TGT(xs), XS_LUN(xs)); 4783 } 4784 4785 /* 4786 * Mark that we've announced that this device is gone.... 4787 */ 4788 lp->announced = 1; |
4791 4792 /* 4793 * but *don't* change the state of the entry. Just clear 4794 * any target id stuff and announce to CAM that the 4795 * device is gone. This way any necessary PLOGO stuff 4796 * will happen when loop comes back up. 4797 */ 4798 4799 tgt = lp->dev_map_idx - 1; 4800 FCPARAM(isp, chan)->isp_dev_map[tgt] = 0; | |
4801 lp->dev_map_idx = 0; 4802 lp->state = FC_PORTDB_STATE_NIL; | 4789 lp->dev_map_idx = 0; 4790 lp->state = FC_PORTDB_STATE_NIL; |
4803 isp_prt(isp, ISP_LOGCONFIG, prom3, chan, lp->portid, tgt, "Loop Down Timeout"); 4804 isp_make_gone(isp, lp, chan, tgt); | 4791 isp_prt(isp, ISP_LOGCONFIG, prom3, chan, lp->portid, dbidx, "Loop Down Timeout"); 4792 isp_make_gone(isp, lp, chan, dbidx); |
4805 } 4806 4807 if (FCPARAM(isp, chan)->role & ISP_ROLE_INITIATOR) { 4808 isp_unfreeze_loopdown(isp, chan); 4809 } 4810 /* 4811 * The loop down timer has expired. Wake up the kthread 4812 * to notice that fact (or make it false). --- 479 unchanged lines hidden (view full) --- 5292 case XPT_GET_TRAN_SETTINGS: 5293 cts = &ccb->cts; 5294 tgt = cts->ccb_h.target_id; 5295 bus = cam_sim_bus(xpt_path_sim(cts->ccb_h.path)); 5296 if (IS_FC(isp)) { 5297 fcparam *fcp = FCPARAM(isp, bus); 5298 struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi; 5299 struct ccb_trans_settings_fc *fc = &cts->xport_specific.fc; | 4793 } 4794 4795 if (FCPARAM(isp, chan)->role & ISP_ROLE_INITIATOR) { 4796 isp_unfreeze_loopdown(isp, chan); 4797 } 4798 /* 4799 * The loop down timer has expired. Wake up the kthread 4800 * to notice that fact (or make it false). --- 479 unchanged lines hidden (view full) --- 5280 case XPT_GET_TRAN_SETTINGS: 5281 cts = &ccb->cts; 5282 tgt = cts->ccb_h.target_id; 5283 bus = cam_sim_bus(xpt_path_sim(cts->ccb_h.path)); 5284 if (IS_FC(isp)) { 5285 fcparam *fcp = FCPARAM(isp, bus); 5286 struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi; 5287 struct ccb_trans_settings_fc *fc = &cts->xport_specific.fc; |
5300 unsigned int hdlidx; | |
5301 5302 cts->protocol = PROTO_SCSI; 5303 cts->protocol_version = SCSI_REV_2; 5304 cts->transport = XPORT_FC; 5305 cts->transport_version = 0; 5306 5307 scsi->valid = CTS_SCSI_VALID_TQ; 5308 scsi->flags = CTS_SCSI_FLAGS_TAG_ENB; 5309 fc->valid = CTS_FC_VALID_SPEED; 5310 fc->bitrate = 100000; 5311 fc->bitrate *= fcp->isp_gbspeed; | 5288 5289 cts->protocol = PROTO_SCSI; 5290 cts->protocol_version = SCSI_REV_2; 5291 cts->transport = XPORT_FC; 5292 cts->transport_version = 0; 5293 5294 scsi->valid = CTS_SCSI_VALID_TQ; 5295 scsi->flags = CTS_SCSI_FLAGS_TAG_ENB; 5296 fc->valid = CTS_FC_VALID_SPEED; 5297 fc->bitrate = 100000; 5298 fc->bitrate *= fcp->isp_gbspeed; |
5312 hdlidx = fcp->isp_dev_map[tgt] - 1; 5313 if (hdlidx < MAX_FC_TARG) { 5314 fcportdb_t *lp = &fcp->portdb[hdlidx]; | 5299 if (tgt < MAX_FC_TARG) { 5300 fcportdb_t *lp = &fcp->portdb[tgt]; |
5315 fc->wwnn = lp->node_wwn; 5316 fc->wwpn = lp->port_wwn; 5317 fc->port = lp->portid; 5318 fc->valid |= CTS_FC_VALID_WWNN | CTS_FC_VALID_WWPN | CTS_FC_VALID_PORT; 5319 } 5320 } else { 5321 struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi; 5322 struct ccb_trans_settings_spi *spi = &cts->xport_specific.spi; --- 304 unchanged lines hidden (view full) --- 5627 sccb->ccb_h.status &= ~CAM_SIM_QUEUED; 5628 status = sccb->ccb_h.status & CAM_STATUS_MASK; 5629 if (status != CAM_REQ_CMP) { 5630 if (status != CAM_SEL_TIMEOUT) 5631 isp_prt(isp, ISP_LOGDEBUG0, "target %d lun %d CAM status 0x%x SCSI status 0x%x", XS_TGT(sccb), XS_LUN(sccb), sccb->ccb_h.status, sccb->scsi_status); 5632 else if ((IS_FC(isp)) 5633 && (XS_TGT(sccb) < MAX_FC_TARG)) { 5634 fcparam *fcp; | 5301 fc->wwnn = lp->node_wwn; 5302 fc->wwpn = lp->port_wwn; 5303 fc->port = lp->portid; 5304 fc->valid |= CTS_FC_VALID_WWNN | CTS_FC_VALID_WWPN | CTS_FC_VALID_PORT; 5305 } 5306 } else { 5307 struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi; 5308 struct ccb_trans_settings_spi *spi = &cts->xport_specific.spi; --- 304 unchanged lines hidden (view full) --- 5613 sccb->ccb_h.status &= ~CAM_SIM_QUEUED; 5614 status = sccb->ccb_h.status & CAM_STATUS_MASK; 5615 if (status != CAM_REQ_CMP) { 5616 if (status != CAM_SEL_TIMEOUT) 5617 isp_prt(isp, ISP_LOGDEBUG0, "target %d lun %d CAM status 0x%x SCSI status 0x%x", XS_TGT(sccb), XS_LUN(sccb), sccb->ccb_h.status, sccb->scsi_status); 5618 else if ((IS_FC(isp)) 5619 && (XS_TGT(sccb) < MAX_FC_TARG)) { 5620 fcparam *fcp; |
5635 int hdlidx; | |
5636 5637 fcp = FCPARAM(isp, XS_CHANNEL(sccb)); | 5621 5622 fcp = FCPARAM(isp, XS_CHANNEL(sccb)); |
5638 hdlidx = fcp->isp_dev_map[XS_TGT(sccb)] - 1; 5639 /* 5640 * Note that we have reported that this device is 5641 * gone. If it reappears, we'll need to issue a 5642 * rescan. 5643 */ 5644 if (hdlidx >= 0 && hdlidx < MAX_FC_TARG) 5645 fcp->portdb[hdlidx].reported_gone = 1; | 5623 fcp->portdb[XS_TGT(sccb)].reported_gone = 1; |
5646 } 5647 if ((sccb->ccb_h.status & CAM_DEV_QFRZN) == 0) { 5648 sccb->ccb_h.status |= CAM_DEV_QFRZN; 5649 xpt_freeze_devq(sccb->ccb_h.path, 1); 5650 } 5651 } 5652 5653 if ((CAM_DEBUGGED(sccb->ccb_h.path, ISPDDB)) && (sccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { --- 152 unchanged lines hidden (view full) --- 5806 va_start(ap, cmd); 5807 bus = va_arg(ap, int); 5808 lp = va_arg(ap, fcportdb_t *); 5809 va_end(ap); 5810 fc = ISP_FC_PC(isp, bus); 5811 lp->announced = 0; 5812 lp->gone_timer = 0; 5813 if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->prli_word3 & PRLI_WD3_TARGET_FUNCTION)) { | 5624 } 5625 if ((sccb->ccb_h.status & CAM_DEV_QFRZN) == 0) { 5626 sccb->ccb_h.status |= CAM_DEV_QFRZN; 5627 xpt_freeze_devq(sccb->ccb_h.path, 1); 5628 } 5629 } 5630 5631 if ((CAM_DEBUGGED(sccb->ccb_h.path, ISPDDB)) && (sccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { --- 152 unchanged lines hidden (view full) --- 5784 va_start(ap, cmd); 5785 bus = va_arg(ap, int); 5786 lp = va_arg(ap, fcportdb_t *); 5787 va_end(ap); 5788 fc = ISP_FC_PC(isp, bus); 5789 lp->announced = 0; 5790 lp->gone_timer = 0; 5791 if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->prli_word3 & PRLI_WD3_TARGET_FUNCTION)) { |
5814 int dbidx = lp - FCPARAM(isp, bus)->portdb; 5815 int i; 5816 5817 for (i = 0; i < MAX_FC_TARG; i++) { 5818 if (i >= FL_ID && i <= SNS_ID) { 5819 continue; 5820 } 5821 if (FCPARAM(isp, bus)->isp_dev_map[i] == 0) { 5822 break; 5823 } 5824 } 5825 if (i < MAX_FC_TARG) { 5826 FCPARAM(isp, bus)->isp_dev_map[i] = dbidx + 1; 5827 lp->dev_map_idx = i + 1; 5828 } else { 5829 isp_prt(isp, ISP_LOGWARN, "out of target ids"); 5830 isp_dump_portdb(isp, bus); 5831 } | 5792 lp->dev_map_idx = (lp - FCPARAM(isp, bus)->portdb) + 1; |
5832 } 5833 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5834 if (lp->dev_map_idx) { 5835 tgt = lp->dev_map_idx - 1; 5836 isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5837 isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1); 5838 isp_make_here(isp, lp, bus, tgt); 5839 } else { --- 7 unchanged lines hidden (view full) --- 5847 va_end(ap); 5848 fc = ISP_FC_PC(isp, bus); 5849 lp->announced = 0; 5850 lp->gone_timer = 0; 5851 if (isp_change_is_bad) { 5852 lp->state = FC_PORTDB_STATE_NIL; 5853 if (lp->dev_map_idx) { 5854 tgt = lp->dev_map_idx - 1; | 5793 } 5794 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5795 if (lp->dev_map_idx) { 5796 tgt = lp->dev_map_idx - 1; 5797 isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5798 isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1); 5799 isp_make_here(isp, lp, bus, tgt); 5800 } else { --- 7 unchanged lines hidden (view full) --- 5808 va_end(ap); 5809 fc = ISP_FC_PC(isp, bus); 5810 lp->announced = 0; 5811 lp->gone_timer = 0; 5812 if (isp_change_is_bad) { 5813 lp->state = FC_PORTDB_STATE_NIL; 5814 if (lp->dev_map_idx) { 5815 tgt = lp->dev_map_idx - 1; |
5855 FCPARAM(isp, bus)->isp_dev_map[tgt] = 0; | |
5856 lp->dev_map_idx = 0; 5857 isp_prt(isp, ISP_LOGCONFIG, prom3, bus, lp->portid, tgt, "change is bad"); 5858 isp_make_gone(isp, lp, bus, tgt); 5859 } else { 5860 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5861 isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed and departed", 5862 (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5863 } 5864 } else { 5865 lp->portid = lp->new_portid; 5866 lp->prli_word3 = lp->new_prli_word3; 5867 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5868 if (lp->dev_map_idx) { | 5816 lp->dev_map_idx = 0; 5817 isp_prt(isp, ISP_LOGCONFIG, prom3, bus, lp->portid, tgt, "change is bad"); 5818 isp_make_gone(isp, lp, bus, tgt); 5819 } else { 5820 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5821 isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed and departed", 5822 (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5823 } 5824 } else { 5825 lp->portid = lp->new_portid; 5826 lp->prli_word3 = lp->new_prli_word3; 5827 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5828 if (lp->dev_map_idx) { |
5869 int t = lp->dev_map_idx - 1; 5870 FCPARAM(isp, bus)->isp_dev_map[t] = (lp - FCPARAM(isp, bus)->portdb) + 1; | |
5871 tgt = lp->dev_map_idx - 1; 5872 isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "changed at", tgt, 5873 (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5874 isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1); 5875 } else { 5876 isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5877 } 5878 } --- 38 unchanged lines hidden (view full) --- 5917 * If it isn't marked that isp_gdt is going to get rid of it, 5918 * announce that it's gone. 5919 * 5920 */ 5921 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5922 if (lp->dev_map_idx && lp->announced == 0 && now) { 5923 lp->announced = 1; 5924 tgt = lp->dev_map_idx - 1; | 5829 tgt = lp->dev_map_idx - 1; 5830 isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "changed at", tgt, 5831 (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5832 isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1); 5833 } else { 5834 isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5835 } 5836 } --- 38 unchanged lines hidden (view full) --- 5875 * If it isn't marked that isp_gdt is going to get rid of it, 5876 * announce that it's gone. 5877 * 5878 */ 5879 isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); 5880 if (lp->dev_map_idx && lp->announced == 0 && now) { 5881 lp->announced = 1; 5882 tgt = lp->dev_map_idx - 1; |
5925 FCPARAM(isp, bus)->isp_dev_map[tgt] = 0; | |
5926 lp->dev_map_idx = 0; 5927 isp_make_gone(isp, lp, bus, tgt); 5928 isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "gone at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5929 isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1); 5930 } else if (lp->dev_map_idx && lp->announced == 0) { 5931 lp->announced = 1; 5932 lp->state = FC_PORTDB_STATE_ZOMBIE; 5933 lp->gone_timer = ISP_FC_PC(isp, bus)->gone_device_time; --- 660 unchanged lines hidden --- | 5883 lp->dev_map_idx = 0; 5884 isp_make_gone(isp, lp, bus, tgt); 5885 isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "gone at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); 5886 isp_fcp_reset_crn(fc, tgt, /*tgt_set*/ 1); 5887 } else if (lp->dev_map_idx && lp->announced == 0) { 5888 lp->announced = 1; 5889 lp->state = FC_PORTDB_STATE_ZOMBIE; 5890 lp->gone_timer = ISP_FC_PC(isp, bus)->gone_device_time; --- 660 unchanged lines hidden --- |