]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qla2xxx: Simplify usage of SRB structure in driver
authorJoe Carnuccio <joe.carnuccio@cavium.com>
Wed, 13 Sep 2017 15:10:34 +0000 (20:40 +0530)
committerBrian Maly <brian.maly@oracle.com>
Thu, 2 Nov 2017 18:14:20 +0000 (14:14 -0400)
Orabug: 2684419726923029

This patch simplifies SRB structure usage in driver.

- Simplify sp->done() and sp->free() interfaces.
- Remove sp->fcport->vha to use vha pointer from sp.
- Use sp->vha context in qla2x00_rel_sp().

Signed-off-by: Joe Carnuccio <joe.carnuccio@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
drivers/scsi/qla2xxx/qla_bsg.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_gs.c
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_inline.h
drivers/scsi/qla2xxx/qla_iocb.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_mr.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_target.c

index dae3c9b8b7aa7ed2cf4d1bd2444425396aeb82d0..979fb95ee2007c0055e4d55fc02d36093f6b6f4f 100644 (file)
 
 /* BSG support for ELS/CT pass through */
 void
-qla2x00_bsg_job_done(void *data, void *ptr, int res)
+qla2x00_bsg_job_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
-       struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
+       srb_t *sp = ptr;
        struct fc_bsg_job *bsg_job = sp->u.bsg_job;
 
        bsg_job->reply->result = res;
        bsg_job->job_done(bsg_job);
-       sp->free(vha, sp);
+       sp->free(sp);
 }
 
 void
-qla2x00_bsg_sp_free(void *data, void *ptr)
+qla2x00_bsg_sp_free(void *ptr)
 {
-       srb_t *sp = (srb_t *)ptr;
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       srb_t *sp = ptr;
+       struct qla_hw_data *ha = sp->vha->hw;
        struct fc_bsg_job *bsg_job = sp->u.bsg_job;
-       struct qla_hw_data *ha = vha->hw;
        struct qla_mt_iocb_rqst_fx00 *piocb_rqst;
 
        if (sp->type == SRB_FXIOCB_BCMD) {
@@ -57,7 +55,7 @@ qla2x00_bsg_sp_free(void *data, void *ptr)
            sp->type == SRB_FXIOCB_BCMD ||
            sp->type == SRB_ELS_CMD_HST)
                kfree(sp->fcport);
-       qla2x00_rel_sp(vha, sp);
+       qla2x00_rel_sp(sp);
 }
 
 int
@@ -385,7 +383,7 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
        if (rval != QLA_SUCCESS) {
                ql_log(ql_log_warn, vha, 0x700e,
                    "qla2x00_start_sp failed = %d\n", rval);
-               qla2x00_rel_sp(vha, sp);
+               qla2x00_rel_sp(sp);
                rval = -EIO;
                goto done_unmap_sg;
        }
@@ -532,7 +530,7 @@ qla2x00_process_ct(struct fc_bsg_job *bsg_job)
        if (rval != QLA_SUCCESS) {
                ql_log(ql_log_warn, vha, 0x7017,
                    "qla2x00_start_sp failed=%d.\n", rval);
-               qla2x00_rel_sp(vha, sp);
+               qla2x00_rel_sp(sp);
                rval = -EIO;
                goto done_free_fcport;
        }
@@ -2514,6 +2512,6 @@ qla24xx_bsg_timeout(struct fc_bsg_job *bsg_job)
 
 done:
        spin_unlock_irqrestore(&ha->hardware_lock, flags);
-       sp->free(vha, sp);
+       sp->free(sp);
        return 0;
 }
index 16c79b38f5c4395cea41dbed1c89c8e0634d4240..26f58acbac936817c4e1133e58399f675b3dc4aa 100644 (file)
@@ -441,7 +441,7 @@ struct srb_iocb {
 typedef struct srb {
        atomic_t ref_count;
        struct fc_port *fcport;
-       void *vha;
+       struct scsi_qla_host *vha;
        uint32_t handle;
        uint16_t flags;
        uint16_t type;
@@ -455,8 +455,8 @@ typedef struct srb {
                struct fc_bsg_job *bsg_job;
                struct srb_cmd scmd;
        } u;
-       void (*done)(void *, void *, int);
-       void (*free)(void *, void *);
+       void (*done)(void *, int);
+       void (*free)(void *);
 } srb_t;
 
 #define GET_CMD_SP(sp) (sp->u.scmd.cmd)
@@ -3231,6 +3231,7 @@ struct qla_qpair {
        struct qla_hw_data *hw;
        struct work_struct q_work;
        struct list_head qp_list_elem; /* vha->qp_list */
+       struct scsi_qla_host *vha;
 };
 
 struct qla_percpu_qp_hint {
index 24a2387e317c1c1aacc001a7f68b3fafb13166d3..6e52414de3ede884e512184cb84c3a5f00b3b3b3 100644 (file)
@@ -180,9 +180,9 @@ extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32);
 
 extern int qla2x00_post_uevent_work(struct scsi_qla_host *, u32);
 extern void qla2x00_disable_board_on_pci_error(struct work_struct *);
-extern void qla2x00_sp_compl(void *, void *, int);
-extern void qla2xxx_qpair_sp_free_dma(void *, void *);
-extern void qla2xxx_qpair_sp_compl(void *, void *, int);
+extern void qla2x00_sp_compl(void *, int);
+extern void qla2xxx_qpair_sp_free_dma(void *);
+extern void qla2xxx_qpair_sp_compl(void *, int);
 extern int qla24xx_post_upd_fcport_work(struct scsi_qla_host *, fc_port_t *);
 void qla2x00_handle_login_done_event(struct scsi_qla_host *, fc_port_t *,
        uint16_t *);
@@ -209,7 +209,7 @@ extern void qla2x00_do_dpc_all_vps(scsi_qla_host_t *);
 extern int qla24xx_vport_create_req_sanity_check(struct fc_vport *);
 extern scsi_qla_host_t * qla24xx_create_vhost(struct fc_vport *);
 
-extern void qla2x00_sp_free_dma(void *, void *);
+extern void qla2x00_sp_free_dma(void *);
 extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *);
 
 extern void qla2x00_mark_device_lost(scsi_qla_host_t *, fc_port_t *, int, int);
@@ -728,10 +728,10 @@ extern int qla82xx_restart_isp(scsi_qla_host_t *);
 
 /* IOCB related functions */
 extern int qla82xx_start_scsi(srb_t *);
-extern void qla2x00_sp_free(void *, void *);
+extern void qla2x00_sp_free(void *);
 extern void qla2x00_sp_timeout(unsigned long);
-extern void qla2x00_bsg_job_done(void *, void *, int);
-extern void qla2x00_bsg_sp_free(void *, void *);
+extern void qla2x00_bsg_job_done(void *, int);
+extern void qla2x00_bsg_sp_free(void *);
 extern void qla2x00_start_iocbs(struct scsi_qla_host *, struct req_que *);
 
 /* Interrupt related */
index d1074fb0fff88443740d41150a4537a5d3fc4ad6..6d500fd0676817e5c2dc34edf450a0f45ea802f6 100644 (file)
@@ -2822,10 +2822,10 @@ void qla24xx_handle_gidpn_event(scsi_qla_host_t *vha, struct event_arg *ea)
        }
 } /* gidpn_event */
 
