1 /*******************************************************************
2 * This file is part of the Emulex Linux Device Driver for *
3 * Fibre Channel Host Bus Adapters. *
4 * Copyright (C) 2017-2024 Broadcom. All Rights Reserved. The term *
5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. *
6 * Copyright (C) 2004-2016 Emulex. All rights reserved. *
7 * EMULEX and SLI are trademarks of Emulex. *
9 * Portions Copyright (C) 2004-2005 Christoph Hellwig *
11 * This program is free software; you can redistribute it and/or *
12 * modify it under the terms of version 2 of the GNU General *
13 * Public License as published by the Free Software Foundation. *
14 * This program is distributed in the hope that it will be useful. *
15 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND *
16 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, *
17 * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE *
18 * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
19 * TO BE LEGALLY INVALID. See the GNU General Public License for *
20 * more details, a copy of which can be found in the file COPYING *
21 * included with this package. *
22 *******************************************************************/
24 #include <linux/blkdev.h>
25 #include <linux/delay.h>
26 #include <linux/dma-mapping.h>
27 #include <linux/idr.h>
28 #include <linux/interrupt.h>
29 #include <linux/kthread.h>
30 #include <linux/pci.h>
31 #include <linux/slab.h>
32 #include <linux/spinlock.h>
33 #include <linux/sched/signal.h>
35 #include <scsi/scsi.h>
36 #include <scsi/scsi_device.h>
37 #include <scsi/scsi_host.h>
38 #include <scsi/scsi_transport_fc.h>
43 #include "lpfc_sli4.h"
45 #include "lpfc_disc.h"
46 #include "lpfc_scsi.h"
48 #include "lpfc_logmsg.h"
49 #include "lpfc_crtn.h"
50 #include "lpfc_version.h"
51 #include "lpfc_vport.h"
53 inline void lpfc_vport_set_state(struct lpfc_vport
*vport
,
54 enum fc_vport_state new_state
)
56 struct fc_vport
*fc_vport
= vport
->fc_vport
;
60 * When the transport defines fc_vport_set state we will replace
61 * this code with the following line
63 /* fc_vport_set_state(fc_vport, new_state); */
64 if (new_state
!= FC_VPORT_INITIALIZING
)
65 fc_vport
->vport_last_state
= fc_vport
->vport_state
;
66 fc_vport
->vport_state
= new_state
;
69 /* for all the error states we will set the invternal state to FAILED */
71 case FC_VPORT_NO_FABRIC_SUPP
:
72 case FC_VPORT_NO_FABRIC_RSCS
:
73 case FC_VPORT_FABRIC_LOGOUT
:
74 case FC_VPORT_FABRIC_REJ_WWN
:
76 vport
->port_state
= LPFC_VPORT_FAILED
;
78 case FC_VPORT_LINKDOWN
:
79 vport
->port_state
= LPFC_VPORT_UNKNOWN
;
88 lpfc_alloc_vpi(struct lpfc_hba
*phba
)
92 spin_lock_irq(&phba
->hbalock
);
93 /* Start at bit 1 because vpi zero is reserved for the physical port */
94 vpi
= find_next_zero_bit(phba
->vpi_bmask
, (phba
->max_vpi
+ 1), 1);
95 if (vpi
> phba
->max_vpi
)
98 set_bit(vpi
, phba
->vpi_bmask
);
99 if (phba
->sli_rev
== LPFC_SLI_REV4
)
100 phba
->sli4_hba
.max_cfg_param
.vpi_used
++;
101 spin_unlock_irq(&phba
->hbalock
);
106 lpfc_free_vpi(struct lpfc_hba
*phba
, int vpi
)
110 spin_lock_irq(&phba
->hbalock
);
111 clear_bit(vpi
, phba
->vpi_bmask
);
112 if (phba
->sli_rev
== LPFC_SLI_REV4
)
113 phba
->sli4_hba
.max_cfg_param
.vpi_used
--;
114 spin_unlock_irq(&phba
->hbalock
);
118 lpfc_vport_sparm(struct lpfc_hba
*phba
, struct lpfc_vport
*vport
)
122 struct lpfc_dmabuf
*mp
;
125 pmb
= mempool_alloc(phba
->mbox_mem_pool
, GFP_KERNEL
);
131 rc
= lpfc_read_sparam(phba
, pmb
, vport
->vpi
);
133 mempool_free(pmb
, phba
->mbox_mem_pool
);
138 * Wait for the read_sparams mailbox to complete. Driver needs
139 * this per vport to start the FDISC. If the mailbox fails,
140 * just cleanup and return an error unless the failure is a
141 * mailbox timeout. For MBX_TIMEOUT, allow the default
142 * mbox completion handler to take care of the cleanup. This
143 * is safe as the mailbox command isn't one that triggers
147 rc
= lpfc_sli_issue_mbox_wait(phba
, pmb
, phba
->fc_ratov
* 2);
148 if (rc
!= MBX_SUCCESS
) {
149 if (signal_pending(current
)) {
150 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
151 "1830 Signal aborted mbxCmd x%x\n",
153 if (rc
!= MBX_TIMEOUT
)
154 lpfc_mbox_rsrc_cleanup(phba
, pmb
,
158 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
159 "1818 VPort failed init, mbxCmd x%x "
160 "READ_SPARM mbxStatus x%x, rc = x%x\n",
161 mb
->mbxCommand
, mb
->mbxStatus
, rc
);
162 if (rc
!= MBX_TIMEOUT
)
163 lpfc_mbox_rsrc_cleanup(phba
, pmb
,
170 memcpy(&vport
->fc_sparam
, mp
->virt
, sizeof (struct serv_parm
));
171 memcpy(&vport
->fc_nodename
, &vport
->fc_sparam
.nodeName
,
172 sizeof (struct lpfc_name
));
173 memcpy(&vport
->fc_portname
, &vport
->fc_sparam
.portName
,
174 sizeof (struct lpfc_name
));
175 lpfc_mbox_rsrc_cleanup(phba
, pmb
, MBOX_THD_UNLOCKED
);
180 lpfc_valid_wwn_format(struct lpfc_hba
*phba
, struct lpfc_name
*wwn
,
181 const char *name_type
)
183 /* ensure that IEEE format 1 addresses
184 * contain zeros in bits 59-48
186 if (!((wwn
->u
.wwn
[0] >> 4) == 1 &&
187 ((wwn
->u
.wwn
[0] & 0xf) != 0 || (wwn
->u
.wwn
[1] & 0xf) != 0)))
190 lpfc_printf_log(phba
, KERN_ERR
, LOG_VPORT
,
191 "1822 Invalid %s: %02x:%02x:%02x:%02x:"
192 "%02x:%02x:%02x:%02x\n",
194 wwn
->u
.wwn
[0], wwn
->u
.wwn
[1],
195 wwn
->u
.wwn
[2], wwn
->u
.wwn
[3],
196 wwn
->u
.wwn
[4], wwn
->u
.wwn
[5],
197 wwn
->u
.wwn
[6], wwn
->u
.wwn
[7]);
202 lpfc_unique_wwpn(struct lpfc_hba
*phba
, struct lpfc_vport
*new_vport
)
204 struct lpfc_vport
*vport
;
207 spin_lock_irqsave(&phba
->port_list_lock
, flags
);
208 list_for_each_entry(vport
, &phba
->port_list
, listentry
) {
209 if (vport
== new_vport
)
211 /* If they match, return not unique */
212 if (memcmp(&vport
->fc_sparam
.portName
,
213 &new_vport
->fc_sparam
.portName
,
214 sizeof(struct lpfc_name
)) == 0) {
215 spin_unlock_irqrestore(&phba
->port_list_lock
, flags
);
219 spin_unlock_irqrestore(&phba
->port_list_lock
, flags
);
224 * lpfc_discovery_wait - Wait for driver discovery to quiesce
225 * @vport: The virtual port for which this call is being executed.
227 * This driver calls this routine specifically from lpfc_vport_delete
228 * to enforce a synchronous execution of vport
229 * delete relative to discovery activities. The
230 * lpfc_vport_delete routine should not return until it
231 * can reasonably guarantee that discovery has quiesced.
232 * Post FDISC LOGO, the driver must wait until its SAN teardown is
233 * complete and all resources recovered before allowing
236 * This routine does not require any locks held.
238 static void lpfc_discovery_wait(struct lpfc_vport
*vport
)
240 struct lpfc_hba
*phba
= vport
->phba
;
241 unsigned long wait_time_max
;
242 unsigned long start_time
;
245 * The time constraint on this loop is a balance between the
246 * fabric RA_TOV value and dev_loss tmo. The driver's
247 * devloss_tmo is 10 giving this loop a 3x multiplier minimally.
249 wait_time_max
= msecs_to_jiffies(((phba
->fc_ratov
* 3) + 3) * 1000);
250 wait_time_max
+= jiffies
;
251 start_time
= jiffies
;
252 while (time_before(jiffies
, wait_time_max
)) {
253 if ((vport
->num_disc_nodes
> 0) ||
254 test_bit(FC_RSCN_MODE
, &vport
->fc_flag
) ||
255 test_bit(FC_RSCN_DISCOVERY
, &vport
->fc_flag
) ||
256 test_bit(FC_NLP_MORE
, &vport
->fc_flag
) ||
257 test_bit(FC_RSCN_DEFERRED
, &vport
->fc_flag
) ||
258 test_bit(FC_NDISC_ACTIVE
, &vport
->fc_flag
) ||
259 test_bit(FC_DISC_TMO
, &vport
->fc_flag
) ||
260 ((vport
->port_state
> LPFC_VPORT_FAILED
) &&
261 (vport
->port_state
< LPFC_VPORT_READY
))) {
262 lpfc_printf_vlog(vport
, KERN_INFO
, LOG_VPORT
,
263 "1833 Vport discovery quiesce Wait: "
264 "state x%x fc_flags x%lx "
265 "num_nodes x%x, waiting 1000 msecs "
266 "total wait msecs x%x\n",
267 vport
->port_state
, vport
->fc_flag
,
268 vport
->num_disc_nodes
,
269 jiffies_to_msecs(jiffies
- start_time
));
272 /* Base case. Wait variants satisfied. Break out */
273 lpfc_printf_vlog(vport
, KERN_INFO
, LOG_VPORT
,
274 "1834 Vport discovery quiesced: "
275 "state x%x fc_flags x%lx "
277 vport
->port_state
, vport
->fc_flag
,
278 jiffies_to_msecs(jiffies
284 if (time_after(jiffies
, wait_time_max
))
285 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
286 "1835 Vport discovery quiesce failed:"
287 " state x%x fc_flags x%lx wait msecs x%x\n",
288 vport
->port_state
, vport
->fc_flag
,
289 jiffies_to_msecs(jiffies
- start_time
));
293 lpfc_vport_create(struct fc_vport
*fc_vport
, bool disable
)
295 struct lpfc_nodelist
*ndlp
;
296 struct Scsi_Host
*shost
= fc_vport
->shost
;
297 struct lpfc_vport
*pport
= (struct lpfc_vport
*) shost
->hostdata
;
298 struct lpfc_hba
*phba
= pport
->phba
;
299 struct lpfc_vport
*vport
= NULL
;
302 int rc
= VPORT_ERROR
;
305 if ((phba
->sli_rev
< 3) || !(phba
->cfg_enable_npiv
)) {
306 lpfc_printf_log(phba
, KERN_ERR
, LOG_TRACE_EVENT
,
307 "1808 Create VPORT failed: "
308 "NPIV is not enabled: SLImode:%d\n",
314 /* NPIV is not supported if HBA has NVME Target enabled */
315 if (phba
->nvmet_support
) {
316 lpfc_printf_log(phba
, KERN_ERR
, LOG_TRACE_EVENT
,
317 "3189 Create VPORT failed: "
318 "NPIV is not supported on NVME Target\n");
323 vpi
= lpfc_alloc_vpi(phba
);
325 lpfc_printf_log(phba
, KERN_ERR
, LOG_TRACE_EVENT
,
326 "1809 Create VPORT failed: "
327 "Max VPORTs (%d) exceeded\n",
329 rc
= VPORT_NORESOURCES
;
333 /* Assign an unused board number */
334 if ((instance
= lpfc_get_instance()) < 0) {
335 lpfc_printf_log(phba
, KERN_ERR
, LOG_TRACE_EVENT
,
336 "1810 Create VPORT failed: Cannot get "
337 "instance number\n");
338 lpfc_free_vpi(phba
, vpi
);
339 rc
= VPORT_NORESOURCES
;
343 vport
= lpfc_create_port(phba
, instance
, &fc_vport
->dev
);
345 lpfc_printf_log(phba
, KERN_ERR
, LOG_TRACE_EVENT
,
346 "1811 Create VPORT failed: vpi x%x\n", vpi
);
347 lpfc_free_vpi(phba
, vpi
);
348 rc
= VPORT_NORESOURCES
;
353 lpfc_debugfs_initialize(vport
);
355 if ((status
= lpfc_vport_sparm(phba
, vport
))) {
356 if (status
== -EINTR
) {
357 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
358 "1831 Create VPORT Interrupted.\n");
361 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
362 "1813 Create VPORT failed. "
363 "Cannot get sparam\n");
364 rc
= VPORT_NORESOURCES
;
366 lpfc_free_vpi(phba
, vpi
);
371 u64_to_wwn(fc_vport
->node_name
, vport
->fc_nodename
.u
.wwn
);
372 u64_to_wwn(fc_vport
->port_name
, vport
->fc_portname
.u
.wwn
);
374 memcpy(&vport
->fc_sparam
.portName
, vport
->fc_portname
.u
.wwn
, 8);
375 memcpy(&vport
->fc_sparam
.nodeName
, vport
->fc_nodename
.u
.wwn
, 8);
377 if (!lpfc_valid_wwn_format(phba
, &vport
->fc_sparam
.nodeName
, "WWNN") ||
378 !lpfc_valid_wwn_format(phba
, &vport
->fc_sparam
.portName
, "WWPN")) {
379 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
380 "1821 Create VPORT failed. "
381 "Invalid WWN format\n");
382 lpfc_free_vpi(phba
, vpi
);
388 if (!lpfc_unique_wwpn(phba
, vport
)) {
389 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
390 "1823 Create VPORT failed. "
391 "Duplicate WWN on HBA\n");
392 lpfc_free_vpi(phba
, vpi
);
398 /* Create binary sysfs attribute for vport */
399 lpfc_alloc_sysfs_attr(vport
);
401 /* Set the DFT_LUN_Q_DEPTH accordingly */
402 vport
->cfg_lun_queue_depth
= phba
->pport
->cfg_lun_queue_depth
;
404 /* Only the physical port can support NVME for now */
405 vport
->cfg_enable_fc4_type
= LPFC_ENABLE_FCP
;
407 *(struct lpfc_vport
**)fc_vport
->dd_data
= vport
;
408 vport
->fc_vport
= fc_vport
;
410 /* At this point we are fully registered with SCSI Layer. */
411 set_bit(FC_ALLOW_FDMI
, &vport
->load_flag
);
412 if (phba
->cfg_enable_SmartSAN
||
413 (phba
->cfg_fdmi_on
== LPFC_FDMI_SUPPORT
)) {
414 /* Setup appropriate attribute masks */
415 vport
->fdmi_hba_mask
= phba
->pport
->fdmi_hba_mask
;
416 vport
->fdmi_port_mask
= phba
->pport
->fdmi_port_mask
;
420 * In SLI4, the vpi must be activated before it can be used
423 if ((phba
->sli_rev
== LPFC_SLI_REV4
) &&
424 test_bit(FC_VFI_REGISTERED
, &pport
->fc_flag
)) {
425 rc
= lpfc_sli4_init_vpi(vport
);
427 lpfc_printf_log(phba
, KERN_ERR
, LOG_TRACE_EVENT
,
428 "1838 Failed to INIT_VPI on vpi %d "
429 "status %d\n", vpi
, rc
);
430 rc
= VPORT_NORESOURCES
;
431 lpfc_free_vpi(phba
, vpi
);
434 } else if (phba
->sli_rev
== LPFC_SLI_REV4
) {
436 * Driver cannot INIT_VPI now. Set the flags to
437 * init_vpi when reg_vfi complete.
439 set_bit(FC_VPORT_NEEDS_INIT_VPI
, &vport
->fc_flag
);
440 lpfc_vport_set_state(vport
, FC_VPORT_LINKDOWN
);
445 if ((phba
->link_state
< LPFC_LINK_UP
) ||
446 (pport
->port_state
< LPFC_FABRIC_CFG_LINK
) ||
447 (phba
->fc_topology
== LPFC_TOPOLOGY_LOOP
)) {
448 lpfc_vport_set_state(vport
, FC_VPORT_LINKDOWN
);
454 lpfc_vport_set_state(vport
, FC_VPORT_DISABLED
);
459 /* Use the Physical nodes Fabric NDLP to determine if the link is
460 * up and ready to FDISC.
462 ndlp
= lpfc_findnode_did(phba
->pport
, Fabric_DID
);
464 ndlp
->nlp_state
== NLP_STE_UNMAPPED_NODE
) {
465 if (phba
->link_flag
& LS_NPIV_FAB_SUPPORTED
) {
466 lpfc_set_disctmo(vport
);
467 lpfc_initial_fdisc(vport
);
469 lpfc_vport_set_state(vport
, FC_VPORT_NO_FABRIC_SUPP
);
470 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
471 "0262 No NPIV Fabric support\n");
474 lpfc_vport_set_state(vport
, FC_VPORT_FAILED
);
479 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_VPORT
,
480 "1825 Vport Created.\n");
481 lpfc_host_attrib_init(lpfc_shost_from_vport(vport
));
487 lpfc_send_npiv_logo(struct lpfc_vport
*vport
, struct lpfc_nodelist
*ndlp
)
490 struct lpfc_hba
*phba
= vport
->phba
;
492 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waitq
);
494 spin_lock_irq(&ndlp
->lock
);
495 if (!(ndlp
->save_flags
& NLP_WAIT_FOR_LOGO
) &&
497 ndlp
->logo_waitq
= &waitq
;
498 ndlp
->nlp_fcp_info
&= ~NLP_FCP_2_DEVICE
;
499 ndlp
->nlp_flag
|= NLP_ISSUE_LOGO
;
500 ndlp
->save_flags
|= NLP_WAIT_FOR_LOGO
;
502 spin_unlock_irq(&ndlp
->lock
);
503 rc
= lpfc_issue_els_npiv_logo(vport
, ndlp
);
505 wait_event_timeout(waitq
,
506 (!(ndlp
->save_flags
& NLP_WAIT_FOR_LOGO
)),
507 msecs_to_jiffies(phba
->fc_ratov
* 2000));
509 if (!(ndlp
->save_flags
& NLP_WAIT_FOR_LOGO
))
511 /* LOGO wait failed. Correct status. */
517 /* Error - clean up node flags. */
518 spin_lock_irq(&ndlp
->lock
);
519 ndlp
->nlp_flag
&= ~NLP_ISSUE_LOGO
;
520 ndlp
->save_flags
&= ~NLP_WAIT_FOR_LOGO
;
521 spin_unlock_irq(&ndlp
->lock
);
524 lpfc_printf_vlog(vport
, KERN_INFO
, LOG_VPORT
,
525 "1824 Issue LOGO completes with status %d\n",
527 spin_lock_irq(&ndlp
->lock
);
528 ndlp
->logo_waitq
= NULL
;
529 spin_unlock_irq(&ndlp
->lock
);
534 disable_vport(struct fc_vport
*fc_vport
)
536 struct lpfc_vport
*vport
= *(struct lpfc_vport
**)fc_vport
->dd_data
;
537 struct lpfc_hba
*phba
= vport
->phba
;
538 struct lpfc_nodelist
*ndlp
= NULL
;
540 /* Can't disable during an outstanding delete. */
541 if (test_bit(FC_UNLOADING
, &vport
->load_flag
))
544 ndlp
= lpfc_findnode_did(vport
, Fabric_DID
);
545 if (ndlp
&& phba
->link_state
>= LPFC_LINK_UP
)
546 (void)lpfc_send_npiv_logo(vport
, ndlp
);
548 lpfc_sli_host_down(vport
);
549 lpfc_cleanup_rpis(vport
, 0);
551 lpfc_stop_vport_timers(vport
);
552 lpfc_unreg_all_rpis(vport
);
553 lpfc_unreg_default_rpis(vport
);
555 * Completion of unreg_vpi (lpfc_mbx_cmpl_unreg_vpi) does the
556 * scsi_host_put() to release the vport.
558 lpfc_mbx_unreg_vpi(vport
);
559 if (phba
->sli_rev
== LPFC_SLI_REV4
)
560 set_bit(FC_VPORT_NEEDS_INIT_VPI
, &vport
->fc_flag
);
562 lpfc_vport_set_state(vport
, FC_VPORT_DISABLED
);
563 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_VPORT
,
564 "1826 Vport Disabled.\n");
569 enable_vport(struct fc_vport
*fc_vport
)
571 struct lpfc_vport
*vport
= *(struct lpfc_vport
**)fc_vport
->dd_data
;
572 struct lpfc_hba
*phba
= vport
->phba
;
573 struct lpfc_nodelist
*ndlp
= NULL
;
575 if ((phba
->link_state
< LPFC_LINK_UP
) ||
576 (phba
->fc_topology
== LPFC_TOPOLOGY_LOOP
)) {
577 lpfc_vport_set_state(vport
, FC_VPORT_LINKDOWN
);
581 set_bit(FC_LOADING
, &vport
->load_flag
);
582 if (test_bit(FC_VPORT_NEEDS_INIT_VPI
, &vport
->fc_flag
)) {
583 lpfc_issue_init_vpi(vport
);
587 set_bit(FC_VPORT_NEEDS_REG_VPI
, &vport
->fc_flag
);
589 /* Use the Physical nodes Fabric NDLP to determine if the link is
590 * up and ready to FDISC.
592 ndlp
= lpfc_findnode_did(phba
->pport
, Fabric_DID
);
593 if (ndlp
&& ndlp
->nlp_state
== NLP_STE_UNMAPPED_NODE
) {
594 if (phba
->link_flag
& LS_NPIV_FAB_SUPPORTED
) {
595 lpfc_set_disctmo(vport
);
596 lpfc_initial_fdisc(vport
);
598 lpfc_vport_set_state(vport
, FC_VPORT_NO_FABRIC_SUPP
);
599 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
600 "0264 No NPIV Fabric support\n");
603 lpfc_vport_set_state(vport
, FC_VPORT_FAILED
);
607 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_VPORT
,
608 "1827 Vport Enabled.\n");
613 lpfc_vport_disable(struct fc_vport
*fc_vport
, bool disable
)
616 return disable_vport(fc_vport
);
618 return enable_vport(fc_vport
);
622 lpfc_vport_delete(struct fc_vport
*fc_vport
)
624 struct lpfc_nodelist
*ndlp
= NULL
;
625 struct lpfc_vport
*vport
= *(struct lpfc_vport
**)fc_vport
->dd_data
;
626 struct Scsi_Host
*shost
= lpfc_shost_from_vport(vport
);
627 struct lpfc_hba
*phba
= vport
->phba
;
629 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waitq
);
631 if (vport
->port_type
== LPFC_PHYSICAL_PORT
) {
632 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
633 "1812 vport_delete failed: Cannot delete "
638 /* If the vport is a static vport fail the deletion. */
639 if ((vport
->vport_flag
& STATIC_VPORT
) &&
640 !test_bit(FC_UNLOADING
, &phba
->pport
->load_flag
)) {
641 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_TRACE_EVENT
,
642 "1837 vport_delete failed: Cannot delete "
647 set_bit(FC_UNLOADING
, &vport
->load_flag
);
650 * If we are not unloading the driver then prevent the vport_delete
651 * from happening until after this vport's discovery is finished.
653 if (!test_bit(FC_UNLOADING
, &phba
->pport
->load_flag
)) {
655 while (check_count
< ((phba
->fc_ratov
* 3) + 3) &&
656 vport
->port_state
> LPFC_VPORT_FAILED
&&
657 vport
->port_state
< LPFC_VPORT_READY
) {
661 if (vport
->port_state
> LPFC_VPORT_FAILED
&&
662 vport
->port_state
< LPFC_VPORT_READY
)
667 * Take early refcount for outstanding I/O requests we schedule during
668 * delete processing for unreg_vpi. Always keep this before
669 * scsi_remove_host() as we can no longer obtain a reference through
670 * scsi_host_get() after scsi_host_remove as shost is set to SHOST_DEL.
672 if (!scsi_host_get(shost
))
675 lpfc_free_sysfs_attr(vport
);
676 lpfc_debugfs_terminate(vport
);
678 /* Send the DA_ID and Fabric LOGO to cleanup Nameserver entries. */
679 ndlp
= lpfc_findnode_did(vport
, Fabric_DID
);
683 /* Send the DA_ID and Fabric LOGO to cleanup the NPIV fabric entries. */
684 if (ndlp
&& ndlp
->nlp_state
== NLP_STE_UNMAPPED_NODE
&&
685 phba
->link_state
>= LPFC_LINK_UP
&&
686 phba
->fc_topology
!= LPFC_TOPOLOGY_LOOP
) {
687 if (vport
->cfg_enable_da_id
) {
688 /* Send DA_ID and wait for a completion. This is best
689 * effort. If the DA_ID fails, likely the fabric will
690 * "leak" NportIDs but at least the driver issued the
693 ndlp
= lpfc_findnode_did(vport
, NameServer_DID
);
697 spin_lock_irq(&ndlp
->lock
);
698 ndlp
->da_id_waitq
= &waitq
;
699 ndlp
->save_flags
|= NLP_WAIT_FOR_DA_ID
;
700 spin_unlock_irq(&ndlp
->lock
);
702 rc
= lpfc_ns_cmd(vport
, SLI_CTNS_DA_ID
, 0, 0);
704 wait_event_timeout(waitq
,
705 !(ndlp
->save_flags
& NLP_WAIT_FOR_DA_ID
),
706 msecs_to_jiffies(phba
->fc_ratov
* 2000));
709 lpfc_printf_vlog(vport
, KERN_INFO
, LOG_VPORT
| LOG_ELS
,
710 "1829 DA_ID issue status %d. "
711 "SFlag x%x NState x%x, NFlag x%x "
713 rc
, ndlp
->save_flags
, ndlp
->nlp_state
,
714 ndlp
->nlp_flag
, ndlp
->nlp_rpi
);
716 /* Remove the waitq and save_flags. It no
717 * longer matters if the wake happened.
719 spin_lock_irq(&ndlp
->lock
);
720 ndlp
->da_id_waitq
= NULL
;
721 ndlp
->save_flags
&= ~NLP_WAIT_FOR_DA_ID
;
722 spin_unlock_irq(&ndlp
->lock
);
727 * If the vpi is not registered, then a valid FDISC doesn't
728 * exist and there is no need for a ELS LOGO. Just cleanup
731 if (!(vport
->vpi_state
& LPFC_VPI_REGISTERED
))
734 /* Issue a Fabric LOGO to cleanup fabric resources. */
735 ndlp
= lpfc_findnode_did(vport
, Fabric_DID
);
739 rc
= lpfc_send_npiv_logo(vport
, ndlp
);
744 if (!test_bit(FC_UNLOADING
, &phba
->pport
->load_flag
))
745 lpfc_discovery_wait(vport
);
749 /* Remove FC host to break driver binding. */
750 fc_remove_host(shost
);
751 scsi_remove_host(shost
);
755 /* Remove scsi host now. The nodes are cleaned up. */
756 lpfc_sli_host_down(vport
);
757 lpfc_stop_vport_timers(vport
);
759 if (!test_bit(FC_UNLOADING
, &phba
->pport
->load_flag
)) {
760 lpfc_unreg_all_rpis(vport
);
761 lpfc_unreg_default_rpis(vport
);
763 * Completion of unreg_vpi (lpfc_mbx_cmpl_unreg_vpi)
764 * does the scsi_host_put() to release the vport.
766 if (!(vport
->vpi_state
& LPFC_VPI_REGISTERED
) ||
767 lpfc_mbx_unreg_vpi(vport
))
768 scsi_host_put(shost
);
770 scsi_host_put(shost
);
773 lpfc_free_vpi(phba
, vport
->vpi
);
774 vport
->work_port_events
= 0;
775 spin_lock_irq(&phba
->port_list_lock
);
776 list_del_init(&vport
->listentry
);
777 spin_unlock_irq(&phba
->port_list_lock
);
778 lpfc_printf_vlog(vport
, KERN_ERR
, LOG_VPORT
,
779 "1828 Vport Deleted.\n");
780 scsi_host_put(shost
);
785 lpfc_create_vport_work_array(struct lpfc_hba
*phba
)
787 struct lpfc_vport
*port_iterator
;
788 struct lpfc_vport
**vports
;
790 vports
= kcalloc(phba
->max_vports
+ 1, sizeof(struct lpfc_vport
*),
794 spin_lock_irq(&phba
->port_list_lock
);
795 list_for_each_entry(port_iterator
, &phba
->port_list
, listentry
) {
796 if (test_bit(FC_UNLOADING
, &port_iterator
->load_flag
))
798 if (!scsi_host_get(lpfc_shost_from_vport(port_iterator
))) {
799 lpfc_printf_vlog(port_iterator
, KERN_ERR
,
801 "1801 Create vport work array FAILED: "
802 "cannot do scsi_host_get\n");
805 vports
[index
++] = port_iterator
;
807 spin_unlock_irq(&phba
->port_list_lock
);
812 lpfc_destroy_vport_work_array(struct lpfc_hba
*phba
, struct lpfc_vport
**vports
)
817 for (i
= 0; i
<= phba
->max_vports
&& vports
[i
] != NULL
; i
++)
818 scsi_host_put(lpfc_shost_from_vport(vports
[i
]));