scsi: qla2xxx: Enable type checking for the SRB free and done callback functions
[linux-2.6-block.git] / drivers / scsi / qla2xxx / qla_target.c
index 1c1f63be6eed8b31fa043f9b81d3860d832943f0..d25c3fa436015177aab03c14a2a14bf142c13d23 100644 (file)
@@ -188,18 +188,17 @@ static inline int qlt_issue_marker(struct scsi_qla_host *vha, int vha_locked)
 
 static inline
 struct scsi_qla_host *qlt_find_host_by_d_id(struct scsi_qla_host *vha,
-       uint8_t *d_id)
+                                           be_id_t d_id)
 {
        struct scsi_qla_host *host;
-       uint32_t key = 0;
+       uint32_t key;
 
-       if ((vha->d_id.b.area == d_id[1]) && (vha->d_id.b.domain == d_id[0]) &&
-           (vha->d_id.b.al_pa == d_id[2]))
+       if (vha->d_id.b.area == d_id.area &&
+           vha->d_id.b.domain == d_id.domain &&
+           vha->d_id.b.al_pa == d_id.al_pa)
                return vha;
 
-       key  = (uint32_t)d_id[0] << 16;
-       key |= (uint32_t)d_id[1] <<  8;
-       key |= (uint32_t)d_id[2];
+       key = be_to_port_id(d_id).b24;
 
        host = btree_lookup32(&vha->hw->tgt.host_map, key);
        if (!host)
@@ -357,9 +356,9 @@ static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha,
                        ql_dbg(ql_dbg_tgt, vha, 0xe03e,
                            "qla_target(%d): Received ATIO_TYPE7 "
                            "with unknown d_id %x:%x:%x\n", vha->vp_idx,
-                           atio->u.isp24.fcp_hdr.d_id[0],
-                           atio->u.isp24.fcp_hdr.d_id[1],
-                           atio->u.isp24.fcp_hdr.d_id[2]);
+                           atio->u.isp24.fcp_hdr.d_id.domain,
+                           atio->u.isp24.fcp_hdr.d_id.area,
+                           atio->u.isp24.fcp_hdr.d_id.al_pa);
 
 
                        qlt_queue_unknown_atio(vha, atio, ha_locked);
@@ -560,10 +559,8 @@ static int qla24xx_post_nack_work(struct scsi_qla_host *vha, fc_port_t *fcport,
        return qla2x00_post_work(vha, e);
 }
 