-static void qla2x00_async_gidpn_sp_done(void *v, void *s, int res)
+static void qla2x00_async_gidpn_sp_done(void *s, int res)
 {
-       struct scsi_qla_host *vha = (struct scsi_qla_host *)v;
-       struct srb *sp = (struct srb *)s;
+       struct srb *sp = s;
+       struct scsi_qla_host *vha = sp->vha;
        fc_port_t *fcport = sp->fcport;
        u8 *id = fcport->ct_desc.ct_sns->p.rsp.rsp.gid_pn.port_id;
        struct event_arg ea;
@@ -2847,7 +2847,7 @@ static void qla2x00_async_gidpn_sp_done(void *v, void *s, int res)
 
        qla2x00_fcport_event_handler(vha, &ea);
 
-       sp->free(vha, sp);
+       sp->free(sp);
 }
 
 int qla24xx_async_gidpn(scsi_qla_host_t *vha, fc_port_t *fcport)
@@ -2905,7 +2905,7 @@ int qla24xx_async_gidpn(scsi_qla_host_t *vha, fc_port_t *fcport)
        return rval;
 
 done_free_sp:
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        return rval;
@@ -2941,11 +2941,11 @@ int qla24xx_post_gpsc_work(struct scsi_qla_host *vha, fc_port_t *fcport)
        return qla2x00_post_work(vha, e);
 }
 
-static void qla24xx_async_gpsc_sp_done(void *v, void *s, int res)
+static void qla24xx_async_gpsc_sp_done(void *s, int res)
 {
-       struct scsi_qla_host *vha = (struct scsi_qla_host *)v;
+       struct srb *sp = s;
+       struct scsi_qla_host *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
-       struct srb *sp = (struct srb *)s;
        fc_port_t *fcport = sp->fcport;
        struct ct_sns_rsp       *ct_rsp;
        struct event_arg ea;
@@ -3011,7 +3011,7 @@ done:
        ea.fcport = fcport;
        qla2x00_fcport_event_handler(vha, &ea);
 
-       sp->free(vha, sp);
+       sp->free(sp);
 }
 
 int qla24xx_async_gpsc(scsi_qla_host_t *vha, fc_port_t *fcport)
@@ -3066,7 +3066,7 @@ int qla24xx_async_gpsc(scsi_qla_host_t *vha, fc_port_t *fcport)
        return rval;
 
 done_free_sp:
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        return rval;
@@ -3104,7 +3104,7 @@ void qla24xx_async_gpnid_done(scsi_qla_host_t *vha, srb_t *sp)
                sp->u.iocb_cmd.u.ctarg.rsp = NULL;
        }
 
-       sp->free(vha, sp);
+       sp->free(sp);
 }
 
 void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
@@ -3138,10 +3138,10 @@ void qla24xx_handle_gpnid_event(scsi_qla_host_t *vha, struct event_arg *ea)
        }
 }
 
-static void qla2x00_async_gpnid_sp_done(void *v, void *s, int res)
+static void qla2x00_async_gpnid_sp_done(void *s, int res)
 {
-       struct scsi_qla_host *vha = (struct scsi_qla_host *)v;
-       struct srb *sp = (struct srb *)s;
+       struct srb *sp = s;
+       struct scsi_qla_host *vha = sp->vha;
        struct ct_sns_req *ct_req =
            (struct ct_sns_req *)sp->u.iocb_cmd.u.ctarg.req;
        struct ct_sns_rsp *ct_rsp =
@@ -3183,7 +3183,7 @@ static void qla2x00_async_gpnid_sp_done(void *v, void *s, int res)
                        sp->u.iocb_cmd.u.ctarg.rsp = NULL;
                }
 
-               sp->free(vha, sp);
+               sp->free(sp);
                return;
        }
 
@@ -3272,7 +3272,7 @@ done_free_sp:
                sp->u.iocb_cmd.u.ctarg.rsp = NULL;
        }
 
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        return rval;
 }
index b355c2578de90b1689f2e5819ac05159d9d11432..c4e5d0ebdd5d4bd2778476255da8c9611f187ad2 100644 (file)
@@ -47,29 +47,27 @@ qla2x00_sp_timeout(unsigned long __data)
 {
        srb_t *sp = (srb_t *)__data;
        struct srb_iocb *iocb;
-       scsi_qla_host_t *vha = (scsi_qla_host_t *)sp->vha;
-       struct qla_hw_data *ha = vha->hw;
+       scsi_qla_host_t *vha = sp->vha;
        struct req_que *req;
        unsigned long flags;
 
-       spin_lock_irqsave(&ha->hardware_lock, flags);
-       req = ha->req_q_map[0];
+       spin_lock_irqsave(&vha->hw->hardware_lock, flags);
+       req = vha->hw->req_q_map[0];
        req->outstanding_cmds[sp->handle] = NULL;
        iocb = &sp->u.iocb_cmd;
        iocb->timeout(sp);
-       sp->free(vha, sp);
-       spin_unlock_irqrestore(&ha->hardware_lock, flags);
+       sp->free(sp);
+       spin_unlock_irqrestore(&vha->hw->hardware_lock, flags);
 }
 
 void
-qla2x00_sp_free(void *data, void *ptr)
+qla2x00_sp_free(void *ptr)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        struct srb_iocb *iocb = &sp->u.iocb_cmd;
-       struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
 
        del_timer(&iocb->timer);
-       qla2x00_rel_sp(vha, sp);
+       qla2x00_rel_sp(sp);
 }
 
 /* Asynchronous Login/Logout Routines -------------------------------------- */
@@ -97,7 +95,7 @@ qla2x00_get_async_timeout(struct scsi_qla_host *vha)
 void
 qla2x00_async_iocb_timeout(void *data)
 {
-       srb_t *sp = (srb_t *)data;
+       srb_t *sp = data;
        fc_port_t *fcport = sp->fcport;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
        struct event_arg ea;
@@ -130,22 +128,21 @@ qla2x00_async_iocb_timeout(void *data)
        case SRB_NACK_PLOGI:
        case SRB_NACK_PRLI:
        case SRB_NACK_LOGO:
-               sp->done(sp->vha, sp, QLA_FUNCTION_TIMEOUT);
+               sp->done(sp, QLA_FUNCTION_TIMEOUT);
                break;
        }
 }
 
 static void
-qla2x00_async_login_sp_done(void *data, void *ptr, int res)
+qla2x00_async_login_sp_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
+       struct scsi_qla_host *vha = sp->vha;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
-       struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
        struct event_arg ea;
 
        ql_dbg(ql_dbg_disc, vha, 0xffff,
-               "%s %8phC res %d \n",
-                  __func__, sp->fcport->port_name, res);
+           "%s %8phC res %d \n", __func__, sp->fcport->port_name, res);
 
        sp->fcport->flags &= ~FCF_ASYNC_SENT;
        if (!test_bit(UNLOADING, &vha->dpc_flags)) {
@@ -160,7 +157,7 @@ qla2x00_async_login_sp_done(void *data, void *ptr, int res)
                qla2x00_fcport_event_handler(vha, &ea);
        }
 
-       sp->free(sp->fcport->vha, sp);
+       sp->free(sp);
 }
 
 int
@@ -212,24 +209,23 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport,
        return rval;
 
 done_free_sp:
-       sp->free(fcport->vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        return rval;
 }
 
 static void
-qla2x00_async_logout_sp_done(void *data, void *ptr, int res)
+qla2x00_async_logout_sp_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
-       struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
 
        sp->fcport->flags &= ~FCF_ASYNC_SENT;
-       if (!test_bit(UNLOADING, &vha->dpc_flags))
-               qla2x00_post_async_logout_done_work(sp->fcport->vha, sp->fcport,
+       if (!test_bit(UNLOADING, &sp->vha->dpc_flags))
+               qla2x00_post_async_logout_done_work(sp->vha, sp->fcport,
                    lio->u.logio.data);
-       sp->free(sp->fcport->vha, sp);
+       sp->free(sp);
 }
 
 int
