qla2xxx: Cleanup TMF code translation from qla_target
Move code code which converts Task Mgmt Command flags for ATIO to TCM #defines, from qla2xxx driver to tcm_qla2xxx driver. Signed-off-by: Quinn Tran <quinn.tran@cavium.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
df2e32c5ad
commit
be92fc3fde
|
@ -1592,8 +1592,9 @@ static int __qlt_24xx_handle_abts(struct scsi_qla_host *vha,
|
||||||
mcmd->sess = sess;
|
mcmd->sess = sess;
|
||||||
memcpy(&mcmd->orig_iocb.abts, abts, sizeof(mcmd->orig_iocb.abts));
|
memcpy(&mcmd->orig_iocb.abts, abts, sizeof(mcmd->orig_iocb.abts));
|
||||||
mcmd->reset_count = vha->hw->chip_reset;
|
mcmd->reset_count = vha->hw->chip_reset;
|
||||||
|
mcmd->tmr_func = QLA_TGT_ABTS;
|
||||||
|
|
||||||
rc = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, TMR_ABORT_TASK,
|
rc = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, mcmd->tmr_func,
|
||||||
abts->exchange_addr_to_abort);
|
abts->exchange_addr_to_abort);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
ql_dbg(ql_dbg_tgt_mgt, vha, 0xf052,
|
ql_dbg(ql_dbg_tgt_mgt, vha, 0xf052,
|
||||||
|
@ -4051,7 +4052,6 @@ static int qlt_issue_task_mgmt(struct qla_tgt_sess *sess, uint32_t lun,
|
||||||
struct qla_tgt_mgmt_cmd *mcmd;
|
struct qla_tgt_mgmt_cmd *mcmd;
|
||||||
struct atio_from_isp *a = (struct atio_from_isp *)iocb;
|
struct atio_from_isp *a = (struct atio_from_isp *)iocb;
|
||||||
int res;
|
int res;
|
||||||
uint8_t tmr_func;
|
|
||||||
|
|
||||||
mcmd = mempool_alloc(qla_tgt_mgmt_cmd_mempool, GFP_ATOMIC);
|
mcmd = mempool_alloc(qla_tgt_mgmt_cmd_mempool, GFP_ATOMIC);
|
||||||
if (!mcmd) {
|
if (!mcmd) {
|
||||||
|
@ -4073,74 +4073,12 @@ static int qlt_issue_task_mgmt(struct qla_tgt_sess *sess, uint32_t lun,
|
||||||
mcmd->reset_count = vha->hw->chip_reset;
|
mcmd->reset_count = vha->hw->chip_reset;
|
||||||
|
|
||||||
switch (fn) {
|
switch (fn) {
|
||||||
case QLA_TGT_CLEAR_ACA:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10000,
|
|
||||||
"qla_target(%d): CLEAR_ACA received\n", sess->vha->vp_idx);
|
|
||||||
tmr_func = TMR_CLEAR_ACA;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QLA_TGT_TARGET_RESET:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10001,
|
|
||||||
"qla_target(%d): TARGET_RESET received\n",
|
|
||||||
sess->vha->vp_idx);
|
|
||||||
tmr_func = TMR_TARGET_WARM_RESET;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QLA_TGT_LUN_RESET:
|
case QLA_TGT_LUN_RESET:
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10002,
|
|
||||||
"qla_target(%d): LUN_RESET received\n", sess->vha->vp_idx);
|
|
||||||
tmr_func = TMR_LUN_RESET;
|
|
||||||
abort_cmds_for_lun(vha, lun, a->u.isp24.fcp_hdr.s_id);
|
abort_cmds_for_lun(vha, lun, a->u.isp24.fcp_hdr.s_id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QLA_TGT_CLEAR_TS:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10003,
|
|
||||||
"qla_target(%d): CLEAR_TS received\n", sess->vha->vp_idx);
|
|
||||||
tmr_func = TMR_CLEAR_TASK_SET;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QLA_TGT_ABORT_TS:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10004,
|
|
||||||
"qla_target(%d): ABORT_TS received\n", sess->vha->vp_idx);
|
|
||||||
tmr_func = TMR_ABORT_TASK_SET;
|
|
||||||
break;
|
|
||||||
#if 0
|
|
||||||
case QLA_TGT_ABORT_ALL:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10005,
|
|
||||||
"qla_target(%d): Doing ABORT_ALL_TASKS\n",
|
|
||||||
sess->vha->vp_idx);
|
|
||||||
tmr_func = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QLA_TGT_ABORT_ALL_SESS:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10006,
|
|
||||||
"qla_target(%d): Doing ABORT_ALL_TASKS_SESS\n",
|
|
||||||
sess->vha->vp_idx);
|
|
||||||
tmr_func = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QLA_TGT_NEXUS_LOSS_SESS:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10007,
|
|
||||||
"qla_target(%d): Doing NEXUS_LOSS_SESS\n",
|
|
||||||
sess->vha->vp_idx);
|
|
||||||
tmr_func = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QLA_TGT_NEXUS_LOSS:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x10008,
|
|
||||||
"qla_target(%d): Doing NEXUS_LOSS\n", sess->vha->vp_idx);
|
|
||||||
tmr_func = 0;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x1000a,
|
|
||||||
"qla_target(%d): Unknown task mgmt fn 0x%x\n",
|
|
||||||
sess->vha->vp_idx, fn);
|
|
||||||
mempool_free(mcmd, qla_tgt_mgmt_cmd_mempool);
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
res = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, tmr_func, 0);
|
res = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, mcmd->tmr_func, 0);
|
||||||
if (res != 0) {
|
if (res != 0) {
|
||||||
ql_dbg(ql_dbg_tgt_tmr, vha, 0x1000b,
|
ql_dbg(ql_dbg_tgt_tmr, vha, 0x1000b,
|
||||||
"qla_target(%d): tgt.tgt_ops->handle_tmr() failed: %d\n",
|
"qla_target(%d): tgt.tgt_ops->handle_tmr() failed: %d\n",
|
||||||
|
@ -4215,8 +4153,9 @@ static int __qlt_abort_task(struct scsi_qla_host *vha,
|
||||||
lun = a->u.isp24.fcp_cmnd.lun;
|
lun = a->u.isp24.fcp_cmnd.lun;
|
||||||
unpacked_lun = scsilun_to_int((struct scsi_lun *)&lun);
|
unpacked_lun = scsilun_to_int((struct scsi_lun *)&lun);
|
||||||
mcmd->reset_count = vha->hw->chip_reset;
|
mcmd->reset_count = vha->hw->chip_reset;
|
||||||
|
mcmd->tmr_func = QLA_TGT_2G_ABORT_TASK;
|
||||||
|
|
||||||
rc = ha->tgt.tgt_ops->handle_tmr(mcmd, unpacked_lun, TMR_ABORT_TASK,
|
rc = ha->tgt.tgt_ops->handle_tmr(mcmd, unpacked_lun, mcmd->tmr_func,
|
||||||
le16_to_cpu(iocb->u.isp2x.seq_id));
|
le16_to_cpu(iocb->u.isp2x.seq_id));
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
ql_dbg(ql_dbg_tgt_mgt, vha, 0xf060,
|
ql_dbg(ql_dbg_tgt_mgt, vha, 0xf060,
|
||||||
|
|
|
@ -744,7 +744,7 @@ struct qla_tgt_func_tmpl {
|
||||||
unsigned char *, uint32_t, int, int, int);
|
unsigned char *, uint32_t, int, int, int);
|
||||||
void (*handle_data)(struct qla_tgt_cmd *);
|
void (*handle_data)(struct qla_tgt_cmd *);
|
||||||
void (*handle_dif_err)(struct qla_tgt_cmd *);
|
void (*handle_dif_err)(struct qla_tgt_cmd *);
|
||||||
int (*handle_tmr)(struct qla_tgt_mgmt_cmd *, uint32_t, uint8_t,
|
int (*handle_tmr)(struct qla_tgt_mgmt_cmd *, uint32_t, uint16_t,
|
||||||
uint32_t);
|
uint32_t);
|
||||||
void (*free_cmd)(struct qla_tgt_cmd *);
|
void (*free_cmd)(struct qla_tgt_cmd *);
|
||||||
void (*free_mcmd)(struct qla_tgt_mgmt_cmd *);
|
void (*free_mcmd)(struct qla_tgt_mgmt_cmd *);
|
||||||
|
@ -795,6 +795,8 @@ int qla2x00_wait_for_hba_online(struct scsi_qla_host *);
|
||||||
#define QLA_TGT_ABORT_ALL 0xFFFE
|
#define QLA_TGT_ABORT_ALL 0xFFFE
|
||||||
#define QLA_TGT_NEXUS_LOSS_SESS 0xFFFD
|
#define QLA_TGT_NEXUS_LOSS_SESS 0xFFFD
|
||||||
#define QLA_TGT_NEXUS_LOSS 0xFFFC
|
#define QLA_TGT_NEXUS_LOSS 0xFFFC
|
||||||
|
#define QLA_TGT_ABTS 0xFFFB
|
||||||
|
#define QLA_TGT_2G_ABORT_TASK 0xFFFA
|
||||||
|
|
||||||
/* Notify Acknowledge flags */
|
/* Notify Acknowledge flags */
|
||||||
#define NOTIFY_ACK_RES_COUNT BIT_8
|
#define NOTIFY_ACK_RES_COUNT BIT_8
|
||||||
|
@ -1056,7 +1058,7 @@ struct qla_tgt_sess_work_param {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct qla_tgt_mgmt_cmd {
|
struct qla_tgt_mgmt_cmd {
|
||||||
uint8_t tmr_func;
|
uint16_t tmr_func;
|
||||||
uint8_t fc_tm_rsp;
|
uint8_t fc_tm_rsp;
|
||||||
struct qla_tgt_sess *sess;
|
struct qla_tgt_sess *sess;
|
||||||
struct se_cmd se_cmd;
|
struct se_cmd se_cmd;
|
||||||
|
|
|
@ -563,13 +563,49 @@ static void tcm_qla2xxx_handle_dif_err(struct qla_tgt_cmd *cmd)
|
||||||
* Called from qla_target.c:qlt_issue_task_mgmt()
|
* Called from qla_target.c:qlt_issue_task_mgmt()
|
||||||
*/
|
*/
|
||||||
static int tcm_qla2xxx_handle_tmr(struct qla_tgt_mgmt_cmd *mcmd, uint32_t lun,
|
static int tcm_qla2xxx_handle_tmr(struct qla_tgt_mgmt_cmd *mcmd, uint32_t lun,
|
||||||
uint8_t tmr_func, uint32_t tag)
|
uint16_t tmr_func, uint32_t tag)
|
||||||
{
|
{
|
||||||
struct qla_tgt_sess *sess = mcmd->sess;
|
struct qla_tgt_sess *sess = mcmd->sess;
|
||||||
struct se_cmd *se_cmd = &mcmd->se_cmd;
|
struct se_cmd *se_cmd = &mcmd->se_cmd;
|
||||||
|
int transl_tmr_func = 0;
|
||||||
|
|
||||||
|
switch (tmr_func) {
|
||||||
|
case QLA_TGT_ABTS:
|
||||||
|
pr_debug("%ld: ABTS received\n", sess->vha->host_no);
|
||||||
|
transl_tmr_func = TMR_ABORT_TASK;
|
||||||
|
break;
|
||||||
|
case QLA_TGT_2G_ABORT_TASK:
|
||||||
|
pr_debug("%ld: 2G Abort Task received\n", sess->vha->host_no);
|
||||||
|
transl_tmr_func = TMR_ABORT_TASK;
|
||||||
|
break;
|
||||||
|
case QLA_TGT_CLEAR_ACA:
|
||||||
|
pr_debug("%ld: CLEAR_ACA received\n", sess->vha->host_no);
|
||||||
|
transl_tmr_func = TMR_CLEAR_ACA;
|
||||||
|
break;
|
||||||
|
case QLA_TGT_TARGET_RESET:
|
||||||
|
pr_debug("%ld: TARGET_RESET received\n", sess->vha->host_no);
|
||||||
|
transl_tmr_func = TMR_TARGET_WARM_RESET;
|
||||||
|
break;
|
||||||
|
case QLA_TGT_LUN_RESET:
|
||||||
|
pr_debug("%ld: LUN_RESET received\n", sess->vha->host_no);
|
||||||
|
transl_tmr_func = TMR_LUN_RESET;
|
||||||
|
break;
|
||||||
|
case QLA_TGT_CLEAR_TS:
|
||||||
|
pr_debug("%ld: CLEAR_TS received\n", sess->vha->host_no);
|
||||||
|
transl_tmr_func = TMR_CLEAR_TASK_SET;
|
||||||
|
break;
|
||||||
|
case QLA_TGT_ABORT_TS:
|
||||||
|
pr_debug("%ld: ABORT_TS received\n", sess->vha->host_no);
|
||||||
|
transl_tmr_func = TMR_ABORT_TASK_SET;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pr_debug("%ld: Unknown task mgmt fn 0x%x\n",
|
||||||
|
sess->vha->host_no, tmr_func);
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
return target_submit_tmr(se_cmd, sess->se_sess, NULL, lun, mcmd,
|
return target_submit_tmr(se_cmd, sess->se_sess, NULL, lun, mcmd,
|
||||||
tmr_func, GFP_ATOMIC, tag, TARGET_SCF_ACK_KREF);
|
transl_tmr_func, GFP_ATOMIC, tag, TARGET_SCF_ACK_KREF);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tcm_qla2xxx_queue_data_in(struct se_cmd *se_cmd)
|
static int tcm_qla2xxx_queue_data_in(struct se_cmd *se_cmd)
|
||||||
|
|
Loading…
Reference in New Issue