Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ae5716b authored by Himanshu Madhani's avatar Himanshu Madhani Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Cleanup for N2N code

parent a89f4f1e
Loading
Loading
Loading
Loading
+0 −112
Original line number Diff line number Diff line
@@ -4686,110 +4686,6 @@ qla2x00_configure_loop(scsi_qla_host_t *vha)
	return (rval);
}

/*
 * N2N Login
 *	Updates Fibre Channel Device Database with local loop devices.
 *
 * Input:
 *	ha = adapter block pointer.
 *
 * Returns:
 */
static int qla24xx_n2n_handle_login(struct scsi_qla_host *vha,
				    fc_port_t *fcport)
{
	struct qla_hw_data *ha = vha->hw;
	int	res = QLA_SUCCESS, rval;
	int	greater_wwpn = 0;
	int	logged_in = 0;

	if (ha->current_topology != ISP_CFG_N)
		return res;

	if (wwn_to_u64(vha->port_name) >
	    wwn_to_u64(vha->n2n_port_name)) {
		ql_dbg(ql_dbg_disc, vha, 0x2002,
		    "HBA WWPN is greater %llx > target %llx\n",
		    wwn_to_u64(vha->port_name),
		    wwn_to_u64(vha->n2n_port_name));
		greater_wwpn = 1;
		fcport->d_id.b24 = vha->n2n_id;
	}

	fcport->loop_id = vha->loop_id;
	fcport->fc4f_nvme = 0;
	fcport->query = 1;

	ql_dbg(ql_dbg_disc, vha, 0x4001,
	    "Initiate N2N login handler: HBA port_id=%06x loopid=%d\n",
	    fcport->d_id.b24, vha->loop_id);

	/* Fill in member data. */
	if (!greater_wwpn) {
		rval = qla2x00_get_port_database(vha, fcport, 0);
		ql_dbg(ql_dbg_disc, vha, 0x1051,
		    "Remote login-state (%x/%x) port_id=%06x loop_id=%x, rval=%d\n",
		    fcport->current_login_state, fcport->last_login_state,
		    fcport->d_id.b24, fcport->loop_id, rval);

		if (((fcport->current_login_state & 0xf) == 0x4) ||
		    ((fcport->current_login_state & 0xf) == 0x6))
			logged_in = 1;
	}

	if (logged_in || greater_wwpn) {
		if (!vha->nvme_local_port && vha->flags.nvme_enabled)
			qla_nvme_register_hba(vha);

		/* Set connected N_Port d_id */
		if (vha->flags.nvme_enabled)
			fcport->fc4f_nvme = 1;

		fcport->scan_state = QLA_FCPORT_FOUND;
		fcport->fw_login_state = DSC_LS_PORT_UNAVAIL;
		fcport->disc_state = DSC_GNL;
		fcport->n2n_flag = 1;
		fcport->flags = 3;
		vha->hw->flags.gpsc_supported = 0;

		if (greater_wwpn) {
			ql_dbg(ql_dbg_disc, vha, 0x20e5,
			    "%s %d PLOGI ELS %8phC\n",
			    __func__, __LINE__, fcport->port_name);

			res = qla24xx_els_dcmd2_iocb(vha, ELS_DCMD_PLOGI,
			    fcport, fcport->d_id);
		}

		if (res != QLA_SUCCESS) {
			ql_log(ql_log_info, vha, 0xd04d,
			    "PLOGI Failed: portid=%06x - retrying\n",
			    fcport->d_id.b24);
			res = QLA_SUCCESS;
		} else {
			/* State 0x6 means FCP PRLI complete */
			if ((fcport->current_login_state & 0xf) == 0x6) {
				ql_dbg(ql_dbg_disc, vha, 0x2118,
				    "%s %d %8phC post GPDB work\n",
				    __func__, __LINE__, fcport->port_name);
				fcport->chip_reset =
				    vha->hw->base_qpair->chip_reset;
				qla24xx_post_gpdb_work(vha, fcport, 0);
			} else {
				ql_dbg(ql_dbg_disc, vha, 0x2118,
				    "%s %d %8phC post NVMe PRLI\n",
				    __func__, __LINE__, fcport->port_name);
				qla24xx_post_prli_work(vha, fcport);
			}
		}
	} else {
		/* Wait for next database change */
		set_bit(N2N_LOGIN_NEEDED, &vha->dpc_flags);
	}

	return res;
}

/*
 * qla2x00_configure_local_loop
 *	Updates Fibre Channel Device Database with local loop devices.
@@ -4847,14 +4743,6 @@ qla2x00_configure_local_loop(scsi_qla_host_t *vha)
	}
	new_fcport->flags &= ~FCF_FABRIC_DEVICE;

	/* Inititae N2N login. */
	if (test_and_clear_bit(N2N_LOGIN_NEEDED, &vha->dpc_flags)) {
		rval = qla24xx_n2n_handle_login(vha, new_fcport);
		if (rval != QLA_SUCCESS)
			goto cleanup_allocation;
		return QLA_SUCCESS;
	}

	/* Add devices to port list. */
	id_iter = (char *)ha->gid_list;
	for (index = 0; index < entries; index++) {
+0 −25
Original line number Diff line number Diff line
@@ -2567,26 +2567,6 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
	sp->vha->qla_stats.control_requests++;
}

static void
qla2x00_els_dcmd2_sp_free(void *data)
{
	srb_t *sp = data;
	struct srb_iocb *elsio = &sp->u.iocb_cmd;

	if (elsio->u.els_plogi.els_plogi_pyld)
		dma_free_coherent(&sp->vha->hw->pdev->dev, DMA_POOL_SIZE,
		    elsio->u.els_plogi.els_plogi_pyld,
		    elsio->u.els_plogi.els_plogi_pyld_dma);

	if (elsio->u.els_plogi.els_resp_pyld)
		dma_free_coherent(&sp->vha->hw->pdev->dev, DMA_POOL_SIZE,
		    elsio->u.els_plogi.els_resp_pyld,
		    elsio->u.els_plogi.els_resp_pyld_dma);

	del_timer(&elsio->timer);
	qla2x00_rel_sp(sp);
}

static void
qla2x00_els_dcmd2_iocb_timeout(void *data)
{
@@ -2648,10 +2628,6 @@ qla24xx_els_dcmd2_iocb(scsi_qla_host_t *vha, int els_opcode,
	}

	elsio = &sp->u.iocb_cmd;
	fcport->d_id.b.domain = remote_did.b.domain;
	fcport->d_id.b.area = remote_did.b.area;
	fcport->d_id.b.al_pa = remote_did.b.al_pa;

	ql_dbg(ql_dbg_io, vha, 0x3073,
	    "Enter: PLOGI portid=%06x\n", fcport->d_id.b24);

@@ -2664,7 +2640,6 @@ qla24xx_els_dcmd2_iocb(scsi_qla_host_t *vha, int els_opcode,
	qla2x00_init_timer(sp, ELS_DCMD_TIMEOUT);

	sp->done = qla2x00_els_dcmd2_sp_done;
	sp->free = qla2x00_els_dcmd2_sp_free;

	ptr = elsio->u.els_plogi.els_plogi_pyld =
	    dma_alloc_coherent(&ha->pdev->dev, DMA_POOL_SIZE,