@@ -264,23 +260,23 @@ qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport)
        return rval;
 
 done_free_sp:
-       sp->free(fcport->vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        return rval;
 }
 
 static void
-qla2x00_async_adisc_sp_done(void *data, void *ptr, int res)
+qla2x00_async_adisc_sp_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
+       struct scsi_qla_host *vha = sp->vha;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
-       struct scsi_qla_host *vha = (scsi_qla_host_t *)data;
 
        if (!test_bit(UNLOADING, &vha->dpc_flags))
-               qla2x00_post_async_adisc_done_work(sp->fcport->vha, sp->fcport,
+               qla2x00_post_async_adisc_done_work(sp->vha, sp->fcport,
                    lio->u.logio.data);
-       sp->free(sp->fcport->vha, sp);
+       sp->free(sp);
 }
 
 int
@@ -317,7 +313,7 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
        return rval;
 
 done_free_sp:
-       sp->free(fcport->vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        return rval;
@@ -479,10 +475,10 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
 } /* gnl_event */
 
 static void
-qla24xx_async_gnl_sp_done(void *v, void *s, int res)
+qla24xx_async_gnl_sp_done(void *s, int res)
 {
-       struct scsi_qla_host *vha = (struct scsi_qla_host *)v;
-       struct srb *sp = (struct srb *)s;
+       struct srb *sp = s;
+       struct scsi_qla_host *vha = sp->vha;
        unsigned long flags;
        struct fc_port *fcport = NULL, *tf;
        u16 i, n = 0, loop_id;
@@ -541,7 +537,7 @@ qla24xx_async_gnl_sp_done(void *v, void *s, int res)
 
        spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
 
-       sp->free(vha, sp);
+       sp->free(sp);
 }
 
 int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
@@ -609,7 +605,7 @@ int qla24xx_async_gnl(struct scsi_qla_host *vha, fc_port_t *fcport)
        return rval;
 
 done_free_sp:
-       sp->free(fcport->vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        return rval;
@@ -628,10 +624,10 @@ int qla24xx_post_gnl_work(struct scsi_qla_host *vha, fc_port_t *fcport)
 }
 
 static
-void qla24xx_async_gpdb_sp_done(void *v, void *s, int res)
+void qla24xx_async_gpdb_sp_done(void *s, int res)
 {
-       struct scsi_qla_host *vha = (struct scsi_qla_host *)v;
-       struct srb *sp = (struct srb *)s;
+       struct srb *sp = s;
+       struct scsi_qla_host *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
        uint64_t zero = 0;
        struct port_database_24xx *pd;
@@ -708,7 +704,7 @@ gpd_error_out:
        dma_pool_free(ha->s_dma_pool, sp->u.iocb_cmd.u.mbx.in,
                sp->u.iocb_cmd.u.mbx.in_dma);
 
-       sp->free(vha, sp);
+       sp->free(sp);
 }
 
 static int qla24xx_post_gpdb_work(struct scsi_qla_host *vha, fc_port_t *fcport,
@@ -790,7 +786,7 @@ done_free_sp:
        if (pd)
                dma_pool_free(ha->s_dma_pool, pd, pd_dma);
 
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        qla24xx_post_gpdb_work(vha, fcport, opt);
@@ -1168,7 +1164,7 @@ void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea)
 static void
 qla2x00_tmf_iocb_timeout(void *data)
 {
-       srb_t *sp = (srb_t *)data;
+       srb_t *sp = data;
        struct srb_iocb *tmf = &sp->u.iocb_cmd;
 
        tmf->u.tmf.comp_status = CS_TIMEOUT;
@@ -1176,10 +1172,11 @@ qla2x00_tmf_iocb_timeout(void *data)
 }
 
 static void
-qla2x00_tmf_sp_done(void *data, void *ptr, int res)
+qla2x00_tmf_sp_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        struct srb_iocb *tmf = &sp->u.iocb_cmd;
+
        complete(&tmf->u.tmf.comp);
 }
 
@@ -1237,7 +1234,7 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun,
        }
 
 done_free_sp:
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        return rval;
 }
@@ -1245,7 +1242,7 @@ done:
 static void
 qla24xx_abort_iocb_timeout(void *data)
 {
-       srb_t *sp = (srb_t *)data;
+       srb_t *sp = data;
        struct srb_iocb *abt = &sp->u.iocb_cmd;
 
        abt->u.abt.comp_status = CS_TIMEOUT;
@@ -1253,9 +1250,9 @@ qla24xx_abort_iocb_timeout(void *data)
 }
 
 static void
-qla24xx_abort_sp_done(void *data, void *ptr, int res)
+qla24xx_abort_sp_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        struct srb_iocb *abt = &sp->u.iocb_cmd;
 
        complete(&abt->u.abt.comp);
@@ -1264,7 +1261,7 @@ qla24xx_abort_sp_done(void *data, void *ptr, int res)
 static int
 qla24xx_async_abort_cmd(srb_t *cmd_sp)
 {
-       scsi_qla_host_t *vha = cmd_sp->fcport->vha;
+       scsi_qla_host_t *vha = cmd_sp->vha;
        fc_port_t *fcport = cmd_sp->fcport;
        struct srb_iocb *abt_iocb;
        srb_t *sp;
@@ -1297,7 +1294,7 @@ qla24xx_async_abort_cmd(srb_t *cmd_sp)
            QLA_SUCCESS : QLA_FUNCTION_FAILED;
 
 done_free_sp:
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        return rval;
 }
@@ -7563,6 +7560,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha,
                memset(qpair, 0, sizeof(struct qla_qpair));
 
                qpair->hw = vha->hw;
+               qpair->vha = vha;
 
                /* Assign available que pair id */
                mutex_lock(&ha->mq_lock);
index 647828b9e6226e56323f9e08727e59e222f66a63..66df6cec59da4059f064410536c48995635c80ee 100644 (file)
@@ -232,6 +232,7 @@ qla2xxx_get_qpair_sp(struct qla_qpair *qpair, fc_port_t *fcport, gfp_t flag)
        memset(sp, 0, sizeof(*sp));
        sp->fcport = fcport;
        sp->iocbs = 1;
+       sp->vha = qpair->vha;
 done:
        if (!sp)
                QLA_QPAIR_MARK_NOT_BUSY(qpair);
@@ -249,14 +250,13 @@ static inline srb_t *
 qla2x00_get_sp(scsi_qla_host_t *vha, fc_port_t *fcport, gfp_t flag)
 {
        srb_t *sp = NULL;
-       struct qla_hw_data *ha = vha->hw;
        uint8_t bail;
 
        QLA_VHA_MARK_BUSY(vha, bail);
        if (unlikely(bail))
                return NULL;
 
-       sp = mempool_alloc(ha->srb_mempool, flag);
+       sp = mempool_alloc(vha->hw->srb_mempool, flag);
        if (!sp)
                goto done;
 
@@ -271,10 +271,10 @@ done:
 }
 
 static inline void
-qla2x00_rel_sp(scsi_qla_host_t *vha, srb_t *sp)
+qla2x00_rel_sp(srb_t *sp)
 {
-       mempool_free(sp, vha->hw->srb_mempool);
-       QLA_VHA_MARK_NOT_BUSY(vha);
+       QLA_VHA_MARK_NOT_BUSY(sp->vha);
+       mempool_free(sp, sp->vha->hw->srb_mempool);
 }
 
 static inline void
