@@ -322,6 +322,9 @@ qla_83xx_start_iocbs(struct qla_qpair *qpair)
{
struct req_que *req = qpair->req;
+ if (!qpair->vha->hw->flags.fw_started)
+ return;
+
req->ring_index++;
if (req->ring_index == req->length) {
req->ring_index = 0;
@@ -459,6 +459,9 @@ qla2x00_start_iocbs(struct scsi_qla_host *vha, struct req_que *req)
struct qla_hw_data *ha = vha->hw;
device_reg_t *reg = ISP_QUE_REG(ha, req->id);
+ if (!ha->flags.fw_started)
+ return;
+
if (IS_P3P_TYPE(ha)) {
qla82xx_start_iocbs(vha);
} else {
@@ -1603,6 +1606,9 @@ qla24xx_start_scsi(srb_t *sp)
struct scsi_qla_host *vha = sp->vha;
struct qla_hw_data *ha = vha->hw;
+ if (!ha->flags.fw_started)
+ return QLA_FUNCTION_FAILED;
+
/* Setup device pointers. */
req = vha->req;
@@ -1740,6 +1746,9 @@ qla24xx_dif_start_scsi(srb_t *sp)
#define QDSS_GOT_Q_SPACE BIT_0
+ if (!ha->flags.fw_started)
+ return QLA_FUNCTION_FAILED;
+
/* Only process protection or >16 cdb in this routine */
if (scsi_get_prot_op(cmd) == SCSI_PROT_NORMAL) {
if (cmd->cmd_len <= 16)
@@ -1921,6 +1930,9 @@ qla2xxx_start_scsi_mq(srb_t *sp)
struct qla_hw_data *ha = vha->hw;
struct qla_qpair *qpair = sp->qpair;
+ if (!ha->flags.fw_started)
+ return QLA_FUNCTION_FAILED;
+
/* Acquire qpair specific lock */
spin_lock_irqsave(&qpair->qp_lock, flags);
@@ -2062,6 +2074,11 @@ qla2xxx_dif_start_scsi_mq(srb_t *sp)
#define QDSS_GOT_Q_SPACE BIT_0
+ if (!ha->flags.fw_started) {
+ cmd->result = DID_NO_CONNECT << 16;
+ return QLA_FUNCTION_FAILED;
+ }
+
/* Check for host side state */
if (!qpair->online) {
cmd->result = DID_NO_CONNECT << 16;
@@ -3224,6 +3241,9 @@ qla82xx_start_scsi(srb_t *sp)
struct req_que *req = NULL;
struct rsp_que *rsp = NULL;
+ if (!ha->flags.fw_started)
+ return QLA_FUNCTION_FAILED;
+
/* Setup device pointers. */
reg = &ha->iobase->isp82;
cmd = GET_CMD_SP(sp);
@@ -3676,6 +3696,9 @@ qla2x00_start_sp(srb_t *sp)
void *pkt;
unsigned long flags;
+ if (!ha->flags.fw_started)
+ return QLA_FUNCTION_FAILED;
+
spin_lock_irqsave(qp->qp_lock_ptr, flags);
pkt = __qla2x00_alloc_iocbs(sp->qpair, sp);
if (!pkt) {
@@ -369,6 +369,9 @@ static inline int qla2x00_start_nvme_mq(srb_t *sp)
struct nvmefc_fcp_req *fd = nvme->u.nvme.desc;
uint32_t rval = QLA_SUCCESS;
+ if (!ha->flags.fw_started)
+ return QLA_FUNCTION_FAILED;
+
/* Setup qpair pointers */
req = qpair->req;
tot_dsds = fd->sg_cnt;