Lines Matching refs:tgt
119 static void qlt_clear_tgt_db(struct qla_tgt *tgt);
201 host = btree_lookup32(&vha->hw->tgt.host_map, key); in qlt_find_host_by_d_id()
218 BUG_ON(ha->tgt.tgt_vp_map == NULL); in qlt_find_host_by_vp_idx()
220 return ha->tgt.tgt_vp_map[vp_idx].vha; in qlt_find_host_by_vp_idx()
229 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_incr_num_pend_cmds()
231 vha->hw->tgt.num_pend_cmds++; in qlt_incr_num_pend_cmds()
232 if (vha->hw->tgt.num_pend_cmds > vha->qla_stats.stat_max_pend_cmds) in qlt_incr_num_pend_cmds()
234 vha->hw->tgt.num_pend_cmds; in qlt_incr_num_pend_cmds()
235 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_incr_num_pend_cmds()
241 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_decr_num_pend_cmds()
242 vha->hw->tgt.num_pend_cmds--; in qlt_decr_num_pend_cmds()
243 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_decr_num_pend_cmds()
251 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_queue_unknown_atio() local
254 if (tgt->tgt_stop) { in qlt_queue_unknown_atio()
288 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_try_to_dequeue_unknown_atios() local
307 } else if (tgt->tgt_stop) { in qlt_try_to_dequeue_unknown_atios()
569 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla2x00_async_nack_sp_done()
592 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_async_nack_sp_done()
594 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla2x00_async_nack_sp_done()
610 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_async_nack_sp_done()
685 vha->hw->tgt.tgt_ops->put_sess(e->u.nack.fcport); in qla24xx_do_nack_work()
699 ha->tgt.tgt_ops->shutdown_sess(fcport); in qla24xx_delete_sess_fn()
700 ha->tgt.tgt_ops->put_sess(fcport); in qla24xx_delete_sess_fn()
712 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_added() local
716 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_added()
719 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
720 if (tgt->tgt_stop) { in qlt_fc_port_added()
721 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
726 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
731 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
737 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
740 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
748 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
760 ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, in qlt_fc_port_added()
772 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_fc_port_added()
774 ha->tgt.tgt_ops->put_sess(sess); in qlt_fc_port_added()
950 struct qla_tgt *tgt = sess->tgt; in qlt_free_session_done() local
1018 ha->tgt.tgt_ops->free_session(sess); in qlt_free_session_done()
1051 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_free_session_done()
1054 if (tgt && !IS_SW_RESV_ADDR(sess->d_id)) in qlt_free_session_done()
1055 tgt->sess_count--; in qlt_free_session_done()
1111 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_free_session_done()
1120 if (tgt && (tgt->sess_count == 0)) in qlt_free_session_done()
1121 wake_up_all(&tgt->waitQ); in qlt_free_session_done()
1125 (!tgt || !tgt->tgt_stop) && !LOOP_TRANSITION(vha)) { in qlt_free_session_done()
1167 vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess); in qlt_unreg_sess()
1191 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_reset()
1193 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_reset()
1195 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_reset()
1196 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_reset()
1197 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_reset()
1226 struct qla_tgt *tgt = sess->tgt; in qlt_schedule_sess_for_deletion() local
1236 if (tgt && tgt->tgt_stop && tgt->sess_count == 0) in qlt_schedule_sess_for_deletion()
1237 wake_up_all(&tgt->waitQ); in qlt_schedule_sess_for_deletion()
1283 static void qlt_clear_tgt_db(struct qla_tgt *tgt) in qlt_clear_tgt_db() argument
1286 scsi_qla_host_t *vha = tgt->vha; in qlt_clear_tgt_db()
1368 sess->tgt = vha->vha_tgt.qla_tgt; in qlt_create_sess()
1381 if (ha->tgt.tgt_ops->check_initiator_node_acl(vha, in qlt_create_sess()
1400 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_create_sess()
1405 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_create_sess()
1430 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_deleted() local
1434 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_deleted()
1437 if (!tgt) in qlt_fc_port_deleted()
1440 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1441 if (tgt->tgt_stop) { in qlt_fc_port_deleted()
1442 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1446 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1451 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1463 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1467 static inline int test_tgt_sess_count(struct qla_tgt *tgt) in test_tgt_sess_count() argument
1469 struct qla_hw_data *ha = tgt->ha; in test_tgt_sess_count()
1476 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in test_tgt_sess_count()
1477 ql_dbg(ql_dbg_tgt, tgt->vha, 0xe002, in test_tgt_sess_count()
1479 tgt, tgt->sess_count); in test_tgt_sess_count()
1480 res = (tgt->sess_count == 0); in test_tgt_sess_count()
1481 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in test_tgt_sess_count()
1487 int qlt_stop_phase1(struct qla_tgt *tgt) in qlt_stop_phase1() argument
1489 struct scsi_qla_host *vha = tgt->vha; in qlt_stop_phase1()
1490 struct qla_hw_data *ha = tgt->ha; in qlt_stop_phase1()
1496 if (tgt->tgt_stop || tgt->tgt_stopped) { in qlt_stop_phase1()
1511 tgt->tgt_stop = 1; in qlt_stop_phase1()
1512 qlt_clear_tgt_db(tgt); in qlt_stop_phase1()
1517 "Waiting for sess works (tgt %p)", tgt); in qlt_stop_phase1()
1518 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
1519 while (!list_empty(&tgt->sess_works_list)) { in qlt_stop_phase1()
1520 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
1522 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
1524 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
1527 "Waiting for tgt %p: sess_count=%d\n", tgt, tgt->sess_count); in qlt_stop_phase1()
1529 wait_event_timeout(tgt->waitQ, test_tgt_sess_count(tgt), 10*HZ); in qlt_stop_phase1()
1537 wait_event_timeout(tgt->waitQ, test_tgt_sess_count(tgt), 10*HZ); in qlt_stop_phase1()
1545 void qlt_stop_phase2(struct qla_tgt *tgt) in qlt_stop_phase2() argument
1547 scsi_qla_host_t *vha = tgt->vha; in qlt_stop_phase2()
1549 if (tgt->tgt_stopped) { in qlt_stop_phase2()
1555 if (!tgt->tgt_stop) { in qlt_stop_phase2()
1562 mutex_lock(&tgt->ha->optrom_mutex); in qlt_stop_phase2()
1564 tgt->tgt_stop = 0; in qlt_stop_phase2()
1565 tgt->tgt_stopped = 1; in qlt_stop_phase2()
1567 mutex_unlock(&tgt->ha->optrom_mutex); in qlt_stop_phase2()
1570 tgt); in qlt_stop_phase2()
1584 static void qlt_release(struct qla_tgt *tgt) in qlt_release() argument
1586 scsi_qla_host_t *vha = tgt->vha; in qlt_release()
1593 if (!tgt->tgt_stop && !tgt->tgt_stopped) in qlt_release()
1594 qlt_stop_phase1(tgt); in qlt_release()
1596 if (!tgt->tgt_stopped) in qlt_release()
1597 qlt_stop_phase2(tgt); in qlt_release()
1602 h = &tgt->qphints[i]; in qlt_release()
1610 kfree(tgt->qphints); in qlt_release()
1615 btree_for_each_safe64(&tgt->lun_qpair_map, key, node) in qlt_release()
1616 btree_remove64(&tgt->lun_qpair_map, key); in qlt_release()
1618 btree_destroy64(&tgt->lun_qpair_map); in qlt_release()
1621 if (ha->tgt.tgt_ops && in qlt_release()
1622 ha->tgt.tgt_ops->remove_target && in qlt_release()
1624 ha->tgt.tgt_ops->remove_target(vha); in qlt_release()
1629 "Release of tgt %p finished\n", tgt); in qlt_release()
1631 kfree(tgt); in qlt_release()
1635 static int qlt_sched_sess_work(struct qla_tgt *tgt, int type, in qlt_sched_sess_work() argument
1643 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xf050, in qlt_sched_sess_work()
1649 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xf00e, in qlt_sched_sess_work()
1652 type, prm, param, param_size, tgt); in qlt_sched_sess_work()
1657 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sched_sess_work()
1658 list_add_tail(&prm->sess_works_list_entry, &tgt->sess_works_list); in qlt_sched_sess_work()
1659 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sched_sess_work()
1661 schedule_work(&tgt->sess_work); in qlt_sched_sess_work()
2014 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_find_qphint() local
2018 h = btree_lookup64(&tgt->lun_qpair_map, unpacked_lun); in qlt_find_qphint()
2020 h = &tgt->qphints[0]; in qlt_find_qphint()
2022 h = &tgt->qphints[0]; in qlt_find_qphint()
2046 rc = ha->tgt.tgt_ops->handle_tmr(mcmd, mcmd->unpacked_lun, in qlt_do_tmr_work()
2115 if (ha->tgt.tgt_ops->find_cmd_by_tag) { in __qlt_24xx_handle_abts()
2118 abort_cmd = ha->tgt.tgt_ops->find_cmd_by_tag(sess, in __qlt_24xx_handle_abts()
2173 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_24xx_handle_abts()
2174 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_24xx_handle_abts()
2179 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_24xx_handle_abts()
2185 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_24xx_handle_abts()
2353 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_xmit_tm_rsp()
2391 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_xmit_tm_rsp()
2743 prm->tgt = cmd->tgt; in qlt_pre_xmit_response()
2921 scsi_qla_host_t *vha = cmd->tgt->vha; in qla_tgt_set_dif_tags()
2942 t32 = ha->tgt.tgt_ops->get_dif_tags(cmd, pfw_prot_opts); in qla_tgt_set_dif_tags()
2965 !(ha->tgt.tgt_ops->chk_dif_tags(t32))) { in qla_tgt_set_dif_tags()
2982 !(ha->tgt.tgt_ops->chk_dif_tags(t32))) { in qla_tgt_set_dif_tags()
3371 struct qla_tgt *tgt = cmd->tgt; in qlt_rdy_to_xfer() local
3379 prm.tgt = tgt; in qlt_rdy_to_xfer()
3392 vha->hw->tgt.tgt_ops->handle_data(cmd); in qlt_rdy_to_xfer()
3531 vha->hw->tgt.tgt_ops->handle_data(cmd); in qlt_handle_dif_error()
3537 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_handle_dif_error()
3547 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_handle_dif_error()
3706 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_send_term_exchange()
3720 vha->hw->tgt.leak_exchg_thresh_hold = in qlt_init_term_exchange()
3724 if (!list_empty(&vha->hw->tgt.q_full_list)) { in qlt_init_term_exchange()
3726 list_splice_init(&vha->hw->tgt.q_full_list, &free_list); in qlt_init_term_exchange()
3734 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_init_term_exchange()
3737 vha->hw->tgt.num_qfull_cmds_dropped = 0; in qlt_init_term_exchange()
3744 total_leaked = vha->hw->tgt.num_qfull_cmds_dropped; in qlt_chk_exch_leak_thresh_hold()
3746 if (vha->hw->tgt.leak_exchg_thresh_hold && in qlt_chk_exch_leak_thresh_hold()
3747 (total_leaked > vha->hw->tgt.leak_exchg_thresh_hold)) { in qlt_chk_exch_leak_thresh_hold()
3764 struct qla_tgt *tgt = cmd->tgt; in qlt_abort_cmd() local
3765 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_cmd()
3824 cmd->vha->hw->tgt.tgt_ops->rel_cmd(cmd); in qlt_free_cmd()
4039 ha->tgt.tgt_ops->handle_data(cmd); in qlt_do_ctio_completion()
4058 ha->tgt.tgt_ops->free_cmd(cmd); in qlt_do_ctio_completion()
4137 ret = ha->tgt.tgt_ops->handle_cmd(vha, cmd, cdb, data_length, in __qlt_do_work()
4144 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
4158 cmd->vha->hw->tgt.tgt_ops->rel_cmd(cmd); in __qlt_do_work()
4161 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
4181 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_clr_qp_table() local
4187 ha->tgt.num_act_qpairs); in qlt_clr_qp_table()
4189 spin_lock_irqsave(&ha->tgt.atio_lock, flags); in qlt_clr_qp_table()
4191 btree_for_each_safe64(&tgt->lun_qpair_map, key, node) in qlt_clr_qp_table()
4192 btree_remove64(&tgt->lun_qpair_map, key); in qlt_clr_qp_table()
4199 spin_unlock_irqrestore(&ha->tgt.atio_lock, flags); in qlt_clr_qp_table()
4206 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_assign_qpair() local
4210 h = btree_lookup64(&tgt->lun_qpair_map, cmd->unpacked_lun); in qlt_assign_qpair()
4220 h = qla_qpair_to_hint(tgt, qpair); in qlt_assign_qpair()
4222 rc = btree_insert64(&tgt->lun_qpair_map, in qlt_assign_qpair()
4240 h = qla_qpair_to_hint(tgt, qp); in qlt_assign_qpair()
4242 rc = btree_insert64(&tgt->lun_qpair_map, in qlt_assign_qpair()
4262 h = qla_qpair_to_hint(tgt, qpair); in qlt_assign_qpair()
4264 rc = btree_insert64(&tgt->lun_qpair_map, in qlt_assign_qpair()
4274 h = &tgt->qphints[0]; in qlt_assign_qpair()
4287 cmd = vha->hw->tgt.tgt_ops->get_cmd(sess); in qlt_get_tag()
4294 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_get_tag()
4318 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_cmd_for_atio() local
4324 if (unlikely(tgt->tgt_stop)) { in qlt_handle_cmd_for_atio()
4326 "New command while device %p is shutting down\n", tgt); in qlt_handle_cmd_for_atio()
4334 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, atio->u.isp24.fcp_hdr.s_id); in qlt_handle_cmd_for_atio()
4362 ha->tgt.tgt_ops->put_sess(sess); in qlt_handle_cmd_for_atio()
4463 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_handle_task_mgmt()
4464 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_handle_task_mgmt()
4466 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_handle_task_mgmt()
4506 rc = ha->tgt.tgt_ops->handle_tmr(mcmd, unpacked_lun, mcmd->tmr_func, in __qlt_abort_task()
4530 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_abort_task()
4531 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_abort_task()
4532 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_abort_task()
4707 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qlt_handle_login()
4710 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_handle_login()
4860 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els() local
4922 spin_lock_irqsave(&tgt->ha->tgt.sess_lock, flags); in qlt_24xx_handle_els()
4925 spin_unlock_irqrestore(&tgt->ha->tgt.sess_lock, flags); in qlt_24xx_handle_els()
4949 spin_lock_irqsave(&tgt->ha->tgt.sess_lock, flags); in qlt_24xx_handle_els()
4962 spin_unlock_irqrestore(&tgt->ha->tgt.sess_lock, in qlt_24xx_handle_els()
4988 spin_unlock_irqrestore(&tgt->ha->tgt.sess_lock, in qlt_24xx_handle_els()
5024 spin_unlock_irqrestore(&tgt->ha->tgt.sess_lock, flags); in qlt_24xx_handle_els()
5065 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_24xx_handle_els()
5067 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_24xx_handle_els()
5100 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els() local
5102 if (tgt->link_reinit_iocb_pending) { in qlt_24xx_handle_els()
5104 &tgt->link_reinit_iocb, 0, 0, 0, 0, 0, 0); in qlt_24xx_handle_els()
5105 tgt->link_reinit_iocb_pending = 0; in qlt_24xx_handle_els()
5166 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_imm_notify() local
5173 if (tgt->link_reinit_iocb_pending) { in qlt_handle_imm_notify()
5175 &tgt->link_reinit_iocb, 0, 0, 0, 0, 0, 0); in qlt_handle_imm_notify()
5177 memcpy(&tgt->link_reinit_iocb, iocb, sizeof(*iocb)); in qlt_handle_imm_notify()
5178 tgt->link_reinit_iocb_pending = 1; in qlt_handle_imm_notify()
5289 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in __qlt_send_busy()
5291 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in __qlt_send_busy()
5352 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd() local
5358 if (unlikely(tgt->tgt_stop)) { in qlt_alloc_qfull_cmd()
5360 "New command while device %p is shutting down\n", tgt); in qlt_alloc_qfull_cmd()
5364 if ((vha->hw->tgt.num_qfull_cmds_alloc + 1) > MAX_QFULL_CMDS_ALLOC) { in qlt_alloc_qfull_cmd()
5365 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
5366 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
5369 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
5374 vha->hw->tgt.num_qfull_cmds_dropped); in qlt_alloc_qfull_cmd()
5380 sess = ha->tgt.tgt_ops->find_sess_by_s_id in qlt_alloc_qfull_cmd()
5385 cmd = ha->tgt.tgt_ops->get_cmd(sess); in qlt_alloc_qfull_cmd()
5391 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
5392 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
5395 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
5405 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
5418 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_alloc_qfull_cmd()
5419 list_add_tail(&cmd->cmd_list, &vha->hw->tgt.q_full_list); in qlt_alloc_qfull_cmd()
5421 vha->hw->tgt.num_qfull_cmds_alloc++; in qlt_alloc_qfull_cmd()
5422 if (vha->hw->tgt.num_qfull_cmds_alloc > in qlt_alloc_qfull_cmd()
5425 vha->hw->tgt.num_qfull_cmds_alloc; in qlt_alloc_qfull_cmd()
5426 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_alloc_qfull_cmd()
5439 if (list_empty(&ha->tgt.q_full_list)) in qlt_free_qfull_cmds()
5445 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5446 if (list_empty(&ha->tgt.q_full_list)) { in qlt_free_qfull_cmds()
5447 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5451 list_splice_init(&vha->hw->tgt.q_full_list, &q_full_list); in qlt_free_qfull_cmds()
5452 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5482 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_free_qfull_cmds()
5497 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5498 list_splice(&q_full_list, &vha->hw->tgt.q_full_list); in qlt_free_qfull_cmds()
5499 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5524 if (ha->tgt.num_pend_cmds < Q_FULL_THRESH_HOLD(ha)) in qlt_chk_qfull_thresh_hold()
5542 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_atio_pkt() local
5546 if (unlikely(tgt == NULL)) { in qlt_24xx_atio_pkt()
5556 tgt->atio_irq_cmd_count++; in qlt_24xx_atio_pkt()
5579 tgt->atio_irq_cmd_count--; in qlt_24xx_atio_pkt()
5648 tgt->atio_irq_cmd_count--; in qlt_24xx_atio_pkt()
5727 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_handle_abts_completion()
5738 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_handle_abts_completion()
5741 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_handle_abts_completion()
5750 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_response_pkt() local
5752 if (unlikely(tgt == NULL)) { in qlt_response_pkt()
5852 if (tgt->notify_ack_expected > 0) { in qlt_response_pkt()
5859 tgt->notify_ack_expected--; in qlt_response_pkt()
5881 if (tgt->abts_resp_expected > 0) { in qlt_response_pkt()
5906 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_async_event() local
5909 if (!tgt || tgt->tgt_stop || tgt->tgt_stopped) in qlt_async_event()
5940 if (tgt->link_reinit_iocb_pending) { in qlt_async_event()
5942 &tgt->link_reinit_iocb, in qlt_async_event()
5944 tgt->link_reinit_iocb_pending = 0; in qlt_async_event()
6035 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qlt_get_port_database()
6061 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_get_port_database()
6158 static void qlt_abort_work(struct qla_tgt *tgt, in qlt_abort_work() argument
6161 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_work()
6168 spin_lock_irqsave(&ha->tgt.sess_lock, flags2); in qlt_abort_work()
6170 if (tgt->tgt_stop) in qlt_abort_work()
6175 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_abort_work()
6177 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags2); in qlt_abort_work()
6182 spin_lock_irqsave(&ha->tgt.sess_lock, flags2); in qlt_abort_work()
6201 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags2); in qlt_abort_work()
6203 ha->tgt.tgt_ops->put_sess(sess); in qlt_abort_work()
6210 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags2); in qlt_abort_work()
6219 static void qlt_tmr_work(struct qla_tgt *tgt, in qlt_tmr_work() argument
6223 struct scsi_qla_host *vha = tgt->vha; in qlt_tmr_work()
6233 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_tmr_work()
6235 if (tgt->tgt_stop) in qlt_tmr_work()
6239 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_tmr_work()
6241 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_tmr_work()
6246 spin_lock_irqsave(&ha->tgt.sess_lock, flags); in qlt_tmr_work()
6268 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_tmr_work()
6270 ha->tgt.tgt_ops->put_sess(sess); in qlt_tmr_work()
6277 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags); in qlt_tmr_work()
6284 struct qla_tgt *tgt = container_of(work, struct qla_tgt, sess_work); in qlt_sess_work_fn() local
6285 struct scsi_qla_host *vha = tgt->vha; in qlt_sess_work_fn()
6288 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf000, "Sess work (tgt %p)", tgt); in qlt_sess_work_fn()
6290 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
6291 while (!list_empty(&tgt->sess_works_list)) { in qlt_sess_work_fn()
6293 tgt->sess_works_list.next, typeof(*prm), in qlt_sess_work_fn()
6302 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
6306 qlt_abort_work(tgt, prm); in qlt_sess_work_fn()
6309 qlt_tmr_work(tgt, prm); in qlt_sess_work_fn()
6316 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
6320 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
6326 struct qla_tgt *tgt; in qlt_add_target() local
6344 tgt = kzalloc(sizeof(struct qla_tgt), GFP_KERNEL); in qlt_add_target()
6345 if (!tgt) { in qlt_add_target()
6351 tgt->qphints = kcalloc(ha->max_qpairs + 1, in qlt_add_target()
6354 if (!tgt->qphints) { in qlt_add_target()
6355 kfree(tgt); in qlt_add_target()
6364 rc = btree_init64(&tgt->lun_qpair_map); in qlt_add_target()
6366 kfree(tgt->qphints); in qlt_add_target()
6367 kfree(tgt); in qlt_add_target()
6372 h = &tgt->qphints[0]; in qlt_add_target()
6383 h = &tgt->qphints[i + 1]; in qlt_add_target()
6394 tgt->ha = ha; in qlt_add_target()
6395 tgt->vha = base_vha; in qlt_add_target()
6396 init_waitqueue_head(&tgt->waitQ); in qlt_add_target()
6397 INIT_LIST_HEAD(&tgt->del_sess_list); in qlt_add_target()
6398 spin_lock_init(&tgt->sess_work_lock); in qlt_add_target()
6399 INIT_WORK(&tgt->sess_work, qlt_sess_work_fn); in qlt_add_target()
6400 INIT_LIST_HEAD(&tgt->sess_works_list); in qlt_add_target()
6401 atomic_set(&tgt->tgt_global_resets_count, 0); in qlt_add_target()
6403 base_vha->vha_tgt.qla_tgt = tgt; in qlt_add_target()
6409 tgt->sg_tablesize = QLA_TGT_MAX_SG_24XX(base_vha->req->length - 3); in qlt_add_target()
6412 list_add_tail(&tgt->tgt_list_entry, &qla_tgt_glist); in qlt_add_target()
6415 if (ha->tgt.tgt_ops && ha->tgt.tgt_ops->add_target) in qlt_add_target()
6416 ha->tgt.tgt_ops->add_target(base_vha); in qlt_add_target()
6447 btree_for_each_safe32(&ha->tgt.host_map, key, node) in qlt_remove_target_resources()
6448 btree_remove32(&ha->tgt.host_map, key); in qlt_remove_target_resources()
6450 btree_destroy32(&ha->tgt.host_map); in qlt_remove_target_resources()
6475 struct qla_tgt *tgt; in qlt_lport_register() local
6484 list_for_each_entry(tgt, &qla_tgt_glist, tgt_list_entry) { in qlt_lport_register()
6485 vha = tgt->vha; in qlt_lport_register()
6505 if (tgt->tgt_stop) { in qlt_lport_register()
6551 ha->tgt.tgt_ops = NULL; in qlt_lport_deregister()
6606 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_enable_vha() local
6610 if (!tgt) { in qlt_enable_vha()
6620 if (ha->tgt.num_act_qpairs > ha->max_qpairs) in qlt_enable_vha()
6621 ha->tgt.num_act_qpairs = ha->max_qpairs; in qlt_enable_vha()
6623 tgt->tgt_stopped = 0; in qlt_enable_vha()
6651 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_disable_vha() local
6654 if (!tgt) { in qlt_disable_vha()
6699 ha->tgt.atio_q_length = ATIO_ENTRY_CNT_24XX; in qlt_vport_create()
6735 struct atio_from_isp *pkt = (struct atio_from_isp *)ha->tgt.atio_ring; in qlt_init_atio_q_entries()
6740 for (cnt = 0; cnt < ha->tgt.atio_q_length; cnt++) { in qlt_init_atio_q_entries()
6761 while ((ha->tgt.atio_ring_ptr->signature != ATIO_PROCESSED) || in qlt_24xx_process_atio_queue()
6762 fcpcmd_is_corrupted(ha->tgt.atio_ring_ptr)) { in qlt_24xx_process_atio_queue()
6763 pkt = (struct atio_from_isp *)ha->tgt.atio_ring_ptr; in qlt_24xx_process_atio_queue()
6766 if (unlikely(fcpcmd_is_corrupted(ha->tgt.atio_ring_ptr))) { in qlt_24xx_process_atio_queue()
6787 ha->tgt.atio_ring_index++; in qlt_24xx_process_atio_queue()
6788 if (ha->tgt.atio_ring_index == ha->tgt.atio_q_length) { in qlt_24xx_process_atio_queue()
6789 ha->tgt.atio_ring_index = 0; in qlt_24xx_process_atio_queue()
6790 ha->tgt.atio_ring_ptr = ha->tgt.atio_ring; in qlt_24xx_process_atio_queue()
6792 ha->tgt.atio_ring_ptr++; in qlt_24xx_process_atio_queue()
6795 pkt = (struct atio_from_isp *)ha->tgt.atio_ring_ptr; in qlt_24xx_process_atio_queue()
6801 wrt_reg_dword(ISP_ATIO_Q_OUT(vha), ha->tgt.atio_ring_index); in qlt_24xx_process_atio_queue()
6847 if (!ha->tgt.saved_set) { in qlt_24xx_config_nvram_stage1()
6849 ha->tgt.saved_exchange_count = nv->exchange_count; in qlt_24xx_config_nvram_stage1()
6850 ha->tgt.saved_firmware_options_1 = in qlt_24xx_config_nvram_stage1()
6852 ha->tgt.saved_firmware_options_2 = in qlt_24xx_config_nvram_stage1()
6854 ha->tgt.saved_firmware_options_3 = in qlt_24xx_config_nvram_stage1()
6856 ha->tgt.saved_set = 1; in qlt_24xx_config_nvram_stage1()
6902 if (ha->tgt.saved_set) { in qlt_24xx_config_nvram_stage1()
6903 nv->exchange_count = ha->tgt.saved_exchange_count; in qlt_24xx_config_nvram_stage1()
6905 ha->tgt.saved_firmware_options_1; in qlt_24xx_config_nvram_stage1()
6907 ha->tgt.saved_firmware_options_2; in qlt_24xx_config_nvram_stage1()
6909 ha->tgt.saved_firmware_options_3; in qlt_24xx_config_nvram_stage1()
6937 if (ha->tgt.node_name_set) { in qlt_24xx_config_nvram_stage2()
6938 memcpy(icb->node_name, ha->tgt.tgt_node_name, WWN_SIZE); in qlt_24xx_config_nvram_stage2()
6953 if (!ha->tgt.saved_set) { in qlt_81xx_config_nvram_stage1()
6955 ha->tgt.saved_exchange_count = nv->exchange_count; in qlt_81xx_config_nvram_stage1()
6956 ha->tgt.saved_firmware_options_1 = in qlt_81xx_config_nvram_stage1()
6958 ha->tgt.saved_firmware_options_2 = in qlt_81xx_config_nvram_stage1()
6960 ha->tgt.saved_firmware_options_3 = in qlt_81xx_config_nvram_stage1()
6962 ha->tgt.saved_set = 1; in qlt_81xx_config_nvram_stage1()
7005 if (ha->tgt.saved_set) { in qlt_81xx_config_nvram_stage1()
7006 nv->exchange_count = ha->tgt.saved_exchange_count; in qlt_81xx_config_nvram_stage1()
7008 ha->tgt.saved_firmware_options_1; in qlt_81xx_config_nvram_stage1()
7010 ha->tgt.saved_firmware_options_2; in qlt_81xx_config_nvram_stage1()
7012 ha->tgt.saved_firmware_options_3; in qlt_81xx_config_nvram_stage1()
7040 if (ha->tgt.node_name_set) { in qlt_81xx_config_nvram_stage2()
7041 memcpy(icb->node_name, ha->tgt.tgt_node_name, WWN_SIZE); in qlt_81xx_config_nvram_stage2()
7094 rc = btree_init32(&ha->tgt.host_map); in qlt_probe_one_stage1()
7114 spin_lock_irqsave(&ha->tgt.atio_lock, flags); in qla83xx_msix_atio_q()
7118 spin_unlock_irqrestore(&ha->tgt.atio_lock, flags); in qla83xx_msix_atio_q()
7136 spin_lock_irqsave(&ha->tgt.atio_lock, flags); in qlt_handle_abts_recv_work()
7138 spin_unlock_irqrestore(&ha->tgt.atio_lock, flags); in qlt_handle_abts_recv_work()
7178 ha->tgt.tgt_vp_map = kcalloc(MAX_MULTI_ID_FABRIC, in qlt_mem_alloc()
7181 if (!ha->tgt.tgt_vp_map) in qlt_mem_alloc()
7184 ha->tgt.atio_ring = dma_alloc_coherent(&ha->pdev->dev, in qlt_mem_alloc()
7185 (ha->tgt.atio_q_length + 1) * sizeof(struct atio_from_isp), in qlt_mem_alloc()
7186 &ha->tgt.atio_dma, GFP_KERNEL); in qlt_mem_alloc()
7187 if (!ha->tgt.atio_ring) { in qlt_mem_alloc()
7188 kfree(ha->tgt.tgt_vp_map); in qlt_mem_alloc()
7200 if (ha->tgt.atio_ring) { in qlt_mem_free()
7201 dma_free_coherent(&ha->pdev->dev, (ha->tgt.atio_q_length + 1) * in qlt_mem_free()
7202 sizeof(struct atio_from_isp), ha->tgt.atio_ring, in qlt_mem_free()
7203 ha->tgt.atio_dma); in qlt_mem_free()
7205 ha->tgt.atio_ring = NULL; in qlt_mem_free()
7206 ha->tgt.atio_dma = 0; in qlt_mem_free()
7207 kfree(ha->tgt.tgt_vp_map); in qlt_mem_free()
7208 ha->tgt.tgt_vp_map = NULL; in qlt_mem_free()
7226 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = vha; in qlt_update_vp_map()
7229 slot = btree_lookup32(&vha->hw->tgt.host_map, key); in qlt_update_vp_map()
7233 rc = btree_insert32(&vha->hw->tgt.host_map, in qlt_update_vp_map()
7243 btree_update32(&vha->hw->tgt.host_map, key, vha); in qlt_update_vp_map()
7246 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = NULL; in qlt_update_vp_map()
7251 slot = btree_lookup32(&vha->hw->tgt.host_map, key); in qlt_update_vp_map()
7253 btree_remove32(&vha->hw->tgt.host_map, key); in qlt_update_vp_map()