@@ -286,8 +286,7 @@ qla2x00_init_timer(srb_t *sp, unsigned long tmo)
        sp->u.iocb_cmd.timer.function = qla2x00_sp_timeout;
        add_timer(&sp->u.iocb_cmd.timer);
        sp->free = qla2x00_sp_free;
-       if ((IS_QLAFX00(((scsi_qla_host_t *)sp->vha)->hw)) &&
-           (sp->type == SRB_FXIOCB_DCMD))
+       if (IS_QLAFX00(sp->vha->hw) && (sp->type == SRB_FXIOCB_DCMD))
                init_completion(&sp->u.iocb_cmd.u.fxiocb.fxiocb_comp);
        if (sp->type == SRB_ELS_DCMD)
                init_completion(&sp->u.iocb_cmd.u.els_logo.comp);
index 20c15644e5a9ee7c81c4e058a90d596bbcde73bd..e40c4bf9db0837cb8e9804a2295b0a5607723a3e 100644 (file)
@@ -23,7 +23,7 @@ qla2x00_get_cmd_direction(srb_t *sp)
 {
        uint16_t cflags;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
 
        cflags = 0;
 
@@ -210,7 +210,7 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
                return;
        }
 
-       vha = sp->fcport->vha;
+       vha = sp->vha;
        cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp));
 
        /* Three DSDs are available in the Command Type 2 IOCB */
@@ -267,7 +267,7 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
                return;
        }
 
-       vha = sp->fcport->vha;
+       vha = sp->vha;
        cmd_pkt->control_flags |= cpu_to_le16(qla2x00_get_cmd_direction(sp));
 
        /* Two DSDs are available in the Command Type 3 IOCB */
@@ -324,7 +324,7 @@ qla2x00_start_scsi(srb_t *sp)
        struct rsp_que *rsp;
 
        /* Setup device pointers. */
-       vha = sp->fcport->vha;
+       vha = sp->vha;
        ha = vha->hw;
        reg = &ha->iobase->isp;
        cmd = GET_CMD_SP(sp);
@@ -601,7 +601,7 @@ qla24xx_build_scsi_type_6_iocbs(srb_t *sp, struct cmd_type_6 *cmd_pkt,
                return 0;
        }
 
-       vha = sp->fcport->vha;
+       vha = sp->vha;
        ha = vha->hw;
 
        /* Set transfer direction */
@@ -716,7 +716,7 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
                return;
        }
 
-       vha = sp->fcport->vha;
+       vha = sp->vha;
 
        /* Set transfer direction */
        if (cmd->sc_data_direction == DMA_TO_DEVICE) {
@@ -1114,7 +1114,7 @@ qla24xx_walk_and_build_prot_sglist(struct qla_hw_data *ha, srb_t *sp,
        if (sp) {
                cmd = GET_CMD_SP(sp);
                sgl = scsi_prot_sglist(cmd);
-               vha = sp->fcport->vha;
+               vha = sp->vha;
        } else if (tc) {
                vha = tc->vha;
                sgl = tc->prot_sg;
@@ -1221,7 +1221,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
        /* Update entry type to indicate Command Type CRC_2 IOCB */
        *((uint32_t *)(&cmd_pkt->entry_type)) = cpu_to_le32(COMMAND_TYPE_CRC_2);
 
-       vha = sp->fcport->vha;
+       vha = sp->vha;
        ha = vha->hw;
 
        /* No data transfer */
@@ -1231,7 +1231,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
                return QLA_SUCCESS;
        }
 
-       cmd_pkt->vp_index = sp->fcport->vha->vp_idx;
+       cmd_pkt->vp_index = sp->vha->vp_idx;
 
        /* Set transfer direction */
        if (cmd->sc_data_direction == DMA_TO_DEVICE) {
@@ -1422,7 +1422,7 @@ qla24xx_start_scsi(srb_t *sp)
        struct req_que *req = NULL;
        struct rsp_que *rsp = NULL;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
 
        /* Setup device pointers. */
@@ -1499,7 +1499,7 @@ qla24xx_start_scsi(srb_t *sp)
        cmd_pkt->port_id[0] = sp->fcport->d_id.b.al_pa;
        cmd_pkt->port_id[1] = sp->fcport->d_id.b.area;
        cmd_pkt->port_id[2] = sp->fcport->d_id.b.domain;
-       cmd_pkt->vp_index = sp->fcport->vha->vp_idx;
+       cmd_pkt->vp_index = sp->vha->vp_idx;
 
        int_to_scsilun(cmd->device->lun, &cmd_pkt->lun);
        host_to_fcp_swap((uint8_t *)&cmd_pkt->lun, sizeof(cmd_pkt->lun));
@@ -1571,7 +1571,7 @@ qla24xx_dif_start_scsi(srb_t *sp)
        struct req_que          *req = NULL;
        struct rsp_que          *rsp = NULL;
        struct scsi_cmnd        *cmd = GET_CMD_SP(sp);
-       struct scsi_qla_host    *vha = sp->fcport->vha;
+       struct scsi_qla_host    *vha = sp->vha;
        struct qla_hw_data      *ha = vha->hw;
        struct cmd_type_crc_2   *cmd_pkt;
        uint32_t                status = 0;
@@ -2221,13 +2221,13 @@ qla24xx_login_iocb(srb_t *sp, struct logio_entry_24xx *logio)
        logio->port_id[0] = sp->fcport->d_id.b.al_pa;
        logio->port_id[1] = sp->fcport->d_id.b.area;
        logio->port_id[2] = sp->fcport->d_id.b.domain;
-       logio->vp_index = sp->fcport->vha->vp_idx;
+       logio->vp_index = sp->vha->vp_idx;
 }
 
 static void
 qla2x00_login_iocb(srb_t *sp, struct mbx_entry *mbx)
 {
-       struct qla_hw_data *ha = sp->fcport->vha->hw;
+       struct qla_hw_data *ha = sp->vha->hw;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
        uint16_t opts;
 
@@ -2245,7 +2245,7 @@ qla2x00_login_iocb(srb_t *sp, struct mbx_entry *mbx)
        mbx->mb2 = cpu_to_le16(sp->fcport->d_id.b.domain);
        mbx->mb3 = cpu_to_le16(sp->fcport->d_id.b.area << 8 |
            sp->fcport->d_id.b.al_pa);
-       mbx->mb9 = cpu_to_le16(sp->fcport->vha->vp_idx);
+       mbx->mb9 = cpu_to_le16(sp->vha->vp_idx);
 }
 
 static void
@@ -2261,13 +2261,13 @@ qla24xx_logout_iocb(srb_t *sp, struct logio_entry_24xx *logio)
        logio->port_id[0] = sp->fcport->d_id.b.al_pa;
        logio->port_id[1] = sp->fcport->d_id.b.area;
        logio->port_id[2] = sp->fcport->d_id.b.domain;
-       logio->vp_index = sp->fcport->vha->vp_idx;
+       logio->vp_index = sp->vha->vp_idx;
 }
 
 static void
 qla2x00_logout_iocb(srb_t *sp, struct mbx_entry *mbx)
 {
-       struct qla_hw_data *ha = sp->fcport->vha->hw;
+       struct qla_hw_data *ha = sp->vha->hw;
 
        mbx->entry_type = MBX_IOCB_TYPE;
        SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id);
@@ -2278,7 +2278,7 @@ qla2x00_logout_iocb(srb_t *sp, struct mbx_entry *mbx)
        mbx->mb2 = cpu_to_le16(sp->fcport->d_id.b.domain);
        mbx->mb3 = cpu_to_le16(sp->fcport->d_id.b.area << 8 |
            sp->fcport->d_id.b.al_pa);
-       mbx->mb9 = cpu_to_le16(sp->fcport->vha->vp_idx);
+       mbx->mb9 = cpu_to_le16(sp->vha->vp_idx);
        /* Implicit: mbx->mbx10 = 0. */
 }
 
