mirror of
https://github.com/SCST-project/scst.git
synced 2026-07-25 17:42:38 +00:00
Merge branch 'svn-trunk'
This commit is contained in:
@@ -507,9 +507,7 @@ static void sqa_qla2xxx_handle_data(struct qla_tgt_cmd *cmd)
|
||||
TRACE_ENTRY();
|
||||
|
||||
spin_lock_irqsave(&cmd->cmd_lock, flags);
|
||||
cmd->data_work =1;
|
||||
if (cmd->aborted) {
|
||||
cmd->data_work_free = 1;
|
||||
spin_unlock_irqrestore(&cmd->cmd_lock, flags);
|
||||
|
||||
scst_set_cmd_error(scst_cmd,
|
||||
@@ -1477,8 +1475,6 @@ static int sqa_target_release(struct scst_tgt *scst_tgt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define DATA_WORK_NOT_FREE(_cmd) (_cmd->data_work && !_cmd->data_work_free)
|
||||
|
||||
static int sqa_xmit_response(struct scst_cmd *scst_cmd)
|
||||
{
|
||||
int xmit_type = QLA_TGT_XMIT_DATA, res, residual=0;
|
||||
|
||||
@@ -1598,6 +1598,7 @@ static int qla2x00_update_fru_versions(struct bsg_job *bsg_job)
|
||||
uint32_t count;
|
||||
dma_addr_t sfp_dma;
|
||||
void *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
|
||||
|
||||
if (!sfp) {
|
||||
bsg_reply->reply_data.vendor_reply.vendor_rsp[0] =
|
||||
EXT_STATUS_NO_MEMORY;
|
||||
@@ -1651,6 +1652,7 @@ static int qla2x00_read_fru_status(struct bsg_job *bsg_job)
|
||||
struct qla_status_reg *sr = (void *)bsg;
|
||||
dma_addr_t sfp_dma;
|
||||
uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
|
||||
|
||||
if (!sfp) {
|
||||
bsg_reply->reply_data.vendor_reply.vendor_rsp[0] =
|
||||
EXT_STATUS_NO_MEMORY;
|
||||
@@ -1704,6 +1706,7 @@ static int qla2x00_write_fru_status(struct bsg_job *bsg_job)
|
||||
struct qla_status_reg *sr = (void *)bsg;
|
||||
dma_addr_t sfp_dma;
|
||||
uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
|
||||
|
||||
if (!sfp) {
|
||||
bsg_reply->reply_data.vendor_reply.vendor_rsp[0] =
|
||||
EXT_STATUS_NO_MEMORY;
|
||||
@@ -1753,6 +1756,7 @@ static int qla2x00_write_i2c(struct bsg_job *bsg_job)
|
||||
struct qla_i2c_access *i2c = (void *)bsg;
|
||||
dma_addr_t sfp_dma;
|
||||
uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
|
||||
|
||||
if (!sfp) {
|
||||
bsg_reply->reply_data.vendor_reply.vendor_rsp[0] =
|
||||
EXT_STATUS_NO_MEMORY;
|
||||
@@ -1801,6 +1805,7 @@ static int qla2x00_read_i2c(struct bsg_job *bsg_job)
|
||||
struct qla_i2c_access *i2c = (void *)bsg;
|
||||
dma_addr_t sfp_dma;
|
||||
uint8_t *sfp = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &sfp_dma);
|
||||
|
||||
if (!sfp) {
|
||||
bsg_reply->reply_data.vendor_reply.vendor_rsp[0] =
|
||||
EXT_STATUS_NO_MEMORY;
|
||||
|
||||
@@ -3169,7 +3169,7 @@ struct isp_operations {
|
||||
int (*start_scsi) (srb_t *);
|
||||
int (*start_scsi_mq) (srb_t *);
|
||||
int (*abort_isp) (struct scsi_qla_host *);
|
||||
int (*iospace_config)(struct qla_hw_data*);
|
||||
int (*iospace_config)(struct qla_hw_data *);
|
||||
int (*initialize_adapter)(struct scsi_qla_host *);
|
||||
};
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ static int
|
||||
qla2x00_dfs_tgt_sess_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
scsi_qla_host_t *vha = inode->i_private;
|
||||
|
||||
return single_open(file, qla2x00_dfs_tgt_sess_show, vha);
|
||||
}
|
||||
|
||||
@@ -161,6 +162,7 @@ static int
|
||||
qla_dfs_fw_resource_cnt_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct scsi_qla_host *vha = inode->i_private;
|
||||
|
||||
return single_open(file, qla_dfs_fw_resource_cnt_show, vha);
|
||||
}
|
||||
|
||||
@@ -250,6 +252,7 @@ static int
|
||||
qla_dfs_tgt_counters_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct scsi_qla_host *vha = inode->i_private;
|
||||
|
||||
return single_open(file, qla_dfs_tgt_counters_show, vha);
|
||||
}
|
||||
|
||||
|
||||
@@ -247,7 +247,7 @@ extern void qla24xx_report_id_acquisition(scsi_qla_host_t *,
|
||||
struct vp_rpt_id_entry_24xx *);
|
||||
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 scsi_qla_host_t *qla24xx_create_vhost(struct fc_vport *);
|
||||
|
||||
extern void qla2x00_sp_free_dma(void *);
|
||||
extern char *qla2x00_get_fw_version_str(struct scsi_qla_host *, char *);
|
||||
|
||||
+29
-24
@@ -1616,6 +1616,7 @@ int qla24xx_post_newsess_work(struct scsi_qla_host *vha, port_id_t *id,
|
||||
u8 *port_name, u8 *node_name, void *pla, u8 fc4_type)
|
||||
{
|
||||
struct qla_work_evt *e;
|
||||
|
||||
e = qla2x00_alloc_work(vha, QLA_EVT_NEW_SESS);
|
||||
if (!e)
|
||||
return QLA_FUNCTION_FAILED;
|
||||
@@ -1691,6 +1692,7 @@ void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea)
|
||||
return;
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
fcport = qla2x00_find_fcport_by_nportid
|
||||
(vha, &ea->id, 1);
|
||||
if (fcport) {
|
||||
@@ -1753,21 +1755,21 @@ void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea)
|
||||
*/
|
||||
void qla_rscn_replay(fc_port_t *fcport)
|
||||
{
|
||||
struct event_arg ea;
|
||||
struct event_arg ea;
|
||||
|
||||
switch (fcport->disc_state) {
|
||||
case DSC_DELETE_PEND:
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (fcport->disc_state) {
|
||||
case DSC_DELETE_PEND:
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (fcport->scan_needed) {
|
||||
memset(&ea, 0, sizeof(ea));
|
||||
ea.event = FCME_RSCN;
|
||||
ea.id = fcport->d_id;
|
||||
ea.id.b.rsvd_1 = RSCN_PORT_ADDR;
|
||||
qla2x00_fcport_event_handler(fcport->vha, &ea);
|
||||
if (fcport->scan_needed) {
|
||||
memset(&ea, 0, sizeof(ea));
|
||||
ea.event = FCME_RSCN;
|
||||
ea.id = fcport->d_id;
|
||||
ea.id.b.rsvd_1 = RSCN_PORT_ADDR;
|
||||
qla2x00_fcport_event_handler(fcport->vha, &ea);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4760,7 +4762,7 @@ qla2x00_nvram_config(scsi_qla_host_t *vha)
|
||||
ha->zio_mode = icb->add_firmware_options[0] &
|
||||
(BIT_3 | BIT_2 | BIT_1 | BIT_0);
|
||||
ha->zio_timer = icb->interrupt_delay_timer ?
|
||||
icb->interrupt_delay_timer: 2;
|
||||
icb->interrupt_delay_timer : 2;
|
||||
}
|
||||
icb->add_firmware_options[0] &=
|
||||
~(BIT_3 | BIT_2 | BIT_1 | BIT_0);
|
||||
@@ -4793,7 +4795,7 @@ qla2x00_rport_del(void *data)
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(fcport->vha->host->host_lock, flags);
|
||||
rport = fcport->drport ? fcport->drport: fcport->rport;
|
||||
rport = fcport->drport ? fcport->drport : fcport->rport;
|
||||
fcport->drport = NULL;
|
||||
spin_unlock_irqrestore(fcport->vha->host->host_lock, flags);
|
||||
if (rport) {
|
||||
@@ -4915,6 +4917,7 @@ qla2x00_configure_loop(scsi_qla_host_t *vha)
|
||||
int rval;
|
||||
unsigned long flags, save_flags;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
rval = QLA_SUCCESS;
|
||||
|
||||
/* Get Initiator ID */
|
||||
@@ -6420,6 +6423,7 @@ qla83xx_initiating_reset(scsi_qla_host_t *vha)
|
||||
qla83xx_idc_audit(vha, IDC_AUDIT_TIMESTAMP);
|
||||
} else {
|
||||
const char *state = qla83xx_dev_state_to_string(dev_state);
|
||||
|
||||
ql_log(ql_log_info, vha, 0xb057, "HW State: %s.\n", state);
|
||||
|
||||
/* SV: XXX: Is timeout required here? */
|
||||
@@ -7218,11 +7222,11 @@ qla24xx_nvram_config(scsi_qla_host_t *vha)
|
||||
ha->flags.disable_risc_code_load = 0;
|
||||
ha->flags.enable_lip_reset = 0;
|
||||
ha->flags.enable_lip_full_login =
|
||||
le32_to_cpu(nv->host_p) & BIT_10 ? 1: 0;
|
||||
le32_to_cpu(nv->host_p) & BIT_10 ? 1 : 0;
|
||||
ha->flags.enable_target_reset =
|
||||
le32_to_cpu(nv->host_p) & BIT_11 ? 1: 0;
|
||||
le32_to_cpu(nv->host_p) & BIT_11 ? 1 : 0;
|
||||
ha->flags.enable_led_scheme = 0;
|
||||
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0;
|
||||
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1 : 0;
|
||||
|
||||
ha->operating_mode = (le32_to_cpu(icb->firmware_options_2) &
|
||||
(BIT_6 | BIT_5 | BIT_4)) >> 4;
|
||||
@@ -7296,7 +7300,7 @@ qla24xx_nvram_config(scsi_qla_host_t *vha)
|
||||
ha->zio_mode = le32_to_cpu(icb->firmware_options_2) &
|
||||
(BIT_3 | BIT_2 | BIT_1 | BIT_0);
|
||||
ha->zio_timer = le16_to_cpu(icb->interrupt_delay_timer) ?
|
||||
le16_to_cpu(icb->interrupt_delay_timer): 2;
|
||||
le16_to_cpu(icb->interrupt_delay_timer) : 2;
|
||||
}
|
||||
icb->firmware_options_2 &= cpu_to_le32(
|
||||
~(BIT_3 | BIT_2 | BIT_1 | BIT_0));
|
||||
@@ -8210,6 +8214,7 @@ void
|
||||
qla84xx_put_chip(struct scsi_qla_host *vha)
|
||||
{
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
if (ha->cs84xx)
|
||||
kref_put(&ha->cs84xx->kref, __qla84xx_chip_release);
|
||||
}
|
||||
@@ -8227,7 +8232,7 @@ qla84xx_init_chip(scsi_qla_host_t *vha)
|
||||
|
||||
mutex_unlock(&ha->cs84xx->fw_update_mutex);
|
||||
|
||||
return rval != QLA_SUCCESS || status[0] ? QLA_FUNCTION_FAILED:
|
||||
return rval != QLA_SUCCESS || status[0] ? QLA_FUNCTION_FAILED :
|
||||
QLA_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -8423,11 +8428,11 @@ qla81xx_nvram_config(scsi_qla_host_t *vha)
|
||||
ha->flags.disable_risc_code_load = 0;
|
||||
ha->flags.enable_lip_reset = 0;
|
||||
ha->flags.enable_lip_full_login =
|
||||
le32_to_cpu(nv->host_p) & BIT_10 ? 1: 0;
|
||||
le32_to_cpu(nv->host_p) & BIT_10 ? 1 : 0;
|
||||
ha->flags.enable_target_reset =
|
||||
le32_to_cpu(nv->host_p) & BIT_11 ? 1: 0;
|
||||
le32_to_cpu(nv->host_p) & BIT_11 ? 1 : 0;
|
||||
ha->flags.enable_led_scheme = 0;
|
||||
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0;
|
||||
ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1 : 0;
|
||||
|
||||
ha->operating_mode = (le32_to_cpu(icb->firmware_options_2) &
|
||||
(BIT_6 | BIT_5 | BIT_4)) >> 4;
|
||||
@@ -8500,7 +8505,7 @@ qla81xx_nvram_config(scsi_qla_host_t *vha)
|
||||
ha->zio_mode = le32_to_cpu(icb->firmware_options_2) &
|
||||
(BIT_3 | BIT_2 | BIT_1 | BIT_0);
|
||||
ha->zio_timer = le16_to_cpu(icb->interrupt_delay_timer) ?
|
||||
le16_to_cpu(icb->interrupt_delay_timer): 2;
|
||||
le16_to_cpu(icb->interrupt_delay_timer) : 2;
|
||||
}
|
||||
icb->firmware_options_2 &= cpu_to_le32(
|
||||
~(BIT_3 | BIT_2 | BIT_1 | BIT_0));
|
||||
|
||||
@@ -1086,6 +1086,7 @@ qla24xx_walk_and_build_prot_sglist(struct qla_hw_data *ha, srb_t *sp,
|
||||
|
||||
if (sp) {
|
||||
struct scsi_cmnd *cmd = GET_CMD_SP(sp);
|
||||
|
||||
sgl = scsi_prot_sglist(cmd);
|
||||
vha = sp->vha;
|
||||
difctx = sp->u.scmd.ctx;
|
||||
@@ -1489,18 +1490,18 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
|
||||
switch (scsi_get_prot_op(GET_CMD_SP(sp))) {
|
||||
case SCSI_PROT_READ_INSERT:
|
||||
case SCSI_PROT_WRITE_STRIP:
|
||||
total_bytes = data_bytes;
|
||||
data_bytes += dif_bytes;
|
||||
break;
|
||||
total_bytes = data_bytes;
|
||||
data_bytes += dif_bytes;
|
||||
break;
|
||||
|
||||
case SCSI_PROT_READ_STRIP:
|
||||
case SCSI_PROT_WRITE_INSERT:
|
||||
case SCSI_PROT_READ_PASS:
|
||||
case SCSI_PROT_WRITE_PASS:
|
||||
total_bytes = data_bytes + dif_bytes;
|
||||
break;
|
||||
total_bytes = data_bytes + dif_bytes;
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
BUG();
|
||||
}
|
||||
|
||||
if (!qla2x00_hba_err_chk_enabled(sp))
|
||||
@@ -2468,7 +2469,7 @@ qla2x00_logout_iocb(srb_t *sp, struct mbx_entry *mbx)
|
||||
SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id);
|
||||
mbx->mb0 = cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
|
||||
mbx->mb1 = HAS_EXTENDED_IDS(ha) ?
|
||||
cpu_to_le16(sp->fcport->loop_id):
|
||||
cpu_to_le16(sp->fcport->loop_id) :
|
||||
cpu_to_le16(sp->fcport->loop_id << 8);
|
||||
mbx->mb2 = cpu_to_le16(sp->fcport->d_id.b.domain);
|
||||
mbx->mb3 = cpu_to_le16(sp->fcport->d_id.b.area << 8 |
|
||||
@@ -3348,6 +3349,7 @@ sufficient_dsds:
|
||||
cmd_pkt->entry_status = (uint8_t) rsp->id;
|
||||
} else {
|
||||
struct cmd_type_7 *cmd_pkt;
|
||||
|
||||
req_cnt = qla24xx_calc_iocbs(vha, tot_dsds);
|
||||
if (req->cnt < (req_cnt + 2)) {
|
||||
cnt = (uint16_t)RD_REG_DWORD_RELAXED(
|
||||
|
||||
@@ -860,6 +860,7 @@ skip_rio:
|
||||
if (ha->flags.fawwpn_enabled &&
|
||||
(ha->current_topology == ISP_CFG_F)) {
|
||||
void *wwpn = ha->init_cb->port_name;
|
||||
|
||||
memcpy(vha->port_name, wwpn, WWN_SIZE);
|
||||
fc_host_port_name(vha->host) =
|
||||
wwn_to_u64(vha->port_name);
|
||||
@@ -1622,8 +1623,8 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
|
||||
}
|
||||
|
||||
comp_status = fw_status[0] = le16_to_cpu(pkt->comp_status);
|
||||
fw_status[1] = le16_to_cpu(((struct els_sts_entry_24xx*)pkt)->error_subcode_1);
|
||||
fw_status[2] = le16_to_cpu(((struct els_sts_entry_24xx*)pkt)->error_subcode_2);
|
||||
fw_status[1] = le16_to_cpu(((struct els_sts_entry_24xx *)pkt)->error_subcode_1);
|
||||
fw_status[2] = le16_to_cpu(((struct els_sts_entry_24xx *)pkt)->error_subcode_2);
|
||||
|
||||
if (iocb_type == ELS_IOCB_TYPE) {
|
||||
els = &sp->u.iocb_cmd;
|
||||
@@ -2282,6 +2283,7 @@ qla25xx_process_bidir_status_iocb(scsi_qla_host_t *vha, void *pkt,
|
||||
struct fc_bsg_reply *bsg_reply;
|
||||
sts_entry_t *sts;
|
||||
struct sts_entry_24xx *sts24;
|
||||
|
||||
sts = (sts_entry_t *) pkt;
|
||||
sts24 = (struct sts_entry_24xx *) pkt;
|
||||
|
||||
@@ -3117,6 +3119,7 @@ process_err:
|
||||
/* Adjust ring index */
|
||||
if (IS_P3P_TYPE(ha)) {
|
||||
struct device_reg_82xx __iomem *reg = &ha->iobase->isp82;
|
||||
|
||||
WRT_REG_DWORD(®->rsp_q_out[0], rsp->ring_index);
|
||||
} else {
|
||||
WRT_REG_DWORD(rsp->rsp_q_out, rsp->ring_index);
|
||||
|
||||
@@ -2037,7 +2037,7 @@ qla2x00_get_port_database(scsi_qla_host_t *vha, fc_port_t *fcport, uint8_t opt)
|
||||
|
||||
/* Passback COS information. */
|
||||
fcport->supported_classes = (pd->options & BIT_4) ?
|
||||
FC_COS_CLASS2: FC_COS_CLASS3;
|
||||
FC_COS_CLASS2 : FC_COS_CLASS3;
|
||||
}
|
||||
|
||||
gpd_error_out:
|
||||
@@ -3281,7 +3281,7 @@ __qla24xx_issue_tmf(char *name, uint32_t type, struct fc_port *fcport,
|
||||
|
||||
/* Issue marker IOCB. */
|
||||
rval2 = qla2x00_marker(vha, ha->base_qpair, fcport->loop_id, l,
|
||||
type == TCF_LUN_RESET ? MK_SYNC_ID_LUN: MK_SYNC_ID);
|
||||
type == TCF_LUN_RESET ? MK_SYNC_ID_LUN : MK_SYNC_ID);
|
||||
if (rval2 != QLA_SUCCESS) {
|
||||
ql_dbg(ql_dbg_mbx, vha, 0x1099,
|
||||
"Failed to issue marker IOCB (%x).\n", rval2);
|
||||
@@ -5731,6 +5731,7 @@ qla8044_md_get_template(scsi_qla_host_t *vha)
|
||||
mbx_cmd_t *mcp = &mc;
|
||||
int rval = QLA_FUNCTION_FAILED;
|
||||
int offset = 0, size = MINIDUMP_SIZE_36K;
|
||||
|
||||
ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0xb11f,
|
||||
"Entered %s.\n", __func__);
|
||||
|
||||
|
||||
@@ -1322,6 +1322,7 @@ qlafx00_configure_devices(scsi_qla_host_t *vha)
|
||||
{
|
||||
int rval;
|
||||
unsigned long flags;
|
||||
|
||||
rval = QLA_SUCCESS;
|
||||
|
||||
flags = vha->dpc_flags;
|
||||
@@ -3317,6 +3318,7 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
|
||||
fx_iocb.flags = fxio->u.fxiocb.flags;
|
||||
} else {
|
||||
struct scatterlist *sg;
|
||||
|
||||
bsg_job = sp->u.bsg_job;
|
||||
bsg_request = bsg_job->request;
|
||||
piocb_rqst = (struct qla_mt_iocb_rqst_fx00 *)
|
||||
|
||||
+10
-14
@@ -360,6 +360,7 @@ static inline int qla2x00_start_nvme_mq(srb_t *sp)
|
||||
|
||||
if (unlikely(!fd->sqid)) {
|
||||
struct nvme_fc_cmd_iu *cmd = fd->cmdaddr;
|
||||
|
||||
if (cmd->sqe.common.opcode == nvme_admin_async_event) {
|
||||
nvme->u.nvme.aen_op = 1;
|
||||
atomic_inc(&ha->nvme_active_aen_cnt);
|
||||
@@ -627,7 +628,6 @@ static void qla_nvme_unregister_remote_port(struct work_struct *work)
|
||||
struct fc_port *fcport = container_of(work, struct fc_port,
|
||||
nvme_del_work);
|
||||
struct qla_nvme_rport *qla_rport, *trport;
|
||||
scsi_qla_host_t *base_vha;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_NVME_FC))
|
||||
return;
|
||||
@@ -635,25 +635,21 @@ static void qla_nvme_unregister_remote_port(struct work_struct *work)
|
||||
ql_log(ql_log_warn, NULL, 0x2112,
|
||||
"%s: unregister remoteport on %p\n",__func__, fcport);
|
||||
|
||||
base_vha = pci_get_drvdata(fcport->vha->hw->pdev);
|
||||
if (test_bit(PFLG_DRIVER_REMOVING, &base_vha->pci_flags)) {
|
||||
ql_dbg(ql_dbg_disc, fcport->vha, 0x2114,
|
||||
"%s: Notify FC-NVMe transport, set devloss=0\n",
|
||||
__func__);
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
|
||||
nvme_fc_set_remoteport_devloss(fcport->nvme_remote_port, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
list_for_each_entry_safe(qla_rport, trport,
|
||||
&fcport->vha->nvme_rport_list, list) {
|
||||
if (qla_rport->fcport == fcport) {
|
||||
ql_log(ql_log_info, fcport->vha, 0x2113,
|
||||
"%s: fcport=%p\n", __func__, fcport);
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
|
||||
nvme_fc_set_remoteport_devloss
|
||||
(fcport->nvme_remote_port, 0);
|
||||
#endif
|
||||
init_completion(&fcport->nvme_del_done);
|
||||
nvme_fc_unregister_remoteport(
|
||||
fcport->nvme_remote_port);
|
||||
if (nvme_fc_unregister_remoteport
|
||||
(fcport->nvme_remote_port))
|
||||
ql_log(ql_log_info, fcport->vha, 0x2114,
|
||||
"%s: Failed to unregister nvme_remote_port\n",
|
||||
__func__);
|
||||
wait_for_completion(&fcport->nvme_del_done);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -608,6 +608,7 @@ qla82xx_pci_set_window(struct qla_hw_data *ha, unsigned long long addr)
|
||||
} else if (addr_in_range(addr, QLA82XX_ADDR_OCM0,
|
||||
QLA82XX_ADDR_OCM0_MAX)) {
|
||||
unsigned int temp1;
|
||||
|
||||
if ((addr & 0x00ff800) == 0xff800) {
|
||||
ql_log(ql_log_warn, vha, 0xb004,
|
||||
"%s: QM access not handled.\n", __func__);
|
||||
@@ -990,6 +991,7 @@ static int
|
||||
qla82xx_read_status_reg(struct qla_hw_data *ha, uint32_t *val)
|
||||
{
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
qla82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_INSTR_OPCODE, M25P_INSTR_RDSR);
|
||||
qla82xx_wait_rom_busy(ha);
|
||||
if (qla82xx_wait_rom_done(ha)) {
|
||||
@@ -1030,6 +1032,7 @@ static int
|
||||
qla82xx_flash_set_write_enable(struct qla_hw_data *ha)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
qla82xx_wait_rom_busy(ha);
|
||||
qla82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_ABYTE_CNT, 0);
|
||||
qla82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_INSTR_OPCODE, M25P_INSTR_WREN);
|
||||
@@ -1047,6 +1050,7 @@ static int
|
||||
qla82xx_write_status_reg(struct qla_hw_data *ha, uint32_t val)
|
||||
{
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
if (qla82xx_flash_set_write_enable(ha))
|
||||
return -1;
|
||||
qla82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_WDATA, val);
|
||||
@@ -1063,6 +1067,7 @@ static int
|
||||
qla82xx_write_disable_flash(struct qla_hw_data *ha)
|
||||
{
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
qla82xx_wr_32(ha, QLA82XX_ROMUSB_ROM_INSTR_OPCODE, M25P_INSTR_WRDI);
|
||||
if (qla82xx_wait_rom_done(ha)) {
|
||||
ql_log(ql_log_warn, vha, 0xb00f,
|
||||
@@ -1435,6 +1440,7 @@ qla82xx_fw_load_from_flash(struct qla_hw_data *ha)
|
||||
long memaddr = BOOTLD_START;
|
||||
u64 data;
|
||||
u32 high, low;
|
||||
|
||||
size = (IMAGE_START - BOOTLD_START) / 8;
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
@@ -1761,6 +1767,7 @@ int
|
||||
qla82xx_reset_chip(scsi_qla_host_t *vha)
|
||||
{
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
ha->isp_ops->disable_intrs(ha);
|
||||
|
||||
return QLA_SUCCESS;
|
||||
@@ -1992,6 +1999,7 @@ qla82xx_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0)
|
||||
uint16_t __iomem *wptr;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
struct device_reg_82xx __iomem *reg = &ha->iobase->isp82;
|
||||
|
||||
wptr = (uint16_t __iomem *)®->mailbox_out[1];
|
||||
|
||||
/* Load return mailbox registers. */
|
||||
@@ -2262,6 +2270,7 @@ void
|
||||
qla82xx_enable_intrs(struct qla_hw_data *ha)
|
||||
{
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
qla82xx_mbx_intr_enable(vha);
|
||||
spin_lock_irq(&ha->hardware_lock);
|
||||
if (IS_QLA8044(ha))
|
||||
@@ -2276,6 +2285,7 @@ void
|
||||
qla82xx_disable_intrs(struct qla_hw_data *ha)
|
||||
{
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
qla82xx_mbx_intr_disable(vha);
|
||||
spin_lock_irq(&ha->hardware_lock);
|
||||
if (IS_QLA8044(ha))
|
||||
@@ -4463,6 +4473,7 @@ qla82xx_beacon_on(struct scsi_qla_host *vha)
|
||||
|
||||
int rval;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
qla82xx_idc_lock(ha);
|
||||
rval = qla82xx_mbx_beacon_ctl(vha, 1);
|
||||
|
||||
@@ -4483,6 +4494,7 @@ qla82xx_beacon_off(struct scsi_qla_host *vha)
|
||||
|
||||
int rval;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
qla82xx_idc_lock(ha);
|
||||
rval = qla82xx_mbx_beacon_ctl(vha, 0);
|
||||
|
||||
|
||||
@@ -3007,10 +3007,9 @@ qla8044_minidump_process_rddfe(struct scsi_qla_host *vha,
|
||||
uint16_t count;
|
||||
uint32_t poll, mask, modify_mask;
|
||||
uint32_t wait_count = 0;
|
||||
|
||||
uint32_t *data_ptr = *d_ptr;
|
||||
|
||||
struct qla8044_minidump_entry_rddfe *rddfe;
|
||||
|
||||
rddfe = (struct qla8044_minidump_entry_rddfe *) entry_hdr;
|
||||
|
||||
addr1 = rddfe->addr_1;
|
||||
|
||||
+48
-70
@@ -121,7 +121,7 @@ MODULE_PARM_DESC(ql2xshiftctondsd,
|
||||
"Set to control shifting of command type processing "
|
||||
"based on total number of SG elements.");
|
||||
|
||||
int ql2xfdmienable=1;
|
||||
int ql2xfdmienable = 1;
|
||||
module_param(ql2xfdmienable, int, S_IRUGO|S_IWUSR);
|
||||
module_param_named(fdmi, ql2xfdmienable, int, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(ql2xfdmienable,
|
||||
@@ -167,7 +167,7 @@ MODULE_PARM_DESC(ql2xenablehba_err_chk,
|
||||
" 1 -- Error isolation enabled only for DIX Type 0\n"
|
||||
" 2 -- Error isolation enabled for all Types\n");
|
||||
|
||||
int ql2xiidmaenable=1;
|
||||
int ql2xiidmaenable = 1;
|
||||
module_param(ql2xiidmaenable, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(ql2xiidmaenable,
|
||||
"Enables iIDMA settings "
|
||||
@@ -324,31 +324,6 @@ MODULE_PARM_DESC(ql2xdifbundlinginternalbuffers,
|
||||
"0 (Default). Based on check.\n"
|
||||
"1 Force using internal buffers\n");
|
||||
|
||||
/*
|
||||
* SCSI host template entry points
|
||||
*/
|
||||
static int qla2xxx_slave_configure(struct scsi_device * device);
|
||||
static int qla2xxx_slave_alloc(struct scsi_device *);
|
||||
static int qla2xxx_scan_finished(struct Scsi_Host *, unsigned long time);
|
||||
static void qla2xxx_scan_start(struct Scsi_Host *);
|
||||
static void qla2xxx_slave_destroy(struct scsi_device *);
|
||||
#if defined(RHEL_MAJOR) && RHEL_MAJOR -0 == 6 && RHEL_MINOR -0 >= 2
|
||||
static int qla2xxx_queuecommand(struct scsi_cmnd *scmnd,
|
||||
void (*done)(struct scsi_cmnd *));
|
||||
|
||||
#else
|
||||
static int qla2xxx_queuecommand(struct Scsi_Host *h, struct scsi_cmnd *cmd);
|
||||
#endif
|
||||
static int qla2xxx_eh_abort(struct scsi_cmnd *);
|
||||
static int qla2xxx_eh_device_reset(struct scsi_cmnd *);
|
||||
static int qla2xxx_eh_target_reset(struct scsi_cmnd *);
|
||||
static int qla2xxx_eh_bus_reset(struct scsi_cmnd *);
|
||||
static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
static int
|
||||
qla2x00_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason);
|
||||
#endif
|
||||
static void qla2x00_clear_drv_active(struct qla_hw_data *);
|
||||
static void qla2x00_free_device(scsi_qla_host_t *);
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
|
||||
@@ -357,47 +332,6 @@ static int qla2xxx_map_queues(struct Scsi_Host *shost);
|
||||
static void qla2x00_destroy_deferred_work(struct qla_hw_data *);
|
||||
|
||||
|
||||
struct scsi_host_template qla2xxx_driver_template = {
|
||||
.module = THIS_MODULE,
|
||||
.name = QLA2XXX_DRIVER_NAME,
|
||||
.queuecommand = qla2xxx_queuecommand,
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
.eh_timed_out = fc_eh_timed_out,
|
||||
#endif
|
||||
.eh_abort_handler = qla2xxx_eh_abort,
|
||||
.eh_device_reset_handler = qla2xxx_eh_device_reset,
|
||||
.eh_target_reset_handler = qla2xxx_eh_target_reset,
|
||||
.eh_bus_reset_handler = qla2xxx_eh_bus_reset,
|
||||
.eh_host_reset_handler = qla2xxx_eh_host_reset,
|
||||
|
||||
.slave_configure = qla2xxx_slave_configure,
|
||||
|
||||
.slave_alloc = qla2xxx_slave_alloc,
|
||||
.slave_destroy = qla2xxx_slave_destroy,
|
||||
.scan_finished = qla2xxx_scan_finished,
|
||||
.scan_start = qla2xxx_scan_start,
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
.change_queue_depth = qla2x00_change_queue_depth,
|
||||
#else
|
||||
.change_queue_depth = scsi_change_queue_depth,
|
||||
#endif
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
|
||||
.map_queues = qla2xxx_map_queues,
|
||||
#endif
|
||||
.this_id = -1,
|
||||
.cmd_per_lun = 3,
|
||||
.sg_tablesize = SG_ALL,
|
||||
|
||||
.max_sectors = 0xFFFF,
|
||||
.shost_attrs = qla2x00_host_attrs,
|
||||
|
||||
.supported_mode = MODE_INITIATOR,
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
.track_queue_depth = 1,
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct scsi_transport_template *qla2xxx_transport_template = NULL;
|
||||
struct scsi_transport_template *qla2xxx_transport_vport_template = NULL;
|
||||
|
||||
@@ -451,6 +385,7 @@ static void qla_init_base_qpair(struct scsi_qla_host *vha, struct req_que *req,
|
||||
struct rsp_que *rsp)
|
||||
{
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
rsp->qpair = ha->base_qpair;
|
||||
rsp->req = req;
|
||||
ha->base_qpair->hw = ha;
|
||||
@@ -475,6 +410,7 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req,
|
||||
struct rsp_que *rsp)
|
||||
{
|
||||
scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
ha->req_q_map = kcalloc(ha->max_req_queues, sizeof(struct req_que *),
|
||||
GFP_KERNEL);
|
||||
if (!ha->req_q_map) {
|
||||
@@ -3484,6 +3420,7 @@ skip_dpc:
|
||||
if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) {
|
||||
if (ha->fw_attributes & BIT_4) {
|
||||
int prot = 0, guard;
|
||||
|
||||
base_vha->flags.difdix_supported = 1;
|
||||
ql_dbg(ql_dbg_init, base_vha, 0x00f1,
|
||||
"Registering for DIF/DIX type 1 and 3 protection.\n");
|
||||
@@ -3976,6 +3913,7 @@ qla2x00_schedule_rport_del(struct scsi_qla_host *vha, fc_port_t *fcport,
|
||||
qla2xxx_wake_dpc(base_vha);
|
||||
} else {
|
||||
int now;
|
||||
|
||||
if (rport) {
|
||||
ql_dbg(ql_dbg_disc, fcport->vha, 0x2109,
|
||||
"%s %8phN. rport %p roles %x\n",
|
||||
@@ -5735,6 +5673,7 @@ qla83xx_force_lock_recovery(scsi_qla_host_t *base_vha)
|
||||
uint32_t idc_lck_rcvry_stage_mask = 0x3;
|
||||
uint32_t idc_lck_rcvry_owner_mask = 0x3c;
|
||||
struct qla_hw_data *ha = base_vha->hw;
|
||||
|
||||
ql_dbg(ql_dbg_p3p, base_vha, 0xb086,
|
||||
"Trying force recovery of the IDC lock.\n");
|
||||
|
||||
@@ -6213,8 +6152,6 @@ qla2x00_disable_board_on_pci_error(struct work_struct *work)
|
||||
|
||||
qla2x00_delete_all_vps(ha, base_vha);
|
||||
|
||||
qla2x00_abort_all_cmds(base_vha, DID_NO_CONNECT << 16);
|
||||
|
||||
qla2x00_dfs_remove(base_vha);
|
||||
|
||||
qla84xx_put_chip(base_vha);
|
||||
@@ -7352,6 +7289,47 @@ static int qla2xxx_map_queues(struct Scsi_Host *shost)
|
||||
}
|
||||
#endif
|
||||
|
||||
struct scsi_host_template qla2xxx_driver_template = {
|
||||
.module = THIS_MODULE,
|
||||
.name = QLA2XXX_DRIVER_NAME,
|
||||
.queuecommand = qla2xxx_queuecommand,
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
.eh_timed_out = fc_eh_timed_out,
|
||||
#endif
|
||||
.eh_abort_handler = qla2xxx_eh_abort,
|
||||
.eh_device_reset_handler = qla2xxx_eh_device_reset,
|
||||
.eh_target_reset_handler = qla2xxx_eh_target_reset,
|
||||
.eh_bus_reset_handler = qla2xxx_eh_bus_reset,
|
||||
.eh_host_reset_handler = qla2xxx_eh_host_reset,
|
||||
|
||||
.slave_configure = qla2xxx_slave_configure,
|
||||
|
||||
.slave_alloc = qla2xxx_slave_alloc,
|
||||
.slave_destroy = qla2xxx_slave_destroy,
|
||||
.scan_finished = qla2xxx_scan_finished,
|
||||
.scan_start = qla2xxx_scan_start,
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
|
||||
.change_queue_depth = qla2x00_change_queue_depth,
|
||||
#else
|
||||
.change_queue_depth = scsi_change_queue_depth,
|
||||
#endif
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
|
||||
.map_queues = qla2xxx_map_queues,
|
||||
#endif
|
||||
.this_id = -1,
|
||||
.cmd_per_lun = 3,
|
||||
.sg_tablesize = SG_ALL,
|
||||
|
||||
.max_sectors = 0xFFFF,
|
||||
.shost_attrs = qla2x00_host_attrs,
|
||||
|
||||
.supported_mode = MODE_INITIATOR,
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
.track_queue_depth = 1,
|
||||
#endif
|
||||
};
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0) && \
|
||||
LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)
|
||||
static void qla_pci_reset_notify(struct pci_dev *dev, bool prepare)
|
||||
|
||||
@@ -987,7 +987,7 @@ qla2xxx_get_fdt_info(scsi_qla_host_t *vha)
|
||||
ha->fdt_unprotect_sec_cmd = flash_conf_addr(ha, 0x0300 |
|
||||
fdt->unprotect_sec_cmd);
|
||||
ha->fdt_protect_sec_cmd = fdt->protect_sec_cmd ?
|
||||
flash_conf_addr(ha, 0x0300 | fdt->protect_sec_cmd):
|
||||
flash_conf_addr(ha, 0x0300 | fdt->protect_sec_cmd) :
|
||||
flash_conf_addr(ha, 0x0336);
|
||||
}
|
||||
goto done;
|
||||
|
||||
@@ -197,6 +197,7 @@ static inline int qlt_issue_marker(struct scsi_qla_host *vha, int vha_locked)
|
||||
/* Send marker if required */
|
||||
if (unlikely(vha->marker_needed != 0)) {
|
||||
int rc = qla2x00_issue_marker(vha, vha_locked);
|
||||
|
||||
if (rc != QLA_SUCCESS) {
|
||||
ql_dbg(ql_dbg_tgt, vha, 0xe03d,
|
||||
"qla_target(%d): issue_marker() failed\n",
|
||||
@@ -570,6 +571,7 @@ static int qla24xx_post_nack_work(struct scsi_qla_host *vha, fc_port_t *fcport,
|
||||
struct imm_ntfy_from_isp *ntfy, int type)
|
||||
{
|
||||
struct qla_work_evt *e;
|
||||
|
||||
e = qla2x00_alloc_work(vha, QLA_EVT_NACK);
|
||||
if (!e)
|
||||
return QLA_FUNCTION_FAILED;
|
||||
@@ -711,7 +713,7 @@ void qla24xx_do_nack_work(struct scsi_qla_host *vha, struct qla_work_evt *e)
|
||||
break;
|
||||
}
|
||||
qla24xx_async_notify_ack(vha, e->u.nack.fcport,
|
||||
(struct imm_ntfy_from_isp*)e->u.nack.iocb, e->u.nack.type);
|
||||
(struct imm_ntfy_from_isp *)e->u.nack.iocb, e->u.nack.type);
|
||||
}
|
||||
|
||||
void qla24xx_delete_sess_fn(struct work_struct *work)
|
||||
@@ -1334,6 +1336,7 @@ static int qla24xx_get_loop_id(struct scsi_qla_host *vha, const uint8_t *s_id,
|
||||
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])) {
|
||||
@@ -2504,6 +2507,7 @@ static void qlt_unmap_sg(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd)
|
||||
{
|
||||
struct qla_hw_data *ha;
|
||||
struct qla_qpair *qpair;
|
||||
|
||||
if (!cmd->sg_mapped)
|
||||
return;
|
||||
|
||||
@@ -3915,6 +3919,7 @@ static int qlt_term_ctio_exchange(struct qla_qpair *qpair, void *ctio,
|
||||
|
||||
if (ctio != NULL) {
|
||||
struct ctio7_from_24xx *c = (struct ctio7_from_24xx *)ctio;
|
||||
|
||||
term = !(c->flags &
|
||||
cpu_to_le16(OF_TERM_EXCH));
|
||||
} else
|
||||
@@ -4033,7 +4038,7 @@ static void qlt_do_ctio_completion(struct scsi_qla_host *vha,
|
||||
return;
|
||||
}
|
||||
|
||||
cmd = (struct qla_tgt_cmd *)qlt_ctio_to_cmd(vha, rsp, handle, ctio);
|
||||
cmd = qlt_ctio_to_cmd(vha, rsp, handle, ctio);
|
||||
if (cmd == NULL)
|
||||
return;
|
||||
|
||||
@@ -4783,6 +4788,7 @@ static int abort_cmds_for_s_id(struct scsi_qla_host *vha, port_id_t *s_id)
|
||||
|
||||
list_for_each_entry(op, &vha->unknown_atio_list, cmd_list) {
|
||||
uint32_t op_key = sid_to_key(op->atio.u.isp24.fcp_hdr.s_id);
|
||||
|
||||
if (op_key == key) {
|
||||
op->aborted = true;
|
||||
count++;
|
||||
@@ -4791,6 +4797,7 @@ static int abort_cmds_for_s_id(struct scsi_qla_host *vha, port_id_t *s_id)
|
||||
|
||||
list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) {
|
||||
uint32_t cmd_key = sid_to_key(cmd->atio.u.isp24.fcp_hdr.s_id);
|
||||
|
||||
if (cmd_key == key) {
|
||||
cmd->aborted = 1;
|
||||
count++;
|
||||
@@ -5067,6 +5074,7 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha,
|
||||
if (sess != NULL) {
|
||||
bool delete = false;
|
||||
int sec;
|
||||
|
||||
spin_lock_irqsave(&tgt->ha->tgt.sess_lock, flags);
|
||||
switch (sess->fw_login_state) {
|
||||
case DSC_LS_PLOGI_PEND:
|
||||
@@ -5219,6 +5227,7 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha,
|
||||
case ELS_ADISC:
|
||||
{
|
||||
struct qla_tgt *tgt = vha->vha_tgt.qla_tgt;
|
||||
|
||||
if (tgt->link_reinit_iocb_pending) {
|
||||
qlt_send_notify_ack(ha->base_qpair,
|
||||
&tgt->link_reinit_iocb, 0, 0, 0, 0, 0, 0);
|
||||
@@ -5284,6 +5293,7 @@ static void qlt_handle_imm_notify(struct scsi_qla_host *vha,
|
||||
case IMM_NTFY_LIP_LINK_REINIT:
|
||||
{
|
||||
struct qla_tgt *tgt = vha->vha_tgt.qla_tgt;
|
||||
|
||||
ql_dbg(ql_dbg_tgt_mgt, vha, 0xf033,
|
||||
"qla_target(%d): LINK REINIT (loop %#x, "
|
||||
"subcode %x)\n", vha->vp_idx,
|
||||
@@ -5829,8 +5839,7 @@ static void qlt_handle_abts_completion(struct scsi_qla_host *vha,
|
||||
struct qla_tgt_mgmt_cmd *mcmd;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
mcmd = (struct qla_tgt_mgmt_cmd *)qlt_ctio_to_cmd(vha, rsp,
|
||||
pkt->handle, pkt);
|
||||
mcmd = qlt_ctio_to_cmd(vha, rsp, pkt->handle, pkt);
|
||||
if (mcmd == NULL && h != QLA_TGT_SKIP_HANDLE) {
|
||||
ql_dbg(ql_dbg_async, vha, 0xe064,
|
||||
"qla_target(%d): ABTS Comp without mcmd\n",
|
||||
@@ -5892,6 +5901,7 @@ static void qlt_response_pkt(struct scsi_qla_host *vha,
|
||||
case CTIO_TYPE7:
|
||||
{
|
||||
struct ctio7_from_24xx *entry = (struct ctio7_from_24xx *)pkt;
|
||||
|
||||
qlt_do_ctio_completion(vha, rsp, entry->handle,
|
||||
le16_to_cpu(entry->status)|(pkt->entry_status << 16),
|
||||
entry);
|
||||
@@ -5902,6 +5912,7 @@ static void qlt_response_pkt(struct scsi_qla_host *vha,
|
||||
{
|
||||
struct atio_from_isp *atio = (struct atio_from_isp *)pkt;
|
||||
int rc;
|
||||
|
||||
if (atio->u.isp2x.status !=
|
||||
cpu_to_le16(ATIO_CDB_VALID)) {
|
||||
ql_dbg(ql_dbg_tgt, vha, 0xe05e,
|
||||
@@ -5950,6 +5961,7 @@ static void qlt_response_pkt(struct scsi_qla_host *vha,
|
||||
case CONTINUE_TGT_IO_TYPE:
|
||||
{
|
||||
struct ctio_to_2xxx *entry = (struct ctio_to_2xxx *)pkt;
|
||||
|
||||
qlt_do_ctio_completion(vha, rsp, entry->handle,
|
||||
le16_to_cpu(entry->status)|(pkt->entry_status << 16),
|
||||
entry);
|
||||
@@ -5959,6 +5971,7 @@ static void qlt_response_pkt(struct scsi_qla_host *vha,
|
||||
case CTIO_A64_TYPE:
|
||||
{
|
||||
struct ctio_to_2xxx *entry = (struct ctio_to_2xxx *)pkt;
|
||||
|
||||
qlt_do_ctio_completion(vha, rsp, entry->handle,
|
||||
le16_to_cpu(entry->status)|(pkt->entry_status << 16),
|
||||
entry);
|
||||
@@ -5973,6 +5986,7 @@ static void qlt_response_pkt(struct scsi_qla_host *vha,
|
||||
case NOTIFY_ACK_TYPE:
|
||||
if (tgt->notify_ack_expected > 0) {
|
||||
struct nack_to_isp *entry = (struct nack_to_isp *)pkt;
|
||||
|
||||
ql_dbg(ql_dbg_tgt, vha, 0xe036,
|
||||
"NOTIFY_ACK seq %08x status %x\n",
|
||||
le16_to_cpu(entry->u.isp2x.seq_id),
|
||||
@@ -6248,6 +6262,7 @@ retry:
|
||||
|
||||
if (rc == -ENOENT) {
|
||||
qlt_port_logo_t logo;
|
||||
|
||||
sid_to_portid(s_id, &logo.id);
|
||||
logo.cmd_count = 1;
|
||||
qlt_send_first_logo(vha, &logo);
|
||||
@@ -6511,6 +6526,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha)
|
||||
unsigned long flags;
|
||||
|
||||
struct qla_qpair *qpair = ha->queue_pair_map[i];
|
||||
|
||||
h = &tgt->qphints[i + 1];
|
||||
INIT_LIST_HEAD(&h->hint_elem);
|
||||
if (qpair) {
|
||||
|
||||
@@ -884,7 +884,7 @@ enum trace_flags {
|
||||
TRC_CTIO_ERR = BIT_11,
|
||||
TRC_CTIO_DONE = BIT_12,
|
||||
TRC_CTIO_ABORTED = BIT_13,
|
||||
TRC_CTIO_STRANGE= BIT_14,
|
||||
TRC_CTIO_STRANGE = BIT_14,
|
||||
TRC_CMD_DONE = BIT_15,
|
||||
TRC_CMD_CHK_STOP = BIT_16,
|
||||
TRC_CMD_FREE = BIT_17,
|
||||
@@ -930,8 +930,6 @@ struct qla_tgt_cmd {
|
||||
unsigned int cmd_sent_to_fw:1;
|
||||
unsigned int cmd_in_wq:1;
|
||||
unsigned int aborted:1;
|
||||
unsigned int data_work:1;
|
||||
unsigned int data_work_free:1;
|
||||
unsigned int released:1;
|
||||
|
||||
struct scatterlist *sg; /* cmd data buffer SG vector */
|
||||
|
||||
Reference in New Issue
Block a user