You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[SCSI] lpfc 8.2.2 : Attribute and Parameter splits for vport and physical port
- Split attributes up into vport and non-vport attributes. - Move vport specific cfg params to vport Many of the vport-specific behaviors were still global attributes on the physical port. Move them to the vport itself. Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
committed by
James Bottomley
parent
549e55cd2a
commit
3de2a653a1
+19
-15
@@ -338,6 +338,20 @@ struct lpfc_vport {
|
||||
struct lpfc_debugfs_trc *disc_trc;
|
||||
atomic_t disc_trc_cnt;
|
||||
#endif
|
||||
/* Vport Config Parameters */
|
||||
uint32_t cfg_scan_down;
|
||||
uint32_t cfg_lun_queue_depth;
|
||||
uint32_t cfg_nodev_tmo;
|
||||
uint32_t cfg_devloss_tmo;
|
||||
uint32_t cfg_restrict_login;
|
||||
uint32_t cfg_peer_port_login;
|
||||
uint32_t cfg_fcp_class;
|
||||
uint32_t cfg_use_adisc;
|
||||
uint32_t cfg_fdmi_on;
|
||||
uint32_t cfg_discovery_threads;
|
||||
uint32_t cfg_max_luns;
|
||||
|
||||
uint32_t dev_loss_tmo_changed;
|
||||
};
|
||||
|
||||
struct hbq_s {
|
||||
@@ -413,28 +427,16 @@ struct lpfc_hba {
|
||||
uint8_t wwpn[8];
|
||||
uint32_t RandomData[7];
|
||||
|
||||
uint32_t cfg_log_verbose;
|
||||
uint32_t cfg_lun_queue_depth;
|
||||
uint32_t cfg_nodev_tmo;
|
||||
uint32_t cfg_devloss_tmo;
|
||||
uint32_t cfg_hba_queue_depth;
|
||||
uint32_t cfg_peer_port_login;
|
||||
uint32_t cfg_vport_restrict_login;
|
||||
uint32_t cfg_npiv_enable;
|
||||
uint32_t cfg_fcp_class;
|
||||
uint32_t cfg_use_adisc;
|
||||
/* HBA Config Parameters */
|
||||
uint32_t cfg_ack0;
|
||||
uint32_t cfg_npiv_enable;
|
||||
uint32_t cfg_topology;
|
||||
uint32_t cfg_scan_down;
|
||||
uint32_t cfg_link_speed;
|
||||
uint32_t cfg_cr_delay;
|
||||
uint32_t cfg_cr_count;
|
||||
uint32_t cfg_multi_ring_support;
|
||||
uint32_t cfg_multi_ring_rctl;
|
||||
uint32_t cfg_multi_ring_type;
|
||||
uint32_t cfg_fdmi_on;
|
||||
uint32_t cfg_discovery_threads;
|
||||
uint32_t cfg_max_luns;
|
||||
uint32_t cfg_poll;
|
||||
uint32_t cfg_poll_tmo;
|
||||
uint32_t cfg_use_msi;
|
||||
@@ -442,8 +444,10 @@ struct lpfc_hba {
|
||||
uint32_t cfg_sg_dma_buf_size;
|
||||
uint64_t cfg_soft_wwnn;
|
||||
uint64_t cfg_soft_wwpn;
|
||||
uint32_t cfg_hba_queue_depth;
|
||||
|
||||
uint32_t dev_loss_tmo_changed;
|
||||
/* Config paramters that should be in the vport */
|
||||
uint32_t cfg_log_verbose;
|
||||
|
||||
lpfc_vpd_t vpd; /* vital product data */
|
||||
|
||||
|
||||
+265
-87
File diff suppressed because it is too large
Load Diff
@@ -250,10 +250,13 @@ const char* lpfc_info(struct Scsi_Host *);
|
||||
int lpfc_scan_finished(struct Scsi_Host *, unsigned long);
|
||||
|
||||
void lpfc_get_cfgparam(struct lpfc_hba *);
|
||||
void lpfc_get_vport_cfgparam(struct lpfc_vport *);
|
||||
int lpfc_alloc_sysfs_attr(struct lpfc_vport *);
|
||||
void lpfc_free_sysfs_attr(struct lpfc_vport *);
|
||||
extern struct class_device_attribute *lpfc_hba_attrs[];
|
||||
extern struct class_device_attribute *lpfc_vport_attrs[];
|
||||
extern struct scsi_host_template lpfc_template;
|
||||
extern struct scsi_host_template lpfc_vport_template;
|
||||
extern struct fc_function_template lpfc_transport_functions;
|
||||
extern struct fc_function_template lpfc_vport_transport_functions;
|
||||
extern int lpfc_sli_mode;
|
||||
@@ -262,7 +265,7 @@ int lpfc_vport_symbolic_node_name(struct lpfc_vport *, char *, size_t);
|
||||
void lpfc_terminate_rport_io(struct fc_rport *);
|
||||
void lpfc_dev_loss_tmo_callbk(struct fc_rport *rport);
|
||||
|
||||
struct lpfc_vport *lpfc_create_port(struct lpfc_hba *, int, struct fc_vport *);
|
||||
struct lpfc_vport *lpfc_create_port(struct lpfc_hba *, int, struct device *);
|
||||
int lpfc_vport_disable(struct fc_vport *fc_vport, bool disable);
|
||||
void lpfc_mbx_unreg_vpi(struct lpfc_vport *);
|
||||
void destroy_port(struct lpfc_vport *);
|
||||
|
||||
@@ -451,10 +451,10 @@ lpfc_ns_rsp(struct lpfc_vport *vport, struct lpfc_dmabuf *mp, uint32_t Size)
|
||||
*/
|
||||
if ((Did != vport->fc_myDID) &&
|
||||
((lpfc_find_vport_by_did(phba, Did) == NULL) ||
|
||||
phba->cfg_peer_port_login)) {
|
||||
vport->cfg_peer_port_login)) {
|
||||
if ((vport->port_type != LPFC_NPIV_PORT) ||
|
||||
(vport->fc_flag & FC_RFF_NOT_SUPPORTED) ||
|
||||
(!phba->cfg_vport_restrict_login)) {
|
||||
(!vport->cfg_restrict_login)) {
|
||||
ndlp = lpfc_setup_disc_node(vport, Did);
|
||||
if (ndlp) {
|
||||
lpfc_debugfs_disc_trc(vport,
|
||||
@@ -1471,7 +1471,7 @@ lpfc_fdmi_cmd(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, int cmdcode)
|
||||
pab->ab.EntryCnt++;
|
||||
size += FOURBYTES + len;
|
||||
|
||||
if (phba->cfg_fdmi_on == 2) {
|
||||
if (vport->cfg_fdmi_on == 2) {
|
||||
/* #6 Port attribute entry */
|
||||
ae = (ATTRIBUTE_ENTRY *) ((uint8_t *) pab +
|
||||
size);
|
||||
|
||||
@@ -518,7 +518,7 @@ lpfc_cmpl_els_flogi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
|
||||
* alpa map would take too long otherwise.
|
||||
*/
|
||||
if (phba->alpa_map[0] == 0) {
|
||||
phba->cfg_discovery_threads = LPFC_MAX_DISC_THREADS;
|
||||
vport->cfg_discovery_threads = LPFC_MAX_DISC_THREADS;
|
||||
}
|
||||
|
||||
/* FLOGI failure */
|
||||
@@ -2640,7 +2640,7 @@ lpfc_els_disc_adisc(struct lpfc_vport *vport)
|
||||
sentadisc++;
|
||||
vport->num_disc_nodes++;
|
||||
if (vport->num_disc_nodes >=
|
||||
vport->phba->cfg_discovery_threads) {
|
||||
vport->cfg_discovery_threads) {
|
||||
spin_lock_irq(shost->host_lock);
|
||||
vport->fc_flag |= FC_NLP_MORE;
|
||||
spin_unlock_irq(shost->host_lock);
|
||||
@@ -2675,7 +2675,7 @@ lpfc_els_disc_plogi(struct lpfc_vport *vport)
|
||||
sentplogi++;
|
||||
vport->num_disc_nodes++;
|
||||
if (vport->num_disc_nodes >=
|
||||
vport->phba->cfg_discovery_threads) {
|
||||
vport->cfg_discovery_threads) {
|
||||
spin_lock_irq(shost->host_lock);
|
||||
vport->fc_flag |= FC_NLP_MORE;
|
||||
spin_unlock_irq(shost->host_lock);
|
||||
@@ -2841,7 +2841,7 @@ lpfc_els_rcv_rscn(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
|
||||
* just ACC and ignore it.
|
||||
*/
|
||||
if ((phba->sli3_options & LPFC_SLI3_NPIV_ENABLED) &&
|
||||
!(phba->cfg_peer_port_login)) {
|
||||
!(vport->cfg_peer_port_login)) {
|
||||
i = payload_len;
|
||||
datap = lp;
|
||||
while (i > 0) {
|
||||
@@ -4170,7 +4170,7 @@ lpfc_do_scr_ns_plogi(struct lpfc_hba *phba, struct lpfc_vport *vport)
|
||||
return;
|
||||
}
|
||||
|
||||
if (phba->cfg_fdmi_on) {
|
||||
if (vport->cfg_fdmi_on) {
|
||||
ndlp_fdmi = mempool_alloc(phba->nlp_mem_pool,
|
||||
GFP_KERNEL);
|
||||
if (ndlp_fdmi) {
|
||||
|
||||
@@ -2200,7 +2200,7 @@ lpfc_disc_list_loopmap(struct lpfc_vport *vport)
|
||||
/* If cfg_scan_down is set, start from highest
|
||||
* ALPA (0xef) to lowest (0x1).
|
||||
*/
|
||||
if (phba->cfg_scan_down)
|
||||
if (vport->cfg_scan_down)
|
||||
index = j;
|
||||
else
|
||||
index = FC_MAXLOOP - j - 1;
|
||||
@@ -2749,7 +2749,7 @@ lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
|
||||
* fdmi-on=2 (supporting RPA/hostnmae)
|
||||
*/
|
||||
|
||||
if (phba->cfg_fdmi_on == 1)
|
||||
if (vport->cfg_fdmi_on == 1)
|
||||
lpfc_fdmi_cmd(vport, ndlp, SLI_MGMT_DHBA);
|
||||
else
|
||||
mod_timer(&vport->fc_fdmitmo, jiffies + HZ * 60);
|
||||
|
||||
@@ -1524,13 +1524,18 @@ lpfc_scsi_free(struct lpfc_hba *phba)
|
||||
}
|
||||
|
||||
struct lpfc_vport *
|
||||
lpfc_create_port(struct lpfc_hba *phba, int instance, struct fc_vport *fc_vport)
|
||||
lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
|
||||
{
|
||||
struct lpfc_vport *vport;
|
||||
struct Scsi_Host *shost;
|
||||
int error = 0;
|
||||
|
||||
shost = scsi_host_alloc(&lpfc_template, sizeof(struct lpfc_vport));
|
||||
if (dev != &phba->pcidev->dev)
|
||||
shost = scsi_host_alloc(&lpfc_vport_template,
|
||||
sizeof(struct lpfc_vport));
|
||||
else
|
||||
shost = scsi_host_alloc(&lpfc_template,
|
||||
sizeof(struct lpfc_vport));
|
||||
if (!shost)
|
||||
goto out;
|
||||
|
||||
@@ -1540,9 +1545,10 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct fc_vport *fc_vport)
|
||||
vport->load_flag |= FC_LOADING;
|
||||
vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
|
||||
|
||||
lpfc_get_vport_cfgparam(vport);
|
||||
shost->unique_id = instance;
|
||||
shost->max_id = LPFC_MAX_TARGET;
|
||||
shost->max_lun = phba->cfg_max_luns;
|
||||
shost->max_lun = vport->cfg_max_luns;
|
||||
shost->this_id = -1;
|
||||
shost->max_cmd_len = 16;
|
||||
/*
|
||||
@@ -1551,7 +1557,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct fc_vport *fc_vport)
|
||||
* max xri value determined in hba setup.
|
||||
*/
|
||||
shost->can_queue = phba->cfg_hba_queue_depth - 10;
|
||||
if (fc_vport != NULL) {
|
||||
if (dev != &phba->pcidev->dev) {
|
||||
shost->transportt = lpfc_vport_transport_template;
|
||||
vport->port_type = LPFC_NPIV_PORT;
|
||||
} else {
|
||||
@@ -1575,11 +1581,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct fc_vport *fc_vport)
|
||||
vport->els_tmofunc.function = lpfc_els_timeout;
|
||||
vport->els_tmofunc.data = (unsigned long)vport;
|
||||
|
||||
if (fc_vport != NULL) {
|
||||
error = scsi_add_host(shost, &fc_vport->dev);
|
||||
} else {
|
||||
error = scsi_add_host(shost, &phba->pcidev->dev);
|
||||
}
|
||||
error = scsi_add_host(shost, dev);
|
||||
if (error)
|
||||
goto out_put_shost;
|
||||
|
||||
@@ -1895,7 +1897,7 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
|
||||
/* Initialize list of fabric iocbs */
|
||||
INIT_LIST_HEAD(&phba->fabric_iocb_list);
|
||||
|
||||
vport = lpfc_create_port(phba, phba->brd_no, NULL);
|
||||
vport = lpfc_create_port(phba, phba->brd_no, &phba->pcidev->dev);
|
||||
if (!vport)
|
||||
goto out_kthread_stop;
|
||||
|
||||
|
||||
@@ -304,7 +304,7 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
|
||||
ndlp->nlp_DID, ndlp->nlp_state, ndlp->nlp_flag,
|
||||
ndlp->nlp_rpi);
|
||||
|
||||
if (phba->cfg_fcp_class == 2 && sp->cls2.classValid)
|
||||
if (vport->cfg_fcp_class == 2 && sp->cls2.classValid)
|
||||
ndlp->nlp_fcp_info |= CLASS2;
|
||||
else
|
||||
ndlp->nlp_fcp_info |= CLASS3;
|
||||
@@ -392,7 +392,7 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
|
||||
}
|
||||
|
||||
if ((vport->port_type == LPFC_NPIV_PORT &&
|
||||
phba->cfg_vport_restrict_login)) {
|
||||
vport->cfg_restrict_login)) {
|
||||
|
||||
/* In order to preserve RPIs, we want to cleanup
|
||||
* the default RPI the firmware created to rcv
|
||||
@@ -564,10 +564,9 @@ static uint32_t
|
||||
lpfc_disc_set_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
||||
{
|
||||
struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
|
||||
struct lpfc_hba *phba = vport->phba;
|
||||
|
||||
/* Check config parameter use-adisc or FCP-2 */
|
||||
if ((phba->cfg_use_adisc && (vport->fc_flag & FC_RSCN_MODE)) ||
|
||||
if ((vport->cfg_use_adisc && (vport->fc_flag & FC_RSCN_MODE)) ||
|
||||
ndlp->nlp_fcp_info & NLP_FCP_2_DEVICE) {
|
||||
spin_lock_irq(shost->host_lock);
|
||||
ndlp->nlp_flag |= NLP_NPR_ADISC;
|
||||
@@ -787,7 +786,7 @@ lpfc_cmpl_plogi_plogi_issue(struct lpfc_vport *vport,
|
||||
ndlp->nlp_DID, ndlp->nlp_state,
|
||||
ndlp->nlp_flag, ndlp->nlp_rpi);
|
||||
|
||||
if (phba->cfg_fcp_class == 2 && (sp->cls2.classValid))
|
||||
if (vport->cfg_fcp_class == 2 && (sp->cls2.classValid))
|
||||
ndlp->nlp_fcp_info |= CLASS2;
|
||||
else
|
||||
ndlp->nlp_fcp_info |= CLASS3;
|
||||
@@ -1358,7 +1357,7 @@ lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
|
||||
irsp = &rspiocb->iocb;
|
||||
if (irsp->ulpStatus) {
|
||||
if ((vport->port_type == LPFC_NPIV_PORT) &&
|
||||
phba->cfg_vport_restrict_login) {
|
||||
vport->cfg_restrict_login) {
|
||||
goto out;
|
||||
}
|
||||
ndlp->nlp_prev_state = NLP_STE_PRLI_ISSUE;
|
||||
@@ -1380,7 +1379,7 @@ lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
|
||||
}
|
||||
if (!(ndlp->nlp_type & NLP_FCP_TARGET) &&
|
||||
(vport->port_type == LPFC_NPIV_PORT) &&
|
||||
phba->cfg_vport_restrict_login) {
|
||||
vport->cfg_restrict_login) {
|
||||
out:
|
||||
spin_lock_irq(shost->host_lock);
|
||||
ndlp->nlp_flag |= NLP_TARGET_REMOVE;
|
||||
|
||||
@@ -84,22 +84,21 @@ lpfc_adjust_queue_depth(struct lpfc_hba *phba)
|
||||
* SCSI command completion.
|
||||
*/
|
||||
static inline void
|
||||
lpfc_rampup_queue_depth(struct lpfc_hba *phba,
|
||||
lpfc_rampup_queue_depth(struct lpfc_vport *vport,
|
||||
struct scsi_device *sdev)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct lpfc_hba *phba = vport->phba;
|
||||
atomic_inc(&phba->num_cmd_success);
|
||||
|
||||
if (phba->cfg_lun_queue_depth <= sdev->queue_depth)
|
||||
if (vport->cfg_lun_queue_depth <= sdev->queue_depth)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&phba->hbalock, flags);
|
||||
if (((phba->last_ramp_up_time + QUEUE_RAMP_UP_INTERVAL) > jiffies) ||
|
||||
((phba->last_rsrc_error_time + QUEUE_RAMP_UP_INTERVAL ) > jiffies)) {
|
||||
spin_unlock_irqrestore(&phba->hbalock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
phba->last_ramp_up_time = jiffies;
|
||||
spin_unlock_irqrestore(&phba->hbalock, flags);
|
||||
|
||||
@@ -627,16 +626,16 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
|
||||
|
||||
|
||||
if (!result)
|
||||
lpfc_rampup_queue_depth(phba, sdev);
|
||||
lpfc_rampup_queue_depth(vport, sdev);
|
||||
|
||||
if (!result && pnode != NULL &&
|
||||
((jiffies - pnode->last_ramp_up_time) >
|
||||
LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
|
||||
((jiffies - pnode->last_q_full_time) >
|
||||
LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
|
||||
(phba->cfg_lun_queue_depth > sdev->queue_depth)) {
|
||||
(vport->cfg_lun_queue_depth > sdev->queue_depth)) {
|
||||
shost_for_each_device(tmp_sdev, sdev->host) {
|
||||
if (phba->cfg_lun_queue_depth > tmp_sdev->queue_depth) {
|
||||
if (vport->cfg_lun_queue_depth > tmp_sdev->queue_depth){
|
||||
if (tmp_sdev->id != sdev->id)
|
||||
continue;
|
||||
if (tmp_sdev->ordered_tags)
|
||||
@@ -1099,7 +1098,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
||||
|
||||
schedule_timeout_uninterruptible(LPFC_ABORT_WAIT * HZ);
|
||||
if (++loop_count
|
||||
> (2 * phba->cfg_devloss_tmo)/LPFC_ABORT_WAIT)
|
||||
> (2 * vport->cfg_devloss_tmo)/LPFC_ABORT_WAIT)
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1154,7 +1153,7 @@ lpfc_device_reset_handler(struct scsi_cmnd *cmnd)
|
||||
loopcnt++;
|
||||
rdata = cmnd->device->hostdata;
|
||||
if (!rdata ||
|
||||
(loopcnt > ((phba->cfg_devloss_tmo * 2) + 1))) {
|
||||
(loopcnt > ((vport->cfg_devloss_tmo * 2) + 1))){
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_FCP,
|
||||
"%d (%d):0721 LUN Reset rport "
|
||||
"failure: cnt x%x rdata x%p\n",
|
||||
@@ -1230,7 +1229,7 @@ lpfc_device_reset_handler(struct scsi_cmnd *cmnd)
|
||||
schedule_timeout_uninterruptible(LPFC_RESET_WAIT*HZ);
|
||||
|
||||
if (++loopcnt
|
||||
> (2 * phba->cfg_devloss_tmo)/LPFC_RESET_WAIT)
|
||||
> (2 * vport->cfg_devloss_tmo)/LPFC_RESET_WAIT)
|
||||
break;
|
||||
|
||||
cnt = lpfc_sli_sum_iocb(phba,
|
||||
@@ -1339,7 +1338,7 @@ lpfc_bus_reset_handler(struct scsi_cmnd *cmnd)
|
||||
schedule_timeout_uninterruptible(LPFC_RESET_WAIT*HZ);
|
||||
|
||||
if (++loopcnt
|
||||
> (2 * phba->cfg_devloss_tmo)/LPFC_RESET_WAIT)
|
||||
> (2 * vport->cfg_devloss_tmo)/LPFC_RESET_WAIT)
|
||||
break;
|
||||
|
||||
cnt = lpfc_sli_sum_iocb(phba,
|
||||
@@ -1386,7 +1385,7 @@ lpfc_slave_alloc(struct scsi_device *sdev)
|
||||
* extra. This list of scsi bufs exists for the lifetime of the driver.
|
||||
*/
|
||||
total = phba->total_scsi_bufs;
|
||||
num_to_alloc = phba->cfg_lun_queue_depth + 2;
|
||||
num_to_alloc = vport->cfg_lun_queue_depth + 2;
|
||||
|
||||
/* Allow some exchanges to be available always to complete discovery */
|
||||
if (total >= phba->cfg_hba_queue_depth - LPFC_DISC_IOCB_BUFF_COUNT ) {
|
||||
@@ -1435,9 +1434,9 @@ lpfc_slave_configure(struct scsi_device *sdev)
|
||||
struct fc_rport *rport = starget_to_rport(sdev->sdev_target);
|
||||
|
||||
if (sdev->tagged_supported)
|
||||
scsi_activate_tcq(sdev, phba->cfg_lun_queue_depth);
|
||||
scsi_activate_tcq(sdev, vport->cfg_lun_queue_depth);
|
||||
else
|
||||
scsi_deactivate_tcq(sdev, phba->cfg_lun_queue_depth);
|
||||
scsi_deactivate_tcq(sdev, vport->cfg_lun_queue_depth);
|
||||
|
||||
/*
|
||||
* Initialize the fc transport attributes for the target
|
||||
@@ -1445,7 +1444,7 @@ lpfc_slave_configure(struct scsi_device *sdev)
|
||||
* target pointer is stored in the starget_data for the
|
||||
* driver's sysfs entry point functions.
|
||||
*/
|
||||
rport->dev_loss_tmo = phba->cfg_devloss_tmo;
|
||||
rport->dev_loss_tmo = vport->cfg_devloss_tmo;
|
||||
|
||||
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
|
||||
lpfc_sli_poll_fcp_ring(phba);
|
||||
@@ -1483,3 +1482,23 @@ struct scsi_host_template lpfc_template = {
|
||||
.shost_attrs = lpfc_hba_attrs,
|
||||
.max_sectors = 0xFFFF,
|
||||
};
|
||||
|
||||
struct scsi_host_template lpfc_vport_template = {
|
||||
.module = THIS_MODULE,
|
||||
.name = LPFC_DRIVER_NAME,
|
||||
.info = lpfc_info,
|
||||
.queuecommand = lpfc_queuecommand,
|
||||
.eh_abort_handler = lpfc_abort_handler,
|
||||
.eh_device_reset_handler= lpfc_device_reset_handler,
|
||||
.eh_bus_reset_handler = lpfc_bus_reset_handler,
|
||||
.slave_alloc = lpfc_slave_alloc,
|
||||
.slave_configure = lpfc_slave_configure,
|
||||
.slave_destroy = lpfc_slave_destroy,
|
||||
.scan_finished = lpfc_scan_finished,
|
||||
.this_id = -1,
|
||||
.sg_tablesize = LPFC_SG_SEG_CNT,
|
||||
.cmd_per_lun = LPFC_CMD_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = lpfc_vport_attrs,
|
||||
.max_sectors = 0xFFFF,
|
||||
};
|
||||
|
||||
@@ -198,8 +198,8 @@ int
|
||||
lpfc_vport_create(struct fc_vport *fc_vport, bool disable)
|
||||
{
|
||||
struct lpfc_nodelist *ndlp;
|
||||
struct lpfc_vport *pport =
|
||||
(struct lpfc_vport *) fc_vport->shost->hostdata;
|
||||
struct Scsi_Host *shost = fc_vport->shost;
|
||||
struct lpfc_vport *pport = (struct lpfc_vport *) shost->hostdata;
|
||||
struct lpfc_hba *phba = pport->phba;
|
||||
struct lpfc_vport *vport = NULL;
|
||||
int instance;
|
||||
@@ -237,7 +237,7 @@ lpfc_vport_create(struct fc_vport *fc_vport, bool disable)
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
vport = lpfc_create_port(phba, instance, fc_vport);
|
||||
vport = lpfc_create_port(phba, instance, &fc_vport->dev);
|
||||
if (!vport) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_VPORT,
|
||||
"%d:1811 Create VPORT failed: vpi x%x\n",
|
||||
|
||||
Reference in New Issue
Block a user