@@ -2288,13 +2288,13 @@ qla24xx_adisc_iocb(srb_t *sp, struct logio_entry_24xx *logio)
        logio->entry_type = LOGINOUT_PORT_IOCB_TYPE;
        logio->control_flags = cpu_to_le16(LCF_COMMAND_ADISC);
        logio->nport_handle = cpu_to_le16(sp->fcport->loop_id);
-       logio->vp_index = sp->fcport->vha->vp_idx;
+       logio->vp_index = sp->vha->vp_idx;
 }
 
 static void
 qla2x00_adisc_iocb(srb_t *sp, struct mbx_entry *mbx)
 {
-       struct qla_hw_data *ha = sp->fcport->vha->hw;
+       struct qla_hw_data *ha = sp->vha->hw;
 
        mbx->entry_type = MBX_IOCB_TYPE;
        SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id);
@@ -2309,7 +2309,7 @@ qla2x00_adisc_iocb(srb_t *sp, struct mbx_entry *mbx)
        mbx->mb3 = cpu_to_le16(LSW(ha->async_pd_dma));
        mbx->mb6 = cpu_to_le16(MSW(MSD(ha->async_pd_dma)));
        mbx->mb7 = cpu_to_le16(LSW(MSD(ha->async_pd_dma)));
-       mbx->mb9 = cpu_to_le16(sp->fcport->vha->vp_idx);
+       mbx->mb9 = cpu_to_le16(sp->vha->vp_idx);
 }
 
 static void
@@ -2345,32 +2345,30 @@ qla24xx_tm_iocb(srb_t *sp, struct tsk_mgmt_entry *tsk)
 }
 
 static void
-qla2x00_els_dcmd_sp_free(void *ptr, void *data)
+qla2x00_els_dcmd_sp_free(void *data)
 {
-       struct scsi_qla_host *vha = (scsi_qla_host_t *)ptr;
-       struct qla_hw_data *ha = vha->hw;
-       srb_t *sp = (srb_t *)data;
+       srb_t *sp = data;
        struct srb_iocb *elsio = &sp->u.iocb_cmd;
 
        kfree(sp->fcport);
 
        if (elsio->u.els_logo.els_logo_pyld)
-               dma_free_coherent(&ha->pdev->dev, DMA_POOL_SIZE,
+               dma_free_coherent(&sp->vha->hw->pdev->dev, DMA_POOL_SIZE,
                    elsio->u.els_logo.els_logo_pyld,
                    elsio->u.els_logo.els_logo_pyld_dma);
 
        del_timer(&elsio->timer);
-       qla2x00_rel_sp(vha, sp);
+       qla2x00_rel_sp(sp);
 }
 
 static void
 qla2x00_els_dcmd_iocb_timeout(void *data)
 {
-       srb_t *sp = (srb_t *)data;
-       struct srb_iocb *lio = &sp->u.iocb_cmd;
+       srb_t *sp = data;
        fc_port_t *fcport = sp->fcport;
-       struct scsi_qla_host *vha = fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
+       struct srb_iocb *lio = &sp->u.iocb_cmd;
        unsigned long flags = 0;
 
        ql_dbg(ql_dbg_io, vha, 0x3069,
@@ -2393,12 +2391,12 @@ qla2x00_els_dcmd_iocb_timeout(void *data)
 }
 
 static void
-qla2x00_els_dcmd_sp_done(void *data, void *ptr, int res)
+qla2x00_els_dcmd_sp_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        fc_port_t *fcport = sp->fcport;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
-       struct scsi_qla_host *vha = fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
 
        ql_dbg(ql_dbg_io, vha, 0x3072,
            "%s hdl=%x, portid=%02x%02x%02x done\n",
@@ -2456,7 +2454,7 @@ qla24xx_els_dcmd_iocb(scsi_qla_host_t *vha, int els_opcode,
                            GFP_KERNEL);
 
        if (!elsio->u.els_logo.els_logo_pyld) {
-               sp->free(vha, sp);
+               sp->free(sp);
                return QLA_FUNCTION_FAILED;
        }
 
@@ -2475,7 +2473,7 @@ qla24xx_els_dcmd_iocb(scsi_qla_host_t *vha, int els_opcode,
 
        rval = qla2x00_start_sp(sp);
        if (rval != QLA_SUCCESS) {
-               sp->free(vha, sp);
+               sp->free(sp);
                return QLA_FUNCTION_FAILED;
        }
 
@@ -2486,14 +2484,14 @@ qla24xx_els_dcmd_iocb(scsi_qla_host_t *vha, int els_opcode,
 
        wait_for_completion(&elsio->u.els_logo.comp);
 
-       sp->free(vha, sp);
+       sp->free(sp);
        return rval;
 }
 
 static void
 qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
 {
-       scsi_qla_host_t *vha = sp->fcport->vha;
+       scsi_qla_host_t *vha = sp->vha;
        struct srb_iocb *elsio = &sp->u.iocb_cmd;
 
        els_iocb->entry_type = ELS_IOCB_TYPE;
@@ -2525,7 +2523,7 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
        els_iocb->rx_address[1] = 0;
        els_iocb->rx_len = 0;
 
-       sp->fcport->vha->qla_stats.control_requests++;
+       sp->vha->qla_stats.control_requests++;
 }
 
 static void
@@ -2540,7 +2538,7 @@ qla24xx_els_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
         els_iocb->handle = sp->handle;
         els_iocb->nport_handle = cpu_to_le16(sp->fcport->loop_id);
        els_iocb->tx_dsd_count = cpu_to_le16(bsg_job->request_payload.sg_cnt);
-       els_iocb->vp_index = sp->fcport->vha->vp_idx;
+       els_iocb->vp_index = sp->vha->vp_idx;
         els_iocb->sof_type = EST_SOFI3;
        els_iocb->rx_dsd_count = cpu_to_le16(bsg_job->reply_payload.sg_cnt);
 
@@ -2571,7 +2569,7 @@ qla24xx_els_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
         els_iocb->rx_len = cpu_to_le32(sg_dma_len
             (bsg_job->reply_payload.sg_list));
 
-       sp->fcport->vha->qla_stats.control_requests++;
+       sp->vha->qla_stats.control_requests++;
 }
 
 static void
@@ -2582,7 +2580,7 @@ qla2x00_ct_iocb(srb_t *sp, ms_iocb_entry_t *ct_iocb)
        struct scatterlist *sg;
        int index;
        uint16_t tot_dsds;
-       scsi_qla_host_t *vha = sp->fcport->vha;
+       scsi_qla_host_t *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
        struct fc_bsg_job *bsg_job = sp->u.bsg_job;
        int loop_iterartion = 0;
@@ -2648,7 +2646,7 @@ qla2x00_ct_iocb(srb_t *sp, ms_iocb_entry_t *ct_iocb)
        }
        ct_iocb->entry_count = entry_count;
 
-       sp->fcport->vha->qla_stats.control_requests++;
+       sp->vha->qla_stats.control_requests++;
 }
 
 static void
@@ -2659,7 +2657,7 @@ qla24xx_ct_iocb(srb_t *sp, struct ct_entry_24xx *ct_iocb)
        struct scatterlist *sg;
        int index;
        uint16_t tot_dsds;
-        scsi_qla_host_t *vha = sp->fcport->vha;
+       scsi_qla_host_t *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
        struct fc_bsg_job *bsg_job = sp->u.bsg_job;
        int loop_iterartion = 0;
@@ -2671,7 +2669,7 @@ qla24xx_ct_iocb(srb_t *sp, struct ct_entry_24xx *ct_iocb)
         ct_iocb->handle = sp->handle;
 
        ct_iocb->nport_handle = cpu_to_le16(sp->fcport->loop_id);
-       ct_iocb->vp_index = sp->fcport->vha->vp_idx;
+       ct_iocb->vp_index = sp->vha->vp_idx;
        ct_iocb->comp_status = cpu_to_le16(0);
 
        ct_iocb->cmd_dsd_count =
@@ -2745,7 +2743,7 @@ qla82xx_start_scsi(srb_t *sp)
        uint32_t *fcp_dl;
        uint8_t additional_cdb_len;
        struct ct6_dsd *ctx;
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
        struct req_que *req = NULL;
        struct rsp_que *rsp = NULL;
@@ -2907,7 +2905,7 @@ sufficient_dsds:
                cmd_pkt->port_id[0] = sp->fcport->d_id.b.al_pa;
                cmd_pkt->port_id[1] = sp->fcport->d_id.b.area;
                cmd_pkt->port_id[2] = sp->fcport->d_id.b.domain;
-               cmd_pkt->vp_index = sp->fcport->vha->vp_idx;
+               cmd_pkt->vp_index = sp->vha->vp_idx;
 
                /* Build IOCB segments */
                if (qla24xx_build_scsi_type_6_iocbs(sp, cmd_pkt, tot_dsds))
@@ -2980,7 +2978,7 @@ sufficient_dsds:
                cmd_pkt->port_id[0] = sp->fcport->d_id.b.al_pa;
                cmd_pkt->port_id[1] = sp->fcport->d_id.b.area;
                cmd_pkt->port_id[2] = sp->fcport->d_id.b.domain;
-               cmd_pkt->vp_index = sp->fcport->vha->vp_idx;
+               cmd_pkt->vp_index = sp->vha->vp_idx;
 
                int_to_scsilun(cmd->device->lun, &cmd_pkt->lun);
                host_to_fcp_swap((uint8_t *)&cmd_pkt->lun,
@@ -3070,7 +3068,7 @@ static void
 qla24xx_abort_iocb(srb_t *sp, struct abort_entry_24xx *abt_iocb)
 {
        struct srb_iocb *aio = &sp->u.iocb_cmd;
-       scsi_qla_host_t *vha = sp->fcport->vha;
+       scsi_qla_host_t *vha = sp->vha;
        struct req_que *req = vha->req;
 
        memset(abt_iocb, 0, sizeof(struct abort_entry_24xx));
@@ -3142,7 +3140,7 @@ int
 qla2x00_start_sp(srb_t *sp)
 {
        int rval;
-       scsi_qla_host_t *vha = (scsi_qla_host_t *)sp->vha;
+       scsi_qla_host_t *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
        void *pkt;
        unsigned long flags;
index 3be3558842d6cabbf3e99d7f7c77725644700f8d..1acbaa9022d398885471da9e534b37a1fb048903 100644 (file)
@@ -1244,7 +1244,7 @@ qla2x00_process_completed_request(struct scsi_qla_host *vha,
                req->outstanding_cmds[index] = NULL;
 
                /* Save ISP completion status */
-               sp->done(vha, sp, DID_OK << 16);
+               sp->done(sp, DID_OK << 16);
        } else {
                ql_log(ql_log_warn, vha, 0x3016, "Invalid SCSI SRB.\n");
 
@@ -1376,7 +1376,7 @@ qla2x00_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
            le16_to_cpu(mbx->mb7));
 
 logio_done:
-       sp->done(vha, sp, 0);
+       sp->done(sp, 0);
 }
 
 static void
@@ -1401,7 +1401,7 @@ qla24xx_mbx_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
 
        res = (si->u.mbx.in_mb[0] & MBS_MASK);
 
-       sp->done(vha, sp, res);
+       sp->done(sp, res);
 }
 
 static void
@@ -1419,7 +1419,7 @@ qla24xxx_nack_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
        if (pkt->u.isp2x.status != cpu_to_le16(NOTIFY_ACK_SUCCESS))
                res = QLA_FUNCTION_FAILED;
 
-       sp->done(vha, sp, res);
+       sp->done(sp, res);
 }
 
 static void
@@ -1490,7 +1490,7 @@ qla2x00_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
             break;
        }
 