-static
-void qla2x00_async_nack_sp_done(void *s, int res)
+static void qla2x00_async_nack_sp_done(srb_t *sp, int res)
 {
-       struct srb *sp = (struct srb *)s;
        struct scsi_qla_host *vha = sp->vha;
        unsigned long flags;
 
@@ -789,6 +786,8 @@ qlt_plogi_ack_find_add(struct scsi_qla_host *vha, port_id_t *id,
 {
        struct qlt_plogi_ack_t *pla;
 
+       lockdep_assert_held(&vha->hw->hardware_lock);
+
        list_for_each_entry(pla, &vha->plogi_ack_list, list) {
                if (pla->id.b24 == id->b24) {
                        ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0x210d,
@@ -1209,7 +1208,6 @@ static void qla24xx_chk_fcp_state(struct fc_port *sess)
                sess->logout_on_delete = 0;
                sess->logo_ack_needed = 0;
                sess->fw_login_state = DSC_LS_PORT_UNAVAIL;
-               sess->scan_state = 0;
        }
 }
 
@@ -1284,13 +1282,12 @@ static void qlt_clear_tgt_db(struct qla_tgt *tgt)
        /* At this point tgt could be already dead */
 }
 
-static int qla24xx_get_loop_id(struct scsi_qla_host *vha, const uint8_t *s_id,
+static int qla24xx_get_loop_id(struct scsi_qla_host *vha, be_id_t s_id,
        uint16_t *loop_id)
 {
        struct qla_hw_data *ha = vha->hw;
        dma_addr_t gid_list_dma;
-       struct gid_list_info *gid_list;
-       char *id_iter;
+       struct gid_list_info *gid_list, *gid;
        int res, rc, i;
        uint16_t entries;
 
@@ -1313,19 +1310,17 @@ static int qla24xx_get_loop_id(struct scsi_qla_host *vha, const uint8_t *s_id,
                goto out_free_id_list;
        }
 
-       id_iter = (char *)gid_list;
+       gid = gid_list;
        res = -ENOENT;
        for (i = 0; i < entries; i++) {
-               struct gid_list_info *gid = (struct gid_list_info *)id_iter;
-
-               if ((gid->al_pa == s_id[2]) &&
-                   (gid->area == s_id[1]) &&
-                   (gid->domain == s_id[0])) {
+               if (gid->al_pa == s_id.al_pa &&
+                   gid->area == s_id.area &&
+                   gid->domain == s_id.domain) {
                        *loop_id = le16_to_cpu(gid->loop_id);
                        res = 0;
                        break;
                }
-               id_iter += ha->gid_list_info_size;
+               gid = (void *)gid + ha->gid_list_info_size;
        }
 
 out_free_id_list:
@@ -1582,11 +1577,10 @@ static void qlt_release(struct qla_tgt *tgt)
        struct qla_qpair_hint *h;
        struct qla_hw_data *ha = vha->hw;
 
-       if ((vha->vha_tgt.qla_tgt != NULL) && !tgt->tgt_stop &&
-           !tgt->tgt_stopped)
+       if (!tgt->tgt_stop && !tgt->tgt_stopped)
                qlt_stop_phase1(tgt);
 
-       if ((vha->vha_tgt.qla_tgt != NULL) && !tgt->tgt_stopped)
+       if (!tgt->tgt_stopped)
                qlt_stop_phase2(tgt);
 
        for (i = 0; i < vha->hw->max_qpairs + 1; i++) {
@@ -1772,12 +1766,8 @@ static int qlt_build_abts_resp_iocb(struct qla_tgt_mgmt_cmd *mcmd)
        resp->fcp_hdr_le.f_ctl[1] = *p++;
        resp->fcp_hdr_le.f_ctl[2] = *p;
 
-       resp->fcp_hdr_le.d_id[0] = abts->fcp_hdr_le.s_id[0];
-       resp->fcp_hdr_le.d_id[1] = abts->fcp_hdr_le.s_id[1];
-       resp->fcp_hdr_le.d_id[2] = abts->fcp_hdr_le.s_id[2];
-       resp->fcp_hdr_le.s_id[0] = abts->fcp_hdr_le.d_id[0];
-       resp->fcp_hdr_le.s_id[1] = abts->fcp_hdr_le.d_id[1];
-       resp->fcp_hdr_le.s_id[2] = abts->fcp_hdr_le.d_id[2];
+       resp->fcp_hdr_le.d_id = abts->fcp_hdr_le.s_id;
+       resp->fcp_hdr_le.s_id = abts->fcp_hdr_le.d_id;
 
        resp->exchange_addr_to_abort = abts->exchange_addr_to_abort;
        if (mcmd->fc_tm_rsp == FCP_TMF_CMPL) {
@@ -1848,19 +1838,11 @@ static void qlt_24xx_send_abts_resp(struct qla_qpair *qpair,
        resp->fcp_hdr_le.f_ctl[1] = *p++;
        resp->fcp_hdr_le.f_ctl[2] = *p;
        if (ids_reversed) {
-               resp->fcp_hdr_le.d_id[0] = abts->fcp_hdr_le.d_id[0];
-               resp->fcp_hdr_le.d_id[1] = abts->fcp_hdr_le.d_id[1];
-               resp->fcp_hdr_le.d_id[2] = abts->fcp_hdr_le.d_id[2];
-               resp->fcp_hdr_le.s_id[0] = abts->fcp_hdr_le.s_id[0];
-               resp->fcp_hdr_le.s_id[1] = abts->fcp_hdr_le.s_id[1];
-               resp->fcp_hdr_le.s_id[2] = abts->fcp_hdr_le.s_id[2];
+               resp->fcp_hdr_le.d_id = abts->fcp_hdr_le.d_id;
+               resp->fcp_hdr_le.s_id = abts->fcp_hdr_le.s_id;
        } else {
-               resp->fcp_hdr_le.d_id[0] = abts->fcp_hdr_le.s_id[0];
-               resp->fcp_hdr_le.d_id[1] = abts->fcp_hdr_le.s_id[1];
-               resp->fcp_hdr_le.d_id[2] = abts->fcp_hdr_le.s_id[2];
-               resp->fcp_hdr_le.s_id[0] = abts->fcp_hdr_le.d_id[0];
-               resp->fcp_hdr_le.s_id[1] = abts->fcp_hdr_le.d_id[1];
-               resp->fcp_hdr_le.s_id[2] = abts->fcp_hdr_le.d_id[2];
+               resp->fcp_hdr_le.d_id = abts->fcp_hdr_le.s_id;
+               resp->fcp_hdr_le.s_id = abts->fcp_hdr_le.d_id;
        }
        resp->exchange_addr_to_abort = abts->exchange_addr_to_abort;
        if (status == FCP_TMF_CMPL) {
@@ -1927,18 +1909,14 @@ static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha,
        tmp = (CTIO7_FLAGS_STATUS_MODE_1 | CTIO7_FLAGS_TERMINATE);
 
        if (mcmd) {
-               ctio->initiator_id[0] = entry->fcp_hdr_le.s_id[0];
-               ctio->initiator_id[1] = entry->fcp_hdr_le.s_id[1];
-               ctio->initiator_id[2] = entry->fcp_hdr_le.s_id[2];
+               ctio->initiator_id = entry->fcp_hdr_le.s_id;
 
                if (mcmd->flags & QLA24XX_MGMT_ABORT_IO_ATTR_VALID)
                        tmp |= (mcmd->abort_io_attr << 9);
                else if (qpair->retry_term_cnt & 1)
                        tmp |= (0x4 << 9);
        } else {
-               ctio->initiator_id[0] = entry->fcp_hdr_le.d_id[0];
-               ctio->initiator_id[1] = entry->fcp_hdr_le.d_id[1];
-               ctio->initiator_id[2] = entry->fcp_hdr_le.d_id[2];
+               ctio->initiator_id = entry->fcp_hdr_le.d_id;
 
                if (qpair->retry_term_cnt & 1)
                        tmp |= (0x4 << 9);
@@ -1972,8 +1950,7 @@ static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha,
  * XXX does not go through the list of other port (which may have cmds
  *     for the same lun)
  */
-static void abort_cmds_for_lun(struct scsi_qla_host *vha,
-                               u64 lun, uint8_t *s_id)
+static void abort_cmds_for_lun(struct scsi_qla_host *vha, u64 lun, be_id_t s_id)
 {
        struct qla_tgt_sess_op *op;
        struct qla_tgt_cmd *cmd;
@@ -2149,7 +2126,7 @@ static void qlt_24xx_handle_abts(struct scsi_qla_host *vha,
        struct qla_hw_data *ha = vha->hw;
        struct fc_port *sess;
        uint32_t tag = abts->exchange_addr_to_abort;
-       uint8_t s_id[3];
+       be_id_t s_id;
        int rc;
        unsigned long flags;
 
@@ -2173,13 +2150,11 @@ static void qlt_24xx_handle_abts(struct scsi_qla_host *vha,
 
        ql_dbg(ql_dbg_tgt_mgt, vha, 0xf011,
            "qla_target(%d): task abort (s_id=%x:%x:%x, "
-           "tag=%d, param=%x)\n", vha->vp_idx, abts->fcp_hdr_le.s_id[2],
-           abts->fcp_hdr_le.s_id[1], abts->fcp_hdr_le.s_id[0], tag,
+           "tag=%d, param=%x)\n", vha->vp_idx, abts->fcp_hdr_le.s_id.domain,
+           abts->fcp_hdr_le.s_id.area, abts->fcp_hdr_le.s_id.al_pa, tag,
            le32_to_cpu(abts->fcp_hdr_le.parameter));
 
-       s_id[0] = abts->fcp_hdr_le.s_id[2];
-       s_id[1] = abts->fcp_hdr_le.s_id[1];
-       s_id[2] = abts->fcp_hdr_le.s_id[0];
+       s_id = le_id_to_be(abts->fcp_hdr_le.s_id);
 
        spin_lock_irqsave(&ha->tgt.sess_lock, flags);
        sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id);
@@ -2243,9 +2218,7 @@ static void qlt_24xx_send_task_mgmt_ctio(struct qla_qpair *qpair,
        ctio->nport_handle = mcmd->sess->loop_id;
        ctio->timeout = cpu_to_le16(QLA_TGT_TIMEOUT);
        ctio->vp_index = ha->vp_idx;
-       ctio->initiator_id[0] = atio->u.isp24.fcp_hdr.s_id[2];
-       ctio->initiator_id[1] = atio->u.isp24.fcp_hdr.s_id[1];
-       ctio->initiator_id[2] = atio->u.isp24.fcp_hdr.s_id[0];
+       ctio->initiator_id = be_id_to_le(atio->u.isp24.fcp_hdr.s_id);
        ctio->exchange_addr = atio->u.isp24.exchange_addr;
        temp = (atio->u.isp24.attr << 9)|
                CTIO7_FLAGS_STATUS_MODE_1 | CTIO7_FLAGS_SEND_STATUS;
@@ -2302,9 +2275,7 @@ void qlt_send_resp_ctio(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
        ctio->nport_handle = cmd->sess->loop_id;
        ctio->timeout = cpu_to_le16(QLA_TGT_TIMEOUT);
        ctio->vp_index = vha->vp_idx;
-       ctio->initiator_id[0] = atio->u.isp24.fcp_hdr.s_id[2];
-       ctio->initiator_id[1] = atio->u.isp24.fcp_hdr.s_id[1];
-       ctio->initiator_id[2] = atio->u.isp24.fcp_hdr.s_id[0];
+       ctio->initiator_id = be_id_to_le(atio->u.isp24.fcp_hdr.s_id);
        ctio->exchange_addr = atio->u.isp24.exchange_addr;
        temp = (atio->u.isp24.attr << 9) |
            CTIO7_FLAGS_STATUS_MODE_1 | CTIO7_FLAGS_SEND_STATUS;
@@ -2605,9 +2576,7 @@ static int qlt_24xx_build_ctio_pkt(struct qla_qpair *qpair,
        pkt->handle |= CTIO_COMPLETION_HANDLE_MARK;
        pkt->nport_handle = cpu_to_le16(prm->cmd->loop_id);
        pkt->timeout = cpu_to_le16(QLA_TGT_TIMEOUT);
-       pkt->initiator_id[0] = atio->u.isp24.fcp_hdr.s_id[2];
-       pkt->initiator_id[1] = atio->u.isp24.fcp_hdr.s_id[1];
-       pkt->initiator_id[2] = atio->u.isp24.fcp_hdr.s_id[0];
+       pkt->initiator_id = be_id_to_le(atio->u.isp24.fcp_hdr.s_id);
        pkt->exchange_addr = atio->u.isp24.exchange_addr;
        temp = atio->u.isp24.attr << 9;
        pkt->u.status0.flags |= cpu_to_le16(temp);
@@ -3120,9 +3089,7 @@ qlt_build_ctio_crc2_pkt(struct qla_qpair *qpair, struct qla_tgt_prm *prm)
        pkt->handle |= CTIO_COMPLETION_HANDLE_MARK;
        pkt->nport_handle = cpu_to_le16(prm->cmd->loop_id);
        pkt->timeout = cpu_to_le16(QLA_TGT_TIMEOUT);
-       pkt->initiator_id[0] = atio->u.isp24.fcp_hdr.s_id[2];
-       pkt->initiator_id[1] = atio->u.isp24.fcp_hdr.s_id[1];
-       pkt->initiator_id[2] = atio->u.isp24.fcp_hdr.s_id[0];
+       pkt->initiator_id = be_id_to_le(atio->u.isp24.fcp_hdr.s_id);
        pkt->exchange_addr   = atio->u.isp24.exchange_addr;
 
        /* silence compile warning */
@@ -3164,7 +3131,7 @@ qlt_build_ctio_crc2_pkt(struct qla_qpair *qpair, struct qla_tgt_prm *prm)
        pkt->crc_context_len = CRC_CONTEXT_LEN_FW;
 
        if (!bundling) {
-               cur_dsd = &crc_ctx_pkt->u.nobundling.data_dsd;
+               cur_dsd = &crc_ctx_pkt->u.nobundling.data_dsd[0];
        } else {
                /*
                 * Configure Bundling if we need to fetch interlaving
@@ -3174,7 +3141,7 @@ qlt_build_ctio_crc2_pkt(struct qla_qpair *qpair, struct qla_tgt_prm *prm)
                crc_ctx_pkt->u.bundling.dif_byte_count = cpu_to_le32(dif_bytes);
                crc_ctx_pkt->u.bundling.dseg_count =
                        cpu_to_le16(prm->tot_dsds - prm->prot_seg_cnt);
-               cur_dsd = &crc_ctx_pkt->u.bundling.data_dsd;
+               cur_dsd = &crc_ctx_pkt->u.bundling.data_dsd[0];
        }
 
        /* Finish the common fields of CRC pkt */
@@ -3672,9 +3639,7 @@ static int __qlt_send_term_exchange(struct qla_qpair *qpair,
        ctio24->nport_handle = CTIO7_NHANDLE_UNRECOGNIZED;
        ctio24->timeout = cpu_to_le16(QLA_TGT_TIMEOUT);
        ctio24->vp_index = vha->vp_idx;
-       ctio24->initiator_id[0] = atio->u.isp24.fcp_hdr.s_id[2];
-       ctio24->initiator_id[1] = atio->u.isp24.fcp_hdr.s_id[1];
-       ctio24->initiator_id[2] = atio->u.isp24.fcp_hdr.s_id[0];
+       ctio24->initiator_id = be_id_to_le(atio->u.isp24.fcp_hdr.s_id);
        ctio24->exchange_addr = atio->u.isp24.exchange_addr;
        temp = (atio->u.isp24.attr << 9) | CTIO7_FLAGS_STATUS_MODE_1 |
                CTIO7_FLAGS_TERMINATE;
@@ -4107,8 +4072,6 @@ static inline int qlt_get_fcp_task_attr(struct scsi_qla_host *vha,
        return fcp_task_attr;
 }
 
-static struct fc_port *qlt_make_local_sess(struct scsi_qla_host *,
-                                       uint8_t *);
 /*
  * Process context for I/O path into tcm_qla2xxx code
  */
@@ -4352,9 +4315,7 @@ static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha,
                return -ENODEV;
        }
 
-       id.b.al_pa = atio->u.isp24.fcp_hdr.s_id[2];
-       id.b.area = atio->u.isp24.fcp_hdr.s_id[1];
-       id.b.domain = atio->u.isp24.fcp_hdr.s_id[0];
+       id = be_to_port_id(atio->u.isp24.fcp_hdr.s_id);
        if (IS_SW_RESV_ADDR(id))
                return -EBUSY;
 
@@ -4716,6 +4677,8 @@ static int qlt_handle_login(struct scsi_qla_host *vha,
        struct qlt_plogi_ack_t *pla;
        unsigned long flags;
 
+       lockdep_assert_held(&vha->hw->hardware_lock);
+
        wwn = wwn_to_u64(iocb->u.isp24.port_name);
 
        port_id.b.domain = iocb->u.isp24.port_id[2];
@@ -4799,8 +4762,10 @@ static int qlt_handle_login(struct scsi_qla_host *vha,
                            __func__, sess->port_name, sec);
                }
 
-               if (!conflict_sess)
+               if (!conflict_sess) {
+                       list_del(&pla->list);
                        kmem_cache_free(qla_tgt_plogi_cachep, pla);
+               }
 
                qlt_send_term_imm_notif(vha, iocb, 1);
                goto out;
@@ -4889,6 +4854,8 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha,
        int res = 0;
        unsigned long flags;
 
+       lockdep_assert_held(&ha->hardware_lock);
+
        wwn = wwn_to_u64(iocb->u.isp24.port_name);
 
        port_id.b.domain = iocb->u.isp24.port_id[2];
@@ -5165,6 +5132,8 @@ static void qlt_handle_imm_notify(struct scsi_qla_host *vha,
        int send_notify_ack = 1;
        uint16_t status;
 
+       lockdep_assert_held(&ha->hardware_lock);
+
        status = le16_to_cpu(iocb->u.isp2x.status);
        switch (status) {
        case IMM_NTFY_LIP_RESET:
@@ -5302,10 +5271,7 @@ static int __qlt_send_busy(struct qla_qpair *qpair,
        u16 temp;
        port_id_t id;
 
-       id.b.al_pa = atio->u.isp24.fcp_hdr.s_id[2];
-       id.b.area = atio->u.isp24.fcp_hdr.s_id[1];
-       id.b.domain = atio->u.isp24.fcp_hdr.s_id[0];
-       id.b.rsvd_1 = 0;
+       id = be_to_port_id(atio->u.isp24.fcp_hdr.s_id);
 
        spin_lock_irqsave(&ha->tgt.sess_lock, flags);
        sess = qla2x00_find_fcport_by_nportid(vha, &id, 1);
@@ -5333,9 +5299,7 @@ static int __qlt_send_busy(struct qla_qpair *qpair,
        ctio24->nport_handle = sess->loop_id;
        ctio24->timeout = cpu_to_le16(QLA_TGT_TIMEOUT);
        ctio24->vp_index = vha->vp_idx;
-       ctio24->initiator_id[0] = atio->u.isp24.fcp_hdr.s_id[2];
-       ctio24->initiator_id[1] = atio->u.isp24.fcp_hdr.s_id[1];
-       ctio24->initiator_id[2] = atio->u.isp24.fcp_hdr.s_id[0];
+       ctio24->initiator_id = be_id_to_le(atio->u.isp24.fcp_hdr.s_id);
        ctio24->exchange_addr = atio->u.isp24.exchange_addr;
        temp = (atio->u.isp24.attr << 9) |
                CTIO7_FLAGS_STATUS_MODE_1 | CTIO7_FLAGS_SEND_STATUS |
@@ -6121,21 +6085,21 @@ static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha,
 
 /* Must be called under tgt_mutex */
 static struct fc_port *qlt_make_local_sess(struct scsi_qla_host *vha,
-       uint8_t *s_id)
+                                          be_id_t s_id)
 {
        struct fc_port *sess = NULL;
        fc_port_t *fcport = NULL;
        int rc, global_resets;
        uint16_t loop_id = 0;
 
-       if ((s_id[0] == 0xFF) && (s_id[1] == 0xFC)) {
+       if (s_id.domain == 0xFF && s_id.area == 0xFC) {
                /*
                 * This is Domain Controller, so it should be
                 * OK to drop SCSI commands from it.
                 */
                ql_dbg(ql_dbg_tgt_mgt, vha, 0xf042,
                    "Unable to find initiator with S_ID %x:%x:%x",
-                   s_id[0], s_id[1], s_id[2]);
+                   s_id.domain, s_id.area, s_id.al_pa);
                return NULL;
        }
 
@@ -6152,13 +6116,12 @@ retry:
                ql_log(ql_log_info, vha, 0xf071,
                    "qla_target(%d): Unable to find "
                    "initiator with S_ID %x:%x:%x",
-                   vha->vp_idx, s_id[0], s_id[1],
-                   s_id[2]);
+                   vha->vp_idx, s_id.domain, s_id.area, s_id.al_pa);
 
                if (rc == -ENOENT) {
                        qlt_port_logo_t logo;
 
-                       sid_to_portid(s_id, &logo.id);
+                       logo.id = be_to_port_id(s_id);
                        logo.cmd_count = 1;
                        qlt_send_first_logo(vha, &logo);
                }
@@ -6197,8 +6160,7 @@ static void qlt_abort_work(struct qla_tgt *tgt,
        struct qla_hw_data *ha = vha->hw;
        struct fc_port *sess = NULL;
        unsigned long flags = 0, flags2 = 0;
-       uint32_t be_s_id;
-       uint8_t s_id[3];
+       be_id_t s_id;
        int rc;
 
        spin_lock_irqsave(&ha->tgt.sess_lock, flags2);
@@ -6206,12 +6168,9 @@ static void qlt_abort_work(struct qla_tgt *tgt,
        if (tgt->tgt_stop)
                goto out_term2;
 
-       s_id[0] = prm->abts.fcp_hdr_le.s_id[2];
-       s_id[1] = prm->abts.fcp_hdr_le.s_id[1];
-       s_id[2] = prm->abts.fcp_hdr_le.s_id[0];
+       s_id = le_id_to_be(prm->abts.fcp_hdr_le.s_id);
 
-       sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha,
-           (unsigned char *)&be_s_id);
+       sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id);
        if (!sess) {
                spin_unlock_irqrestore(&ha->tgt.sess_lock, flags2);
 
@@ -6248,9 +6207,6 @@ static void qlt_abort_work(struct qla_tgt *tgt,
 out_term2:
        spin_unlock_irqrestore(&ha->tgt.sess_lock, flags2);
 
-       if (sess)
-               ha->tgt.tgt_ops->put_sess(sess);
-
 out_term:
        spin_lock_irqsave(&ha->hardware_lock, flags);
        qlt_24xx_send_abts_resp(ha->base_qpair, &prm->abts,
@@ -6266,7 +6222,7 @@ static void qlt_tmr_work(struct qla_tgt *tgt,
        struct qla_hw_data *ha = vha->hw;
        struct fc_port *sess;
        unsigned long flags;
-       uint8_t *s_id = NULL; /* to hide compiler warnings */
+       be_id_t s_id;
        int rc;
        u64 unpacked_lun;
        int fn;
@@ -6495,22 +6451,10 @@ void qlt_remove_target_resources(struct qla_hw_data *ha)
 static void qlt_lport_dump(struct scsi_qla_host *vha, u64 wwpn,
        unsigned char *b)
 {
-       int i;
-
-       pr_debug("qla2xxx HW vha->node_name: ");
-       for (i = 0; i < WWN_SIZE; i++)
-               pr_debug("%02x ", vha->node_name[i]);
-       pr_debug("\n");
-       pr_debug("qla2xxx HW vha->port_name: ");
-       for (i = 0; i < WWN_SIZE; i++)
-               pr_debug("%02x ", vha->port_name[i]);
-       pr_debug("\n");
-
-       pr_debug("qla2xxx passed configfs WWPN: ");
+       pr_debug("qla2xxx HW vha->node_name: %8phC\n", vha->node_name);
+       pr_debug("qla2xxx HW vha->port_name: %8phC\n", vha->port_name);
        put_unaligned_be64(wwpn, b);
-       for (i = 0; i < WWN_SIZE; i++)
-               pr_debug("%02x ", b[i]);
-       pr_debug("\n");
+       pr_debug("qla2xxx passed configfs WWPN: %8phC\n", b);
 }
 
 /**
@@ -6671,6 +6615,8 @@ qlt_enable_vha(struct scsi_qla_host *vha)
        if (vha->qlini_mode == QLA2XXX_INI_MODE_ENABLED)
                return;
 
+       if (ha->tgt.num_act_qpairs > ha->max_qpairs)
+               ha->tgt.num_act_qpairs = ha->max_qpairs;
        spin_lock_irqsave(&ha->hardware_lock, flags);
        tgt->tgt_stopped = 0;
        qlt_set_mode(vha);
@@ -6685,7 +6631,8 @@ qlt_enable_vha(struct scsi_qla_host *vha)
        } else {
                set_bit(ISP_ABORT_NEEDED, &base_vha->dpc_flags);
                qla2xxx_wake_dpc(base_vha);
-               qla2x00_wait_for_hba_online(base_vha);
+               WARN_ON_ONCE(qla2x00_wait_for_hba_online(base_vha) !=
+                            QLA_SUCCESS);
        }
        mutex_unlock(&ha->optrom_mutex);
 }
@@ -6716,7 +6663,9 @@ static void qlt_disable_vha(struct scsi_qla_host *vha)
 
        set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
        qla2xxx_wake_dpc(vha);
-       qla2x00_wait_for_hba_online(vha);
+       if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS)
+               ql_dbg(ql_dbg_tgt, vha, 0xe081,
+                      "qla2x00_wait_for_hba_online() failed\n");
 }
 
 /*
@@ -6815,7 +6764,7 @@ qlt_24xx_process_atio_queue(struct scsi_qla_host *vha, uint8_t ha_locked)
                         */
                        ql_log(ql_log_warn, vha, 0xd03c,
                            "corrupted fcp frame SID[%3phN] OXID[%04x] EXCG[%x] %64phN\n",
-                           pkt->u.isp24.fcp_hdr.s_id,
+                           &pkt->u.isp24.fcp_hdr.s_id,
                            be16_to_cpu(pkt->u.isp24.fcp_hdr.ox_id),
                            le32_to_cpu(pkt->u.isp24.exchange_addr), pkt);