diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 205 |
1 files changed, 135 insertions, 70 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 06874e6009ea..86d1bdcbf2d8 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -60,7 +60,7 @@ static struct scsi_transport_template *lpfc_vport_transport_template = NULL; | |||
60 | static DEFINE_IDR(lpfc_hba_index); | 60 | static DEFINE_IDR(lpfc_hba_index); |
61 | 61 | ||
62 | /** | 62 | /** |
63 | * lpfc_config_port_prep: Perform lpfc initialization prior to config port. | 63 | * lpfc_config_port_prep - Perform lpfc initialization prior to config port |
64 | * @phba: pointer to lpfc hba data structure. | 64 | * @phba: pointer to lpfc hba data structure. |
65 | * | 65 | * |
66 | * This routine will do LPFC initialization prior to issuing the CONFIG_PORT | 66 | * This routine will do LPFC initialization prior to issuing the CONFIG_PORT |
@@ -221,7 +221,7 @@ out_free_mbox: | |||
221 | } | 221 | } |
222 | 222 | ||
223 | /** | 223 | /** |
224 | * lpfc_config_async_cmpl: Completion handler for config async event mbox cmd. | 224 | * lpfc_config_async_cmpl - Completion handler for config async event mbox cmd |
225 | * @phba: pointer to lpfc hba data structure. | 225 | * @phba: pointer to lpfc hba data structure. |
226 | * @pmboxq: pointer to the driver internal queue element for mailbox command. | 226 | * @pmboxq: pointer to the driver internal queue element for mailbox command. |
227 | * | 227 | * |
@@ -242,8 +242,7 @@ lpfc_config_async_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq) | |||
242 | } | 242 | } |
243 | 243 | ||
244 | /** | 244 | /** |
245 | * lpfc_dump_wakeup_param_cmpl: Completion handler for dump memory mailbox | 245 | * lpfc_dump_wakeup_param_cmpl - dump memory mailbox command completion handler |
246 | * command used for getting wake up parameters. | ||
247 | * @phba: pointer to lpfc hba data structure. | 246 | * @phba: pointer to lpfc hba data structure. |
248 | * @pmboxq: pointer to the driver internal queue element for mailbox command. | 247 | * @pmboxq: pointer to the driver internal queue element for mailbox command. |
249 | * | 248 | * |
@@ -287,7 +286,7 @@ lpfc_dump_wakeup_param_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq) | |||
287 | } | 286 | } |
288 | 287 | ||
289 | /** | 288 | /** |
290 | * lpfc_config_port_post: Perform lpfc initialization after config port. | 289 | * lpfc_config_port_post - Perform lpfc initialization after config port |
291 | * @phba: pointer to lpfc hba data structure. | 290 | * @phba: pointer to lpfc hba data structure. |
292 | * | 291 | * |
293 | * This routine will do LPFC initialization after the CONFIG_PORT mailbox | 292 | * This routine will do LPFC initialization after the CONFIG_PORT mailbox |
@@ -303,6 +302,7 @@ int | |||
303 | lpfc_config_port_post(struct lpfc_hba *phba) | 302 | lpfc_config_port_post(struct lpfc_hba *phba) |
304 | { | 303 | { |
305 | struct lpfc_vport *vport = phba->pport; | 304 | struct lpfc_vport *vport = phba->pport; |
305 | struct Scsi_Host *shost = lpfc_shost_from_vport(vport); | ||
306 | LPFC_MBOXQ_t *pmb; | 306 | LPFC_MBOXQ_t *pmb; |
307 | MAILBOX_t *mb; | 307 | MAILBOX_t *mb; |
308 | struct lpfc_dmabuf *mp; | 308 | struct lpfc_dmabuf *mp; |
@@ -360,6 +360,11 @@ lpfc_config_port_post(struct lpfc_hba *phba) | |||
360 | sizeof (struct lpfc_name)); | 360 | sizeof (struct lpfc_name)); |
361 | memcpy(&vport->fc_portname, &vport->fc_sparam.portName, | 361 | memcpy(&vport->fc_portname, &vport->fc_sparam.portName, |
362 | sizeof (struct lpfc_name)); | 362 | sizeof (struct lpfc_name)); |
363 | |||
364 | /* Update the fc_host data structures with new wwn. */ | ||
365 | fc_host_node_name(shost) = wwn_to_u64(vport->fc_nodename.u.wwn); | ||
366 | fc_host_port_name(shost) = wwn_to_u64(vport->fc_portname.u.wwn); | ||
367 | |||
363 | /* If no serial number in VPD data, use low 6 bytes of WWNN */ | 368 | /* If no serial number in VPD data, use low 6 bytes of WWNN */ |
364 | /* This should be consolidated into parse_vpd ? - mr */ | 369 | /* This should be consolidated into parse_vpd ? - mr */ |
365 | if (phba->SerialNumber[0] == 0) { | 370 | if (phba->SerialNumber[0] == 0) { |
@@ -551,7 +556,7 @@ lpfc_config_port_post(struct lpfc_hba *phba) | |||
551 | } | 556 | } |
552 | 557 | ||
553 | /** | 558 | /** |
554 | * lpfc_hba_down_prep: Perform lpfc uninitialization prior to HBA reset. | 559 | * lpfc_hba_down_prep - Perform lpfc uninitialization prior to HBA reset |
555 | * @phba: pointer to lpfc HBA data structure. | 560 | * @phba: pointer to lpfc HBA data structure. |
556 | * | 561 | * |
557 | * This routine will do LPFC uninitialization before the HBA is reset when | 562 | * This routine will do LPFC uninitialization before the HBA is reset when |
@@ -583,7 +588,7 @@ lpfc_hba_down_prep(struct lpfc_hba *phba) | |||
583 | } | 588 | } |
584 | 589 | ||
585 | /** | 590 | /** |
586 | * lpfc_hba_down_post: Perform lpfc uninitialization after HBA reset. | 591 | * lpfc_hba_down_post - Perform lpfc uninitialization after HBA reset |
587 | * @phba: pointer to lpfc HBA data structure. | 592 | * @phba: pointer to lpfc HBA data structure. |
588 | * | 593 | * |
589 | * This routine will do uninitialization after the HBA is reset when bring | 594 | * This routine will do uninitialization after the HBA is reset when bring |
@@ -599,8 +604,6 @@ lpfc_hba_down_post(struct lpfc_hba *phba) | |||
599 | struct lpfc_sli *psli = &phba->sli; | 604 | struct lpfc_sli *psli = &phba->sli; |
600 | struct lpfc_sli_ring *pring; | 605 | struct lpfc_sli_ring *pring; |
601 | struct lpfc_dmabuf *mp, *next_mp; | 606 | struct lpfc_dmabuf *mp, *next_mp; |
602 | struct lpfc_iocbq *iocb; | ||
603 | IOCB_t *cmd = NULL; | ||
604 | LIST_HEAD(completions); | 607 | LIST_HEAD(completions); |
605 | int i; | 608 | int i; |
606 | 609 | ||
@@ -628,20 +631,9 @@ lpfc_hba_down_post(struct lpfc_hba *phba) | |||
628 | pring->txcmplq_cnt = 0; | 631 | pring->txcmplq_cnt = 0; |
629 | spin_unlock_irq(&phba->hbalock); | 632 | spin_unlock_irq(&phba->hbalock); |
630 | 633 | ||
631 | while (!list_empty(&completions)) { | 634 | /* Cancel all the IOCBs from the completions list */ |
632 | iocb = list_get_first(&completions, struct lpfc_iocbq, | 635 | lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT, |
633 | list); | 636 | IOERR_SLI_ABORTED); |
634 | cmd = &iocb->iocb; | ||
635 | list_del_init(&iocb->list); | ||
636 | |||
637 | if (!iocb->iocb_cmpl) | ||
638 | lpfc_sli_release_iocbq(phba, iocb); | ||
639 | else { | ||
640 | cmd->ulpStatus = IOSTAT_LOCAL_REJECT; | ||
641 | cmd->un.ulpWord[4] = IOERR_SLI_ABORTED; | ||
642 | (iocb->iocb_cmpl) (phba, iocb, iocb); | ||
643 | } | ||
644 | } | ||
645 | 637 | ||
646 | lpfc_sli_abort_iocb_ring(phba, pring); | 638 | lpfc_sli_abort_iocb_ring(phba, pring); |
647 | spin_lock_irq(&phba->hbalock); | 639 | spin_lock_irq(&phba->hbalock); |
@@ -652,7 +644,7 @@ lpfc_hba_down_post(struct lpfc_hba *phba) | |||
652 | } | 644 | } |
653 | 645 | ||
654 | /** | 646 | /** |
655 | * lpfc_hb_timeout: The HBA-timer timeout handler. | 647 | * lpfc_hb_timeout - The HBA-timer timeout handler |
656 | * @ptr: unsigned long holds the pointer to lpfc hba data structure. | 648 | * @ptr: unsigned long holds the pointer to lpfc hba data structure. |
657 | * | 649 | * |
658 | * This is the HBA-timer timeout handler registered to the lpfc driver. When | 650 | * This is the HBA-timer timeout handler registered to the lpfc driver. When |
@@ -686,7 +678,7 @@ lpfc_hb_timeout(unsigned long ptr) | |||
686 | } | 678 | } |
687 | 679 | ||
688 | /** | 680 | /** |
689 | * lpfc_hb_mbox_cmpl: The lpfc heart-beat mailbox command callback function. | 681 | * lpfc_hb_mbox_cmpl - The lpfc heart-beat mailbox command callback function |
690 | * @phba: pointer to lpfc hba data structure. | 682 | * @phba: pointer to lpfc hba data structure. |
691 | * @pmboxq: pointer to the driver internal queue element for mailbox command. | 683 | * @pmboxq: pointer to the driver internal queue element for mailbox command. |
692 | * | 684 | * |
@@ -721,7 +713,7 @@ lpfc_hb_mbox_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq) | |||
721 | } | 713 | } |
722 | 714 | ||
723 | /** | 715 | /** |
724 | * lpfc_hb_timeout_handler: The HBA-timer timeout handler. | 716 | * lpfc_hb_timeout_handler - The HBA-timer timeout handler |
725 | * @phba: pointer to lpfc hba data structure. | 717 | * @phba: pointer to lpfc hba data structure. |
726 | * | 718 | * |
727 | * This is the actual HBA-timer timeout handler to be invoked by the worker | 719 | * This is the actual HBA-timer timeout handler to be invoked by the worker |
@@ -830,7 +822,7 @@ lpfc_hb_timeout_handler(struct lpfc_hba *phba) | |||
830 | } | 822 | } |
831 | 823 | ||
832 | /** | 824 | /** |
833 | * lpfc_offline_eratt: Bring lpfc offline on hardware error attention. | 825 | * lpfc_offline_eratt - Bring lpfc offline on hardware error attention |
834 | * @phba: pointer to lpfc hba data structure. | 826 | * @phba: pointer to lpfc hba data structure. |
835 | * | 827 | * |
836 | * This routine is called to bring the HBA offline when HBA hardware error | 828 | * This routine is called to bring the HBA offline when HBA hardware error |
@@ -857,7 +849,73 @@ lpfc_offline_eratt(struct lpfc_hba *phba) | |||
857 | } | 849 | } |
858 | 850 | ||
859 | /** | 851 | /** |
860 | * lpfc_handle_eratt: The HBA hardware error handler. | 852 | * lpfc_handle_deferred_eratt - The HBA hardware deferred error handler |
853 | * @phba: pointer to lpfc hba data structure. | ||
854 | * | ||
855 | * This routine is invoked to handle the deferred HBA hardware error | ||
856 | * conditions. This type of error is indicated by HBA by setting ER1 | ||
857 | * and another ER bit in the host status register. The driver will | ||
858 | * wait until the ER1 bit clears before handling the error condition. | ||
859 | **/ | ||
860 | static void | ||
861 | lpfc_handle_deferred_eratt(struct lpfc_hba *phba) | ||
862 | { | ||
863 | uint32_t old_host_status = phba->work_hs; | ||
864 | struct lpfc_sli_ring *pring; | ||
865 | struct lpfc_sli *psli = &phba->sli; | ||
866 | |||
867 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | ||
868 | "0479 Deferred Adapter Hardware Error " | ||
869 | "Data: x%x x%x x%x\n", | ||
870 | phba->work_hs, | ||
871 | phba->work_status[0], phba->work_status[1]); | ||
872 | |||
873 | spin_lock_irq(&phba->hbalock); | ||
874 | psli->sli_flag &= ~LPFC_SLI2_ACTIVE; | ||
875 | spin_unlock_irq(&phba->hbalock); | ||
876 | |||
877 | |||
878 | /* | ||
879 | * Firmware stops when it triggred erratt. That could cause the I/Os | ||
880 | * dropped by the firmware. Error iocb (I/O) on txcmplq and let the | ||
881 | * SCSI layer retry it after re-establishing link. | ||
882 | */ | ||
883 | pring = &psli->ring[psli->fcp_ring]; | ||
884 | lpfc_sli_abort_iocb_ring(phba, pring); | ||
885 | |||
886 | /* | ||
887 | * There was a firmware error. Take the hba offline and then | ||
888 | * attempt to restart it. | ||
889 | */ | ||
890 | lpfc_offline_prep(phba); | ||
891 | lpfc_offline(phba); | ||
892 | |||
893 | /* Wait for the ER1 bit to clear.*/ | ||
894 | while (phba->work_hs & HS_FFER1) { | ||
895 | msleep(100); | ||
896 | phba->work_hs = readl(phba->HSregaddr); | ||
897 | /* If driver is unloading let the worker thread continue */ | ||
898 | if (phba->pport->load_flag & FC_UNLOADING) { | ||
899 | phba->work_hs = 0; | ||
900 | break; | ||
901 | } | ||
902 | } | ||
903 | |||
904 | /* | ||
905 | * This is to ptrotect against a race condition in which | ||
906 | * first write to the host attention register clear the | ||
907 | * host status register. | ||
908 | */ | ||
909 | if ((!phba->work_hs) && (!(phba->pport->load_flag & FC_UNLOADING))) | ||
910 | phba->work_hs = old_host_status & ~HS_FFER1; | ||
911 | |||
912 | phba->hba_flag &= ~DEFER_ERATT; | ||
913 | phba->work_status[0] = readl(phba->MBslimaddr + 0xa8); | ||
914 | phba->work_status[1] = readl(phba->MBslimaddr + 0xac); | ||
915 | } | ||
916 | |||
917 | /** | ||
918 | * lpfc_handle_eratt - The HBA hardware error handler | ||
861 | * @phba: pointer to lpfc hba data structure. | 919 | * @phba: pointer to lpfc hba data structure. |
862 | * | 920 | * |
863 | * This routine is invoked to handle the following HBA hardware error | 921 | * This routine is invoked to handle the following HBA hardware error |
@@ -895,6 +953,9 @@ lpfc_handle_eratt(struct lpfc_hba *phba) | |||
895 | (char *) &board_event, | 953 | (char *) &board_event, |
896 | LPFC_NL_VENDOR_ID); | 954 | LPFC_NL_VENDOR_ID); |
897 | 955 | ||
956 | if (phba->hba_flag & DEFER_ERATT) | ||
957 | lpfc_handle_deferred_eratt(phba); | ||
958 | |||
898 | if (phba->work_hs & HS_FFER6) { | 959 | if (phba->work_hs & HS_FFER6) { |
899 | /* Re-establishing Link */ | 960 | /* Re-establishing Link */ |
900 | lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, | 961 | lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, |
@@ -976,7 +1037,7 @@ lpfc_handle_eratt(struct lpfc_hba *phba) | |||
976 | } | 1037 | } |
977 | 1038 | ||
978 | /** | 1039 | /** |
979 | * lpfc_handle_latt: The HBA link event handler. | 1040 | * lpfc_handle_latt - The HBA link event handler |
980 | * @phba: pointer to lpfc hba data structure. | 1041 | * @phba: pointer to lpfc hba data structure. |
981 | * | 1042 | * |
982 | * This routine is invoked from the worker thread to handle a HBA host | 1043 | * This routine is invoked from the worker thread to handle a HBA host |
@@ -1063,7 +1124,7 @@ lpfc_handle_latt_err_exit: | |||
1063 | } | 1124 | } |
1064 | 1125 | ||
1065 | /** | 1126 | /** |
1066 | * lpfc_parse_vpd: Parse VPD (Vital Product Data). | 1127 | * lpfc_parse_vpd - Parse VPD (Vital Product Data) |
1067 | * @phba: pointer to lpfc hba data structure. | 1128 | * @phba: pointer to lpfc hba data structure. |
1068 | * @vpd: pointer to the vital product data. | 1129 | * @vpd: pointer to the vital product data. |
1069 | * @len: length of the vital product data in bytes. | 1130 | * @len: length of the vital product data in bytes. |
@@ -1213,7 +1274,7 @@ lpfc_parse_vpd(struct lpfc_hba *phba, uint8_t *vpd, int len) | |||
1213 | } | 1274 | } |
1214 | 1275 | ||
1215 | /** | 1276 | /** |
1216 | * lpfc_get_hba_model_desc: Retrieve HBA device model name and description. | 1277 | * lpfc_get_hba_model_desc - Retrieve HBA device model name and description |
1217 | * @phba: pointer to lpfc hba data structure. | 1278 | * @phba: pointer to lpfc hba data structure. |
1218 | * @mdp: pointer to the data structure to hold the derived model name. | 1279 | * @mdp: pointer to the data structure to hold the derived model name. |
1219 | * @descp: pointer to the data structure to hold the derived description. | 1280 | * @descp: pointer to the data structure to hold the derived description. |
@@ -1322,7 +1383,8 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp) | |||
1322 | m = (typeof(m)){"LPe11000", max_speed, "PCIe"}; | 1383 | m = (typeof(m)){"LPe11000", max_speed, "PCIe"}; |
1323 | break; | 1384 | break; |
1324 | case PCI_DEVICE_ID_ZEPHYR_DCSP: | 1385 | case PCI_DEVICE_ID_ZEPHYR_DCSP: |
1325 | m = (typeof(m)){"LPe11002-SP", max_speed, "PCIe"}; | 1386 | m = (typeof(m)){"LP2105", max_speed, "PCIe"}; |
1387 | GE = 1; | ||
1326 | break; | 1388 | break; |
1327 | case PCI_DEVICE_ID_ZMID: | 1389 | case PCI_DEVICE_ID_ZMID: |
1328 | m = (typeof(m)){"LPe1150", max_speed, "PCIe"}; | 1390 | m = (typeof(m)){"LPe1150", max_speed, "PCIe"}; |
@@ -1392,7 +1454,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp) | |||
1392 | } | 1454 | } |
1393 | 1455 | ||
1394 | /** | 1456 | /** |
1395 | * lpfc_post_buffer: Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring. | 1457 | * lpfc_post_buffer - Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring |
1396 | * @phba: pointer to lpfc hba data structure. | 1458 | * @phba: pointer to lpfc hba data structure. |
1397 | * @pring: pointer to a IOCB ring. | 1459 | * @pring: pointer to a IOCB ring. |
1398 | * @cnt: the number of IOCBs to be posted to the IOCB ring. | 1460 | * @cnt: the number of IOCBs to be posted to the IOCB ring. |
@@ -1493,7 +1555,7 @@ lpfc_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cnt) | |||
1493 | } | 1555 | } |
1494 | 1556 | ||
1495 | /** | 1557 | /** |
1496 | * lpfc_post_rcv_buf: Post the initial receive IOCB buffers to ELS ring. | 1558 | * lpfc_post_rcv_buf - Post the initial receive IOCB buffers to ELS ring |
1497 | * @phba: pointer to lpfc hba data structure. | 1559 | * @phba: pointer to lpfc hba data structure. |
1498 | * | 1560 | * |
1499 | * This routine posts initial receive IOCB buffers to the ELS ring. The | 1561 | * This routine posts initial receive IOCB buffers to the ELS ring. The |
@@ -1518,7 +1580,7 @@ lpfc_post_rcv_buf(struct lpfc_hba *phba) | |||
1518 | #define S(N,V) (((V)<<(N))|((V)>>(32-(N)))) | 1580 | #define S(N,V) (((V)<<(N))|((V)>>(32-(N)))) |
1519 | 1581 | ||
1520 | /** | 1582 | /** |
1521 | * lpfc_sha_init: Set up initial array of hash table entries. | 1583 | * lpfc_sha_init - Set up initial array of hash table entries |
1522 | * @HashResultPointer: pointer to an array as hash table. | 1584 | * @HashResultPointer: pointer to an array as hash table. |
1523 | * | 1585 | * |
1524 | * This routine sets up the initial values to the array of hash table entries | 1586 | * This routine sets up the initial values to the array of hash table entries |
@@ -1535,7 +1597,7 @@ lpfc_sha_init(uint32_t * HashResultPointer) | |||
1535 | } | 1597 | } |
1536 | 1598 | ||
1537 | /** | 1599 | /** |
1538 | * lpfc_sha_iterate: Iterate initial hash table with the working hash table. | 1600 | * lpfc_sha_iterate - Iterate initial hash table with the working hash table |
1539 | * @HashResultPointer: pointer to an initial/result hash table. | 1601 | * @HashResultPointer: pointer to an initial/result hash table. |
1540 | * @HashWorkingPointer: pointer to an working hash table. | 1602 | * @HashWorkingPointer: pointer to an working hash table. |
1541 | * | 1603 | * |
@@ -1592,7 +1654,7 @@ lpfc_sha_iterate(uint32_t * HashResultPointer, uint32_t * HashWorkingPointer) | |||
1592 | } | 1654 | } |
1593 | 1655 | ||
1594 | /** | 1656 | /** |
1595 | * lpfc_challenge_key: Create challenge key based on WWPN of the HBA. | 1657 | * lpfc_challenge_key - Create challenge key based on WWPN of the HBA |
1596 | * @RandomChallenge: pointer to the entry of host challenge random number array. | 1658 | * @RandomChallenge: pointer to the entry of host challenge random number array. |
1597 | * @HashWorking: pointer to the entry of the working hash array. | 1659 | * @HashWorking: pointer to the entry of the working hash array. |
1598 | * | 1660 | * |
@@ -1608,7 +1670,7 @@ lpfc_challenge_key(uint32_t * RandomChallenge, uint32_t * HashWorking) | |||
1608 | } | 1670 | } |
1609 | 1671 | ||
1610 | /** | 1672 | /** |
1611 | * lpfc_hba_init: Perform special handling for LC HBA initialization. | 1673 | * lpfc_hba_init - Perform special handling for LC HBA initialization |
1612 | * @phba: pointer to lpfc hba data structure. | 1674 | * @phba: pointer to lpfc hba data structure. |
1613 | * @hbainit: pointer to an array of unsigned 32-bit integers. | 1675 | * @hbainit: pointer to an array of unsigned 32-bit integers. |
1614 | * | 1676 | * |
@@ -1637,7 +1699,7 @@ lpfc_hba_init(struct lpfc_hba *phba, uint32_t *hbainit) | |||
1637 | } | 1699 | } |
1638 | 1700 | ||
1639 | /** | 1701 | /** |
1640 | * lpfc_cleanup: Performs vport cleanups before deleting a vport. | 1702 | * lpfc_cleanup - Performs vport cleanups before deleting a vport |
1641 | * @vport: pointer to a virtual N_Port data structure. | 1703 | * @vport: pointer to a virtual N_Port data structure. |
1642 | * | 1704 | * |
1643 | * This routine performs the necessary cleanups before deleting the @vport. | 1705 | * This routine performs the necessary cleanups before deleting the @vport. |
@@ -1724,7 +1786,7 @@ lpfc_cleanup(struct lpfc_vport *vport) | |||
1724 | } | 1786 | } |
1725 | 1787 | ||
1726 | /** | 1788 | /** |
1727 | * lpfc_stop_vport_timers: Stop all the timers associated with a vport. | 1789 | * lpfc_stop_vport_timers - Stop all the timers associated with a vport |
1728 | * @vport: pointer to a virtual N_Port data structure. | 1790 | * @vport: pointer to a virtual N_Port data structure. |
1729 | * | 1791 | * |
1730 | * This routine stops all the timers associated with a @vport. This function | 1792 | * This routine stops all the timers associated with a @vport. This function |
@@ -1741,7 +1803,7 @@ lpfc_stop_vport_timers(struct lpfc_vport *vport) | |||
1741 | } | 1803 | } |
1742 | 1804 | ||
1743 | /** | 1805 | /** |
1744 | * lpfc_stop_phba_timers: Stop all the timers associated with an HBA. | 1806 | * lpfc_stop_phba_timers - Stop all the timers associated with an HBA |
1745 | * @phba: pointer to lpfc hba data structure. | 1807 | * @phba: pointer to lpfc hba data structure. |
1746 | * | 1808 | * |
1747 | * This routine stops all the timers associated with a HBA. This function is | 1809 | * This routine stops all the timers associated with a HBA. This function is |
@@ -1761,7 +1823,7 @@ lpfc_stop_phba_timers(struct lpfc_hba *phba) | |||
1761 | } | 1823 | } |
1762 | 1824 | ||
1763 | /** | 1825 | /** |
1764 | * lpfc_block_mgmt_io: Mark a HBA's management interface as blocked. | 1826 | * lpfc_block_mgmt_io - Mark a HBA's management interface as blocked |
1765 | * @phba: pointer to lpfc hba data structure. | 1827 | * @phba: pointer to lpfc hba data structure. |
1766 | * | 1828 | * |
1767 | * This routine marks a HBA's management interface as blocked. Once the HBA's | 1829 | * This routine marks a HBA's management interface as blocked. Once the HBA's |
@@ -1781,7 +1843,7 @@ lpfc_block_mgmt_io(struct lpfc_hba * phba) | |||
1781 | } | 1843 | } |
1782 | 1844 | ||
1783 | /** | 1845 | /** |
1784 | * lpfc_online: Initialize and bring a HBA online. | 1846 | * lpfc_online - Initialize and bring a HBA online |
1785 | * @phba: pointer to lpfc hba data structure. | 1847 | * @phba: pointer to lpfc hba data structure. |
1786 | * | 1848 | * |
1787 | * This routine initializes the HBA and brings a HBA online. During this | 1849 | * This routine initializes the HBA and brings a HBA online. During this |
@@ -1839,7 +1901,7 @@ lpfc_online(struct lpfc_hba *phba) | |||
1839 | } | 1901 | } |
1840 | 1902 | ||
1841 | /** | 1903 | /** |
1842 | * lpfc_unblock_mgmt_io: Mark a HBA's management interface to be not blocked. | 1904 | * lpfc_unblock_mgmt_io - Mark a HBA's management interface to be not blocked |
1843 | * @phba: pointer to lpfc hba data structure. | 1905 | * @phba: pointer to lpfc hba data structure. |
1844 | * | 1906 | * |
1845 | * This routine marks a HBA's management interface as not blocked. Once the | 1907 | * This routine marks a HBA's management interface as not blocked. Once the |
@@ -1860,7 +1922,7 @@ lpfc_unblock_mgmt_io(struct lpfc_hba * phba) | |||
1860 | } | 1922 | } |
1861 | 1923 | ||
1862 | /** | 1924 | /** |
1863 | * lpfc_offline_prep: Prepare a HBA to be brought offline. | 1925 | * lpfc_offline_prep - Prepare a HBA to be brought offline |
1864 | * @phba: pointer to lpfc hba data structure. | 1926 | * @phba: pointer to lpfc hba data structure. |
1865 | * | 1927 | * |
1866 | * This routine is invoked to prepare a HBA to be brought offline. It performs | 1928 | * This routine is invoked to prepare a HBA to be brought offline. It performs |
@@ -1917,7 +1979,7 @@ lpfc_offline_prep(struct lpfc_hba * phba) | |||
1917 | } | 1979 | } |
1918 | 1980 | ||
1919 | /** | 1981 | /** |
1920 | * lpfc_offline: Bring a HBA offline. | 1982 | * lpfc_offline - Bring a HBA offline |
1921 | * @phba: pointer to lpfc hba data structure. | 1983 | * @phba: pointer to lpfc hba data structure. |
1922 | * | 1984 | * |
1923 | * This routine actually brings a HBA offline. It stops all the timers | 1985 | * This routine actually brings a HBA offline. It stops all the timers |
@@ -1962,7 +2024,7 @@ lpfc_offline(struct lpfc_hba *phba) | |||
1962 | } | 2024 | } |
1963 | 2025 | ||
1964 | /** | 2026 | /** |
1965 | * lpfc_scsi_free: Free all the SCSI buffers and IOCBs from driver lists. | 2027 | * lpfc_scsi_free - Free all the SCSI buffers and IOCBs from driver lists |
1966 | * @phba: pointer to lpfc hba data structure. | 2028 | * @phba: pointer to lpfc hba data structure. |
1967 | * | 2029 | * |
1968 | * This routine is to free all the SCSI buffers and IOCBs from the driver | 2030 | * This routine is to free all the SCSI buffers and IOCBs from the driver |
@@ -2001,7 +2063,7 @@ lpfc_scsi_free(struct lpfc_hba *phba) | |||
2001 | } | 2063 | } |
2002 | 2064 | ||
2003 | /** | 2065 | /** |
2004 | * lpfc_create_port: Create an FC port. | 2066 | * lpfc_create_port - Create an FC port |
2005 | * @phba: pointer to lpfc hba data structure. | 2067 | * @phba: pointer to lpfc hba data structure. |
2006 | * @instance: a unique integer ID to this FC port. | 2068 | * @instance: a unique integer ID to this FC port. |
2007 | * @dev: pointer to the device data structure. | 2069 | * @dev: pointer to the device data structure. |
@@ -2091,7 +2153,7 @@ out: | |||
2091 | } | 2153 | } |
2092 | 2154 | ||
2093 | /** | 2155 | /** |
2094 | * destroy_port: Destroy an FC port. | 2156 | * destroy_port - destroy an FC port |
2095 | * @vport: pointer to an lpfc virtual N_Port data structure. | 2157 | * @vport: pointer to an lpfc virtual N_Port data structure. |
2096 | * | 2158 | * |
2097 | * This routine destroys a FC port from the upper layer protocol. All the | 2159 | * This routine destroys a FC port from the upper layer protocol. All the |
@@ -2116,7 +2178,7 @@ destroy_port(struct lpfc_vport *vport) | |||
2116 | } | 2178 | } |
2117 | 2179 | ||
2118 | /** | 2180 | /** |
2119 | * lpfc_get_instance: Get a unique integer ID. | 2181 | * lpfc_get_instance - Get a unique integer ID |
2120 | * | 2182 | * |
2121 | * This routine allocates a unique integer ID from lpfc_hba_index pool. It | 2183 | * This routine allocates a unique integer ID from lpfc_hba_index pool. It |
2122 | * uses the kernel idr facility to perform the task. | 2184 | * uses the kernel idr facility to perform the task. |
@@ -2139,7 +2201,7 @@ lpfc_get_instance(void) | |||
2139 | } | 2201 | } |
2140 | 2202 | ||
2141 | /** | 2203 | /** |
2142 | * lpfc_scan_finished: method for SCSI layer to detect whether scan is done. | 2204 | * lpfc_scan_finished - method for SCSI layer to detect whether scan is done |
2143 | * @shost: pointer to SCSI host data structure. | 2205 | * @shost: pointer to SCSI host data structure. |
2144 | * @time: elapsed time of the scan in jiffies. | 2206 | * @time: elapsed time of the scan in jiffies. |
2145 | * | 2207 | * |
@@ -2197,7 +2259,7 @@ finished: | |||
2197 | } | 2259 | } |
2198 | 2260 | ||
2199 | /** | 2261 | /** |
2200 | * lpfc_host_attrib_init: Initialize SCSI host attributes on a FC port. | 2262 | * lpfc_host_attrib_init - Initialize SCSI host attributes on a FC port |
2201 | * @shost: pointer to SCSI host data structure. | 2263 | * @shost: pointer to SCSI host data structure. |
2202 | * | 2264 | * |
2203 | * This routine initializes a given SCSI host attributes on a FC port. The | 2265 | * This routine initializes a given SCSI host attributes on a FC port. The |
@@ -2252,7 +2314,7 @@ void lpfc_host_attrib_init(struct Scsi_Host *shost) | |||
2252 | } | 2314 | } |
2253 | 2315 | ||
2254 | /** | 2316 | /** |
2255 | * lpfc_enable_msix: Enable MSI-X interrupt mode. | 2317 | * lpfc_enable_msix - Enable MSI-X interrupt mode |
2256 | * @phba: pointer to lpfc hba data structure. | 2318 | * @phba: pointer to lpfc hba data structure. |
2257 | * | 2319 | * |
2258 | * This routine is invoked to enable the MSI-X interrupt vectors. The kernel | 2320 | * This routine is invoked to enable the MSI-X interrupt vectors. The kernel |
@@ -2366,7 +2428,7 @@ msi_fail_out: | |||
2366 | } | 2428 | } |
2367 | 2429 | ||
2368 | /** | 2430 | /** |
2369 | * lpfc_disable_msix: Disable MSI-X interrupt mode. | 2431 | * lpfc_disable_msix - Disable MSI-X interrupt mode |
2370 | * @phba: pointer to lpfc hba data structure. | 2432 | * @phba: pointer to lpfc hba data structure. |
2371 | * | 2433 | * |
2372 | * This routine is invoked to release the MSI-X vectors and then disable the | 2434 | * This routine is invoked to release the MSI-X vectors and then disable the |
@@ -2385,7 +2447,7 @@ lpfc_disable_msix(struct lpfc_hba *phba) | |||
2385 | } | 2447 | } |
2386 | 2448 | ||
2387 | /** | 2449 | /** |
2388 | * lpfc_enable_msi: Enable MSI interrupt mode. | 2450 | * lpfc_enable_msi - Enable MSI interrupt mode |
2389 | * @phba: pointer to lpfc hba data structure. | 2451 | * @phba: pointer to lpfc hba data structure. |
2390 | * | 2452 | * |
2391 | * This routine is invoked to enable the MSI interrupt mode. The kernel | 2453 | * This routine is invoked to enable the MSI interrupt mode. The kernel |
@@ -2423,7 +2485,7 @@ lpfc_enable_msi(struct lpfc_hba *phba) | |||
2423 | } | 2485 | } |
2424 | 2486 | ||
2425 | /** | 2487 | /** |
2426 | * lpfc_disable_msi: Disable MSI interrupt mode. | 2488 | * lpfc_disable_msi - Disable MSI interrupt mode |
2427 | * @phba: pointer to lpfc hba data structure. | 2489 | * @phba: pointer to lpfc hba data structure. |
2428 | * | 2490 | * |
2429 | * This routine is invoked to disable the MSI interrupt mode. The driver | 2491 | * This routine is invoked to disable the MSI interrupt mode. The driver |
@@ -2441,7 +2503,7 @@ lpfc_disable_msi(struct lpfc_hba *phba) | |||
2441 | } | 2503 | } |
2442 | 2504 | ||
2443 | /** | 2505 | /** |
2444 | * lpfc_log_intr_mode: Log the active interrupt mode | 2506 | * lpfc_log_intr_mode - Log the active interrupt mode |
2445 | * @phba: pointer to lpfc hba data structure. | 2507 | * @phba: pointer to lpfc hba data structure. |
2446 | * @intr_mode: active interrupt mode adopted. | 2508 | * @intr_mode: active interrupt mode adopted. |
2447 | * | 2509 | * |
@@ -2490,7 +2552,7 @@ lpfc_stop_port(struct lpfc_hba *phba) | |||
2490 | } | 2552 | } |
2491 | 2553 | ||
2492 | /** | 2554 | /** |
2493 | * lpfc_enable_intr: Enable device interrupt. | 2555 | * lpfc_enable_intr - Enable device interrupt |
2494 | * @phba: pointer to lpfc hba data structure. | 2556 | * @phba: pointer to lpfc hba data structure. |
2495 | * | 2557 | * |
2496 | * This routine is invoked to enable device interrupt and associate driver's | 2558 | * This routine is invoked to enable device interrupt and associate driver's |
@@ -2547,7 +2609,7 @@ lpfc_enable_intr(struct lpfc_hba *phba, uint32_t cfg_mode) | |||
2547 | } | 2609 | } |
2548 | 2610 | ||
2549 | /** | 2611 | /** |
2550 | * lpfc_disable_intr: Disable device interrupt. | 2612 | * lpfc_disable_intr - Disable device interrupt |
2551 | * @phba: pointer to lpfc hba data structure. | 2613 | * @phba: pointer to lpfc hba data structure. |
2552 | * | 2614 | * |
2553 | * This routine is invoked to disable device interrupt and disassociate the | 2615 | * This routine is invoked to disable device interrupt and disassociate the |
@@ -2574,7 +2636,7 @@ lpfc_disable_intr(struct lpfc_hba *phba) | |||
2574 | } | 2636 | } |
2575 | 2637 | ||
2576 | /** | 2638 | /** |
2577 | * lpfc_pci_probe_one: lpfc PCI probe func to register device to PCI subsystem. | 2639 | * lpfc_pci_probe_one - lpfc PCI probe func to register device to PCI subsystem |
2578 | * @pdev: pointer to PCI device | 2640 | * @pdev: pointer to PCI device |
2579 | * @pid: pointer to PCI device identifier | 2641 | * @pid: pointer to PCI device identifier |
2580 | * | 2642 | * |
@@ -3010,7 +3072,7 @@ out: | |||
3010 | } | 3072 | } |
3011 | 3073 | ||
3012 | /** | 3074 | /** |
3013 | * lpfc_pci_remove_one: lpfc PCI func to unregister device from PCI subsystem. | 3075 | * lpfc_pci_remove_one - lpfc PCI func to unregister device from PCI subsystem |
3014 | * @pdev: pointer to PCI device | 3076 | * @pdev: pointer to PCI device |
3015 | * | 3077 | * |
3016 | * This routine is to be registered to the kernel's PCI subsystem. When an | 3078 | * This routine is to be registered to the kernel's PCI subsystem. When an |
@@ -3033,8 +3095,6 @@ lpfc_pci_remove_one(struct pci_dev *pdev) | |||
3033 | 3095 | ||
3034 | lpfc_free_sysfs_attr(vport); | 3096 | lpfc_free_sysfs_attr(vport); |
3035 | 3097 | ||
3036 | kthread_stop(phba->worker_thread); | ||
3037 | |||
3038 | /* Release all the vports against this physical port */ | 3098 | /* Release all the vports against this physical port */ |
3039 | vports = lpfc_create_vport_work_array(phba); | 3099 | vports = lpfc_create_vport_work_array(phba); |
3040 | if (vports != NULL) | 3100 | if (vports != NULL) |
@@ -3052,7 +3112,12 @@ lpfc_pci_remove_one(struct pci_dev *pdev) | |||
3052 | * clears the rings, discards all mailbox commands, and resets | 3112 | * clears the rings, discards all mailbox commands, and resets |
3053 | * the HBA. | 3113 | * the HBA. |
3054 | */ | 3114 | */ |
3115 | |||
3116 | /* HBA interrupt will be diabled after this call */ | ||
3055 | lpfc_sli_hba_down(phba); | 3117 | lpfc_sli_hba_down(phba); |
3118 | /* Stop kthread signal shall trigger work_done one more time */ | ||
3119 | kthread_stop(phba->worker_thread); | ||
3120 | /* Final cleanup of txcmplq and reset the HBA */ | ||
3056 | lpfc_sli_brdrestart(phba); | 3121 | lpfc_sli_brdrestart(phba); |
3057 | 3122 | ||
3058 | lpfc_stop_phba_timers(phba); | 3123 | lpfc_stop_phba_timers(phba); |
@@ -3095,7 +3160,7 @@ lpfc_pci_remove_one(struct pci_dev *pdev) | |||
3095 | } | 3160 | } |
3096 | 3161 | ||
3097 | /** | 3162 | /** |
3098 | * lpfc_pci_suspend_one: lpfc PCI func to suspend device for power management. | 3163 | * lpfc_pci_suspend_one - lpfc PCI func to suspend device for power management |
3099 | * @pdev: pointer to PCI device | 3164 | * @pdev: pointer to PCI device |
3100 | * @msg: power management message | 3165 | * @msg: power management message |
3101 | * | 3166 | * |
@@ -3139,7 +3204,7 @@ lpfc_pci_suspend_one(struct pci_dev *pdev, pm_message_t msg) | |||
3139 | } | 3204 | } |
3140 | 3205 | ||
3141 | /** | 3206 | /** |
3142 | * lpfc_pci_resume_one: lpfc PCI func to resume device for power management. | 3207 | * lpfc_pci_resume_one - lpfc PCI func to resume device for power management |
3143 | * @pdev: pointer to PCI device | 3208 | * @pdev: pointer to PCI device |
3144 | * | 3209 | * |
3145 | * This routine is to be registered to the kernel's PCI subsystem to support | 3210 | * This routine is to be registered to the kernel's PCI subsystem to support |
@@ -3204,7 +3269,7 @@ lpfc_pci_resume_one(struct pci_dev *pdev) | |||
3204 | } | 3269 | } |
3205 | 3270 | ||
3206 | /** | 3271 | /** |
3207 | * lpfc_io_error_detected: Driver method for handling PCI I/O error detected. | 3272 | * lpfc_io_error_detected - Driver method for handling PCI I/O error detected |
3208 | * @pdev: pointer to PCI device. | 3273 | * @pdev: pointer to PCI device. |
3209 | * @state: the current PCI connection state. | 3274 | * @state: the current PCI connection state. |
3210 | * | 3275 | * |
@@ -3254,7 +3319,7 @@ static pci_ers_result_t lpfc_io_error_detected(struct pci_dev *pdev, | |||
3254 | } | 3319 | } |
3255 | 3320 | ||
3256 | /** | 3321 | /** |
3257 | * lpfc_io_slot_reset: Restart a PCI device from scratch. | 3322 | * lpfc_io_slot_reset - Restart a PCI device from scratch |
3258 | * @pdev: pointer to PCI device. | 3323 | * @pdev: pointer to PCI device. |
3259 | * | 3324 | * |
3260 | * This routine is registered to the PCI subsystem for error handling. This is | 3325 | * This routine is registered to the PCI subsystem for error handling. This is |
@@ -3313,7 +3378,7 @@ static pci_ers_result_t lpfc_io_slot_reset(struct pci_dev *pdev) | |||
3313 | } | 3378 | } |
3314 | 3379 | ||
3315 | /** | 3380 | /** |
3316 | * lpfc_io_resume: Resume PCI I/O operation. | 3381 | * lpfc_io_resume - Resume PCI I/O operation |
3317 | * @pdev: pointer to PCI device | 3382 | * @pdev: pointer to PCI device |
3318 | * | 3383 | * |
3319 | * This routine is registered to the PCI subsystem for error handling. It is | 3384 | * This routine is registered to the PCI subsystem for error handling. It is |
@@ -3426,7 +3491,7 @@ static struct pci_driver lpfc_driver = { | |||
3426 | }; | 3491 | }; |
3427 | 3492 | ||
3428 | /** | 3493 | /** |
3429 | * lpfc_init: lpfc module initialization routine. | 3494 | * lpfc_init - lpfc module initialization routine |
3430 | * | 3495 | * |
3431 | * This routine is to be invoked when the lpfc module is loaded into the | 3496 | * This routine is to be invoked when the lpfc module is loaded into the |
3432 | * kernel. The special kernel macro module_init() is used to indicate the | 3497 | * kernel. The special kernel macro module_init() is used to indicate the |
@@ -3472,7 +3537,7 @@ lpfc_init(void) | |||
3472 | } | 3537 | } |
3473 | 3538 | ||
3474 | /** | 3539 | /** |
3475 | * lpfc_exit: lpfc module removal routine. | 3540 | * lpfc_exit - lpfc module removal routine |
3476 | * | 3541 | * |
3477 | * This routine is invoked when the lpfc module is removed from the kernel. | 3542 | * This routine is invoked when the lpfc module is removed from the kernel. |
3478 | * The special kernel macro module_exit() is used to indicate the role of | 3543 | * The special kernel macro module_exit() is used to indicate the role of |