-       sp->done(vha, sp, res);
+       sp->done(sp, res);
 }
 
 static void
@@ -1524,7 +1524,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
                type = "Driver ELS logo";
                ql_dbg(ql_dbg_user, vha, 0x5047,
                    "Completing %s: (%p) type=%d.\n", type, sp, sp->type);
-               sp->done(vha, sp, 0);
+               sp->done(sp, 0);
                return;
        case SRB_CT_PTHRU_CMD:
                /* borrowing sts_entry_24xx.comp_status.
@@ -1533,7 +1533,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
                res = qla2x00_chk_ms_status(vha, (ms_iocb_entry_t *)pkt,
                        (struct ct_sns_rsp *)sp->u.iocb_cmd.u.ctarg.rsp,
                        sp->name);
-               sp->done(vha, sp, res);
+               sp->done(sp, res);
                return;
        default:
                ql_dbg(ql_dbg_user, vha, 0x503e,
@@ -1589,7 +1589,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
                bsg_job->reply_len = 0;
        }
 
-       sp->done(vha, sp, res);
+       sp->done(sp, res);
 }
 
 static void
@@ -1685,7 +1685,7 @@ qla24xx_logio_entry(scsi_qla_host_t *vha, struct req_que *req,
            le32_to_cpu(logio->io_parameter[1]));
 
 logio_done:
-       sp->done(vha, sp, 0);
+       sp->done(sp, 0);
 }
 
 static void
@@ -1735,7 +1735,7 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
                ql_dump_buffer(ql_dbg_async + ql_dbg_buffer, vha, 0x5055,
                    (uint8_t *)sts, sizeof(*sts));
 
-       sp->done(vha, sp, 0);
+       sp->done(sp, 0);
 }
 
 /**
@@ -1823,7 +1823,7 @@ static inline void
 qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
                     uint32_t sense_len, struct rsp_que *rsp, int res)
 {
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
        struct scsi_cmnd *cp = GET_CMD_SP(sp);
        uint32_t track_sense_len;
 
@@ -1851,7 +1851,7 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
        if (sense_len) {
                ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x301c,
                    "Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n",
-                   sp->fcport->vha->host_no, cp->device->id, cp->device->lun,
+                   sp->vha->host_no, cp->device->id, cp->device->lun,
                    cp);
                ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x302b,
                    cp->sense_buffer, sense_len);
@@ -1873,7 +1873,7 @@ struct scsi_dif_tuple {
 static inline int
 qla2x00_handle_dif_error(srb_t *sp, struct sts_entry_24xx *sts24)
 {
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
        uint8_t         *ap = &sts24->data[12];
        uint8_t         *ep = &sts24->data[20];
@@ -2134,7 +2134,7 @@ done:
        bsg_job->reply_len = sizeof(struct fc_bsg_reply);
        /* Always return DID_OK, bsg will send the vendor specific response
         * in this case only */
-       sp->done(vha, sp, (DID_OK << 6));
+       sp->done(sp, DID_OK << 6);
 
 }
 
@@ -2507,7 +2507,7 @@ out:
                    resid_len, fw_resid_len, sp, cp);
 
        if (rsp->status_srb == NULL)
