complete(&tmf->u.tmf.comp);
 }
 
-#define  START_SP_W_RETRIES(_sp, _rval) \
+#define  START_SP_W_RETRIES(_sp, _rval, _chip_gen, _login_gen) \
 {\
        int cnt = 5; \
        do { \
+               if (_chip_gen != sp->vha->hw->chip_reset || _login_gen != sp->fcport->login_gen) {\
+                       _rval = EINVAL; \
+                       break; \
+               } \
                _rval = qla2x00_start_sp(_sp); \
                if (_rval == EAGAIN) \
                        msleep(1); \
        srb_t *sp;
        int rval = QLA_FUNCTION_FAILED;
        fc_port_t *fcport = arg->fcport;
+       u32 chip_gen, login_gen;
 
        if (TMF_NOT_READY(arg->fcport)) {
                ql_dbg(ql_dbg_taskm, vha, 0x8039,
                return QLA_SUSPENDED;
        }
 
+       chip_gen = vha->hw->chip_reset;
+       login_gen = fcport->login_gen;
+
        /* ref: INIT */
        sp = qla2xxx_get_qpair_sp(vha, arg->qpair, fcport, GFP_KERNEL);
        if (!sp)
        tm_iocb->u.tmf.loop_id = fcport->loop_id;
        tm_iocb->u.tmf.vp_index = vha->vp_idx;
 
-       START_SP_W_RETRIES(sp, rval);
+       START_SP_W_RETRIES(sp, rval, chip_gen, login_gen);
 
        ql_dbg(ql_dbg_taskm, vha, 0x8006,
            "Async-marker hdl=%x loop-id=%x portid=%06x modifier=%x lun=%lld qp=%d rval %d.\n",
                return QLA_SUSPENDED;
        }
 
+       chip_gen = vha->hw->chip_reset;
+       login_gen = fcport->login_gen;
+
        /* ref: INIT */
        sp = qla2xxx_get_qpair_sp(vha, arg->qpair, fcport, GFP_KERNEL);
        if (!sp)
        tm_iocb->u.tmf.flags = arg->flags;
        tm_iocb->u.tmf.lun = arg->lun;
 
-       START_SP_W_RETRIES(sp, rval);
+       START_SP_W_RETRIES(sp, rval, chip_gen, login_gen);
 
        ql_dbg(ql_dbg_taskm, vha, 0x802f,
            "Async-tmf hdl=%x loop-id=%x portid=%06x ctrl=%x lun=%lld qp=%d rval=%x.\n",
        }
 
        if (!test_bit(UNLOADING, &vha->dpc_flags) && !IS_QLAFX00(vha->hw)) {
-               chip_gen = vha->hw->chip_reset;
-               login_gen = fcport->login_gen;
-
                jif = jiffies;
                if (qla_tmf_wait(arg)) {
                        ql_log(ql_log_info, vha, 0x803e,