-               sp->done(vha, sp, res);
+               sp->done(sp, res);
 }
 
 /**
@@ -2564,7 +2564,7 @@ qla2x00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt)
        /* Place command on done queue. */
        if (sense_len == 0) {
                rsp->status_srb = NULL;
-               sp->done(vha, sp, cp->result);
+               sp->done(sp, cp->result);
        }
 }
 
@@ -2600,7 +2600,7 @@ qla2x00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, sts_entry_t *pkt)
 
        sp = qla2x00_get_sp_from_handle(vha, func, req, pkt);
        if (sp) {
-               sp->done(vha, sp, res);
+               sp->done(sp, res);
                return;
        }
 fatal:
@@ -2658,7 +2658,7 @@ qla24xx_abort_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
 
        abt = &sp->u.iocb_cmd;
        abt->u.abt.comp_status = le32_to_cpu(pkt->nport_handle);
-       sp->done(vha, sp, 0);
+       sp->done(sp, 0);
 }
 
 /**
index c83bd3abb54f5c8fdebc77ae892f48ef7f95dc5d..975c9cc1d96fe461defef9120a0ab604d1f90294 100644 (file)
@@ -1787,16 +1787,16 @@ qlafx00_update_host_attr(scsi_qla_host_t *vha, struct port_info_data *pinfo)
 static void
 qla2x00_fxdisc_iocb_timeout(void *data)
 {
-       srb_t *sp = (srb_t *)data;
+       srb_t *sp = data;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
 
        complete(&lio->u.fxiocb.fxiocb_comp);
 }
 
 static void
-qla2x00_fxdisc_sp_done(void *data, void *ptr, int res)
+qla2x00_fxdisc_sp_done(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        struct srb_iocb *lio = &sp->u.iocb_cmd;
 
        complete(&lio->u.fxiocb.fxiocb_comp);
@@ -1999,7 +1999,7 @@ done_unmap_req:
                dma_free_coherent(&ha->pdev->dev, fdisc->u.fxiocb.req_len,
                    fdisc->u.fxiocb.req_addr, fdisc->u.fxiocb.req_dma_handle);
 done_free_sp:
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        return rval;
 }
@@ -2127,7 +2127,7 @@ static inline void
 qlafx00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
                     uint32_t sense_len, struct rsp_que *rsp, int res)
 {
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
        struct scsi_cmnd *cp = GET_CMD_SP(sp);
        uint32_t track_sense_len;
 
@@ -2162,7 +2162,7 @@ qlafx00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
        if (sense_len) {
                ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x3039,
                    "Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n",
-                   sp->fcport->vha->host_no, cp->device->id, cp->device->lun,
+                   sp->vha->host_no, cp->device->id, cp->device->lun,
                    cp);
                ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x3049,
                    cp->sense_buffer, sense_len);
@@ -2181,7 +2181,7 @@ qlafx00_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
            (sstatus & cpu_to_le16((uint16_t)SS_RESPONSE_INFO_LEN_VALID)))
                cpstatus = cpu_to_le16((uint16_t)CS_INCOMPLETE);
        tmf->u.tmf.comp_status = cpstatus;
-       sp->done(vha, sp, 0);
+       sp->done(sp, 0);
 }
 
 static void
@@ -2198,7 +2198,7 @@ qlafx00_abort_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
 
        abt = &sp->u.iocb_cmd;
        abt->u.abt.comp_status = pkt->tgt_id_sts;
-       sp->done(vha, sp, 0);
+       sp->done(sp, 0);
 }
 
 static void
@@ -2262,7 +2262,7 @@ qlafx00_ioctl_iosb_entry(scsi_qla_host_t *vha, struct req_que *req,
                bsg_job->reply->reply_payload_rcv_len =
                    bsg_job->reply_payload.payload_len;
        }
-       sp->done(vha, sp, res);
+       sp->done(sp, res);
 }
 
 /**
@@ -2535,7 +2535,7 @@ check_scsi_status:
                    par_sense_len, rsp_info_len);
 
        if (rsp->status_srb == NULL)
-               sp->done(vha, sp, res);
+               sp->done(sp, res);
 }
 
 /**
@@ -2612,7 +2612,7 @@ qlafx00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt)
        /* Place command on done queue. */
        if (sense_len == 0) {
                rsp->status_srb = NULL;
-               sp->done(vha, sp, cp->result);
+               sp->done(sp, cp->result);
        }
 }
 
@@ -2693,7 +2693,7 @@ qlafx00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp,
 
        sp = qla2x00_get_sp_from_handle(vha, func, req, pkt);
        if (sp) {
-               sp->done(vha, sp, res);
+               sp->done(sp, res);
                return;
        }
 
@@ -2995,7 +2995,7 @@ qlafx00_build_scsi_iocbs(srb_t *sp, struct cmd_type_7_fx00 *cmd_pkt,
        cont_a64_entry_t lcont_pkt;
        cont_a64_entry_t *cont_pkt;
 
-       vha = sp->fcport->vha;
+       vha = sp->vha;
        req = vha->req;
 
        cmd = GET_CMD_SP(sp);
@@ -3079,7 +3079,7 @@ qlafx00_start_scsi(srb_t *sp)
        struct req_que *req = NULL;
        struct rsp_que *rsp = NULL;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
-       struct scsi_qla_host *vha = sp->fcport->vha;
+       struct scsi_qla_host *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
        struct cmd_type_7_fx00 *cmd_pkt;
        struct cmd_type_7_fx00 lcmd_pkt;
@@ -3203,7 +3203,7 @@ void
 qlafx00_tm_iocb(srb_t *sp, struct tsk_mgmt_entry_fx00 *ptm_iocb)
 {
        struct srb_iocb *fxio = &sp->u.iocb_cmd;
-       scsi_qla_host_t *vha = sp->fcport->vha;
+       scsi_qla_host_t *vha = sp->vha;
        struct req_que *req = vha->req;
        struct tsk_mgmt_entry_fx00 tm_iocb;
        struct scsi_lun llun;
@@ -3230,7 +3230,7 @@ void
 qlafx00_abort_iocb(srb_t *sp, struct abort_iocb_entry_fx00 *pabt_iocb)
 {
        struct srb_iocb *fxio = &sp->u.iocb_cmd;
-       scsi_qla_host_t *vha = sp->fcport->vha;
+       scsi_qla_host_t *vha = sp->vha;
        struct req_que *req = vha->req;
        struct abort_iocb_entry_fx00 abt_iocb;
 
@@ -3342,8 +3342,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
                                            REQUEST_ENTRY_SIZE);
                                        cont_pkt =
                                            qlafx00_prep_cont_type1_iocb(
-                                               sp->fcport->vha->req,
-                                               &lcont_pkt);
+                                               sp->vha->req, &lcont_pkt);
                                        cur_dsd = (__le32 *)
                                            lcont_pkt.dseg_0_address;
                                        avail_dsds = 5;
@@ -3364,7 +3363,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
                                            &lcont_pkt, REQUEST_ENTRY_SIZE);
                                        ql_dump_buffer(
                                            ql_dbg_user + ql_dbg_verbose,
-                                           sp->fcport->vha, 0x3042,
+                                           sp->vha, 0x3042,
                                            (uint8_t *)&lcont_pkt,
                                             REQUEST_ENTRY_SIZE);
                                }
@@ -3373,7 +3372,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
                                memcpy_toio((void __iomem *)cont_pkt,
                                    &lcont_pkt, REQUEST_ENTRY_SIZE);
                                ql_dump_buffer(ql_dbg_user + ql_dbg_verbose,
-                                   sp->fcport->vha, 0x3043,
+                                   sp->vha, 0x3043,
                                    (uint8_t *)&lcont_pkt, REQUEST_ENTRY_SIZE);
                        }
                }
@@ -3405,8 +3404,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
                                            REQUEST_ENTRY_SIZE);
                                        cont_pkt =
                                            qlafx00_prep_cont_type1_iocb(
-                                               sp->fcport->vha->req,
-                                               &lcont_pkt);
+                                               sp->vha->req, &lcont_pkt);
                                        cur_dsd = (__le32 *)
                                            lcont_pkt.dseg_0_address;
                                        avail_dsds = 5;
@@ -3427,7 +3425,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
                                            REQUEST_ENTRY_SIZE);
                                        ql_dump_buffer(
                                            ql_dbg_user + ql_dbg_verbose,
-                                           sp->fcport->vha, 0x3045,
+                                           sp->vha, 0x3045,
                                            (uint8_t *)&lcont_pkt,
                                            REQUEST_ENTRY_SIZE);
                                }
@@ -3436,7 +3434,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
                                memcpy_toio((void __iomem *)cont_pkt,
                                    &lcont_pkt, REQUEST_ENTRY_SIZE);
                                ql_dump_buffer(ql_dbg_user + ql_dbg_verbose,
-                                   sp->fcport->vha, 0x3046,
+                                   sp->vha, 0x3046,
                                    (uint8_t *)&lcont_pkt, REQUEST_ENTRY_SIZE);
                        }
                }
@@ -3448,7 +3446,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
        }
 
        ql_dump_buffer(ql_dbg_user + ql_dbg_verbose,
-           sp->fcport->vha, 0x3047,
+           sp->vha, 0x3047,
            (uint8_t *)&fx_iocb, sizeof(struct fxdisc_entry_fx00));
 
        memcpy_toio((void __iomem *)pfxiocb, &fx_iocb,
index 721c76d524dc6bdc58a94bad1cd82f43d620887a..c9dd44bb8e52651b6e7acf236dc6d3bcca5dfd1e 100644 (file)
@@ -589,11 +589,11 @@ qla24xx_fw_version_str(struct scsi_qla_host *vha, char *str, size_t size)
 }
 
 void
-qla2x00_sp_free_dma(void *vha, void *ptr)
+qla2x00_sp_free_dma(void *ptr)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
+       struct qla_hw_data *ha = sp->vha->hw;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
-       struct qla_hw_data *ha = sp->fcport->vha->hw;
        void *ctx = GET_CMD_CTX_SP(sp);
 
        if (sp->flags & SRB_DMA_VALID) {
@@ -632,20 +632,19 @@ qla2x00_sp_free_dma(void *vha, void *ptr)
        }
 
        CMD_SP(cmd) = NULL;
-       qla2x00_rel_sp(sp->fcport->vha, sp);
+       qla2x00_rel_sp(sp);
 }
 
 void
-qla2x00_sp_compl(void *data, void *ptr, int res)
+qla2x00_sp_compl(void *ptr, int res)
 {
-       struct qla_hw_data *ha = (struct qla_hw_data *)data;
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
 
        cmd->result = res;
 
        if (atomic_read(&sp->ref_count) == 0) {
-               ql_dbg(ql_dbg_io, sp->fcport->vha, 0x3015,
+               ql_dbg(ql_dbg_io, sp->vha, 0x3015,
                    "SP reference-count to ZERO -- sp=%p cmd=%p.\n",
                    sp, GET_CMD_SP(sp));
                if (ql2xextended_error_logging & ql_dbg_io)
@@ -655,12 +654,12 @@ qla2x00_sp_compl(void *data, void *ptr, int res)
        if (!atomic_dec_and_test(&sp->ref_count))
                return;
 
-       qla2x00_sp_free_dma(ha, sp);
+       qla2x00_sp_free_dma(sp);
        cmd->scsi_done(cmd);
 }
 
 void
-qla2xxx_qpair_sp_free_dma(void *vha, void *ptr)
+qla2xxx_qpair_sp_free_dma(void *ptr)
 {
        srb_t *sp = (srb_t *)ptr;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
@@ -706,9 +705,9 @@ qla2xxx_qpair_sp_free_dma(void *vha, void *ptr)
 }
 
 void
-qla2xxx_qpair_sp_compl(void *data, void *ptr, int res)
+qla2xxx_qpair_sp_compl(void *ptr, int res)
 {
-       srb_t *sp = (srb_t *)ptr;
+       srb_t *sp = ptr;
        struct scsi_cmnd *cmd = GET_CMD_SP(sp);
 
        cmd->result = res;
@@ -724,7 +723,7 @@ qla2xxx_qpair_sp_compl(void *data, void *ptr, int res)
        if (!atomic_dec_and_test(&sp->ref_count))
                return;
 
-       qla2xxx_qpair_sp_free_dma(sp->fcport->vha, sp);
+       qla2xxx_qpair_sp_free_dma(sp);
        cmd->scsi_done(cmd);
 }
 
@@ -840,7 +839,7 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
        return 0;
 
 qc24_host_busy_free_sp:
-       qla2x00_sp_free_dma(ha, sp);
+       qla2x00_sp_free_dma(sp);
 
 qc24_host_busy:
        return SCSI_MLQUEUE_HOST_BUSY;
@@ -929,7 +928,7 @@ qla2xxx_mqueuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd,
        return 0;
 
 qc24_host_busy_free_sp:
-       qla2xxx_qpair_sp_free_dma(vha, sp);
+       qla2xxx_qpair_sp_free_dma(sp);
 
 qc24_host_busy:
        return SCSI_MLQUEUE_HOST_BUSY;
@@ -1209,7 +1208,7 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
        }
 
        spin_lock_irqsave(&ha->hardware_lock, flags);
-       sp->done(vha, sp, 0);
+       sp->done(sp, 0);
        spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
        /* Did the command return during mailbox execution? */
@@ -1254,7 +1253,7 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t,
                        continue;
                if (sp->type != SRB_SCSI_CMD)
                        continue;
-               if (vha->vp_idx != sp->fcport->vha->vp_idx)
+               if (vha->vp_idx != sp->vha->vp_idx)
                        continue;
                match = 0;
                cmd = GET_CMD_SP(sp);
@@ -1620,7 +1619,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
                        sp = req->outstanding_cmds[cnt];
                        if (sp) {
                                req->outstanding_cmds[cnt] = NULL;
-                               sp->done(vha, sp, res);
+                               sp->done(sp, res);
                        }
                }
        }
index 5bb607f9da3d92d6812e8cd088859acb7390f1e7..7a2e3f1c1641008d1b0e69347f595efd5bd71142 100644 (file)
@@ -520,10 +520,10 @@ static int qla24xx_post_nack_work(struct scsi_qla_host *vha, fc_port_t *fcport,
 }
 
 static
-void qla2x00_async_nack_sp_done(void *v, void *s, int res)
+void qla2x00_async_nack_sp_done(void *s, int res)
 {
-       struct scsi_qla_host *vha = (struct scsi_qla_host *)v;
        struct srb *sp = (struct srb *)s;
+       struct scsi_qla_host *vha = sp->vha;
        unsigned long flags;
 
        ql_dbg(ql_dbg_disc, vha, 0xffff,
@@ -580,7 +580,7 @@ void qla2x00_async_nack_sp_done(void *v, void *s, int res)
        }
        spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);
 
-       sp->free(vha, sp);
+       sp->free(sp);
 }
 
 int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
@@ -630,7 +630,7 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
        return rval;
 
 done_free_sp:
-       sp->free(vha, sp);
+       sp->free(sp);
 done:
        fcport->flags &= ~FCF_ASYNC_SENT;
        return rval;