Lines Matching refs:fnic

104 static void fnic_cleanup_io(struct fnic *fnic, int exclude_id);
106 static inline spinlock_t *fnic_io_lock_hash(struct fnic *fnic, in fnic_io_lock_hash() argument
111 return &fnic->io_req_lock[hash]; in fnic_io_lock_hash()
114 static inline spinlock_t *fnic_io_lock_tag(struct fnic *fnic, in fnic_io_lock_tag() argument
117 return &fnic->io_req_lock[tag & (FNIC_IO_LOCKS - 1)]; in fnic_io_lock_tag()
124 static void fnic_release_ioreq_buf(struct fnic *fnic, in fnic_release_ioreq_buf() argument
129 pci_unmap_single(fnic->pdev, io_req->sgl_list_pa, in fnic_release_ioreq_buf()
136 fnic->io_sgl_pool[io_req->sgl_type]); in fnic_release_ioreq_buf()
138 pci_unmap_single(fnic->pdev, io_req->sense_buf_pa, in fnic_release_ioreq_buf()
143 static int free_wq_copy_descs(struct fnic *fnic, struct vnic_wq_copy *wq) in free_wq_copy_descs() argument
146 if (!fnic->fw_ack_recd[0]) in free_wq_copy_descs()
153 if (wq->to_clean_index <= fnic->fw_ack_index[0]) in free_wq_copy_descs()
154 wq->ring.desc_avail += (fnic->fw_ack_index[0] in free_wq_copy_descs()
159 + fnic->fw_ack_index[0] + 1); in free_wq_copy_descs()
167 (fnic->fw_ack_index[0] + 1) % wq->ring.desc_count; in free_wq_copy_descs()
170 fnic->fw_ack_recd[0] = 0; in free_wq_copy_descs()
180 __fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags, in __fnic_set_state_flags() argument
183 struct Scsi_Host *host = fnic->lport->host; in __fnic_set_state_flags()
191 fnic->state_flags &= ~st_flags; in __fnic_set_state_flags()
193 fnic->state_flags |= st_flags; in __fnic_set_state_flags()
206 int fnic_fw_reset_handler(struct fnic *fnic) in fnic_fw_reset_handler() argument
208 struct vnic_wq_copy *wq = &fnic->wq_copy[0]; in fnic_fw_reset_handler()
213 fnic_set_state_flags(fnic, FNIC_FLAGS_FWRESET); in fnic_fw_reset_handler()
215 skb_queue_purge(&fnic->frame_queue); in fnic_fw_reset_handler()
216 skb_queue_purge(&fnic->tx_queue); in fnic_fw_reset_handler()
219 while (atomic_read(&fnic->in_flight)) in fnic_fw_reset_handler()
222 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags); in fnic_fw_reset_handler()
224 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0]) in fnic_fw_reset_handler()
225 free_wq_copy_descs(fnic, wq); in fnic_fw_reset_handler()
231 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs); in fnic_fw_reset_handler()
232 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) > in fnic_fw_reset_handler()
233 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs)) in fnic_fw_reset_handler()
234 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs, in fnic_fw_reset_handler()
236 &fnic->fnic_stats.fw_stats.active_fw_reqs)); in fnic_fw_reset_handler()
239 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags); in fnic_fw_reset_handler()
242 atomic64_inc(&fnic->fnic_stats.reset_stats.fw_resets); in fnic_fw_reset_handler()
243 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fw_reset_handler()
246 fnic_clear_state_flags(fnic, FNIC_FLAGS_FWRESET); in fnic_fw_reset_handler()
247 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fw_reset_handler()
259 int fnic_flogi_reg_handler(struct fnic *fnic, u32 fc_id) in fnic_flogi_reg_handler() argument
261 struct vnic_wq_copy *wq = &fnic->wq_copy[0]; in fnic_flogi_reg_handler()
263 struct fc_lport *lp = fnic->lport; in fnic_flogi_reg_handler()
268 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags); in fnic_flogi_reg_handler()
270 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0]) in fnic_flogi_reg_handler()
271 free_wq_copy_descs(fnic, wq); in fnic_flogi_reg_handler()
278 if (fnic->ctlr.map_dest) { in fnic_flogi_reg_handler()
282 memcpy(gw_mac, fnic->ctlr.dest_addr, ETH_ALEN); in fnic_flogi_reg_handler()
286 if ((fnic->config.flags & VFCF_FIP_CAPABLE) && !fnic->ctlr.map_dest) { in fnic_flogi_reg_handler()
289 fnic->data_src_addr, in fnic_flogi_reg_handler()
291 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_flogi_reg_handler()
293 fc_id, fnic->data_src_addr, gw_mac); in fnic_flogi_reg_handler()
297 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_flogi_reg_handler()
299 fc_id, fnic->ctlr.map_dest, gw_mac); in fnic_flogi_reg_handler()
302 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs); in fnic_flogi_reg_handler()
303 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) > in fnic_flogi_reg_handler()
304 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs)) in fnic_flogi_reg_handler()
305 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs, in fnic_flogi_reg_handler()
306 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs)); in fnic_flogi_reg_handler()
309 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags); in fnic_flogi_reg_handler()
317 static inline int fnic_queue_wq_copy_desc(struct fnic *fnic, in fnic_queue_wq_copy_desc() argument
327 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats; in fnic_queue_wq_copy_desc()
345 (fnic->pdev, in fnic_queue_wq_copy_desc()
351 io_req->sense_buf_pa = pci_map_single(fnic->pdev, in fnic_queue_wq_copy_desc()
359 spin_lock_irqsave(&fnic->wq_copy_lock[0], intr_flags); in fnic_queue_wq_copy_desc()
361 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0]) in fnic_queue_wq_copy_desc()
362 free_wq_copy_descs(fnic, wq); in fnic_queue_wq_copy_desc()
365 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags); in fnic_queue_wq_copy_desc()
366 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, in fnic_queue_wq_copy_desc()
379 if ((fnic->config.flags & VFCF_FCP_SEQ_LVL_ERR) && in fnic_queue_wq_copy_desc()
398 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs); in fnic_queue_wq_copy_desc()
399 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) > in fnic_queue_wq_copy_desc()
400 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs)) in fnic_queue_wq_copy_desc()
401 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs, in fnic_queue_wq_copy_desc()
402 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs)); in fnic_queue_wq_copy_desc()
404 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags); in fnic_queue_wq_copy_desc()
418 struct fnic *fnic = lport_priv(lp); in fnic_queuecommand_lck() local
419 struct fnic_stats *fnic_stats = &fnic->fnic_stats; in fnic_queuecommand_lck()
430 if (unlikely(fnic_chk_state_flags_locked(fnic, FNIC_FLAGS_IO_BLOCKED))) in fnic_queuecommand_lck()
444 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_queuecommand_lck()
455 atomic_inc(&fnic->in_flight); in fnic_queuecommand_lck()
467 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC); in fnic_queuecommand_lck()
481 mempool_free(io_req, fnic->io_req_pool); in fnic_queuecommand_lck()
493 mempool_alloc(fnic->io_sgl_pool[io_req->sgl_type], in fnic_queuecommand_lck()
499 mempool_free(io_req, fnic->io_req_pool); in fnic_queuecommand_lck()
518 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_queuecommand_lck()
531 wq = &fnic->wq_copy[0]; in fnic_queuecommand_lck()
532 ret = fnic_queue_wq_copy_desc(fnic, wq, io_req, sc, sg_count); in fnic_queuecommand_lck()
546 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_queuecommand_lck()
547 mempool_free(io_req, fnic->io_req_pool); in fnic_queuecommand_lck()
549 atomic_dec(&fnic->in_flight); in fnic_queuecommand_lck()
579 atomic_dec(&fnic->in_flight); in fnic_queuecommand_lck()
591 static int fnic_fcpio_fw_reset_cmpl_handler(struct fnic *fnic, in DEF_SCSI_QCMD()
599 struct reset_stats *reset_stats = &fnic->fnic_stats.reset_stats; in DEF_SCSI_QCMD()
606 fnic_cleanup_io(fnic, SCSI_NO_TAG); in DEF_SCSI_QCMD()
608 atomic64_set(&fnic->fnic_stats.fw_stats.active_fw_reqs, 0); in DEF_SCSI_QCMD()
609 atomic64_set(&fnic->fnic_stats.io_stats.active_ios, 0); in DEF_SCSI_QCMD()
611 spin_lock_irqsave(&fnic->fnic_lock, flags); in DEF_SCSI_QCMD()
614 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE) { in DEF_SCSI_QCMD()
617 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in DEF_SCSI_QCMD()
620 fnic->state = FNIC_IN_ETH_MODE; in DEF_SCSI_QCMD()
623 fnic->lport->host, in DEF_SCSI_QCMD()
633 fnic->state = FNIC_IN_FC_MODE; in DEF_SCSI_QCMD()
639 fnic->lport->host, in DEF_SCSI_QCMD()
641 " reset cmpl\n", fnic_state_to_str(fnic->state)); in DEF_SCSI_QCMD()
647 if (fnic->remove_wait) in DEF_SCSI_QCMD()
648 complete(fnic->remove_wait); in DEF_SCSI_QCMD()
654 if (fnic->remove_wait || ret) { in DEF_SCSI_QCMD()
655 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in DEF_SCSI_QCMD()
656 skb_queue_purge(&fnic->tx_queue); in DEF_SCSI_QCMD()
660 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in DEF_SCSI_QCMD()
662 fnic_flush_tx(fnic); in DEF_SCSI_QCMD()
665 fnic_clear_state_flags(fnic, FNIC_FLAGS_FWRESET); in DEF_SCSI_QCMD()
674 static int fnic_fcpio_flogi_reg_cmpl_handler(struct fnic *fnic, in fnic_fcpio_flogi_reg_cmpl_handler() argument
686 spin_lock_irqsave(&fnic->fnic_lock, flags); in fnic_fcpio_flogi_reg_cmpl_handler()
688 if (fnic->state == FNIC_IN_ETH_TRANS_FC_MODE) { in fnic_fcpio_flogi_reg_cmpl_handler()
692 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_flogi_reg_cmpl_handler()
694 fnic->state = FNIC_IN_FC_MODE; in fnic_fcpio_flogi_reg_cmpl_handler()
697 fnic->lport->host, in fnic_fcpio_flogi_reg_cmpl_handler()
700 fnic->state = FNIC_IN_ETH_MODE; in fnic_fcpio_flogi_reg_cmpl_handler()
704 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_flogi_reg_cmpl_handler()
707 fnic_state_to_str(fnic->state)); in fnic_fcpio_flogi_reg_cmpl_handler()
712 if (fnic->stop_rx_link_events) { in fnic_fcpio_flogi_reg_cmpl_handler()
713 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_fcpio_flogi_reg_cmpl_handler()
716 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_fcpio_flogi_reg_cmpl_handler()
718 fnic_flush_tx(fnic); in fnic_fcpio_flogi_reg_cmpl_handler()
719 queue_work(fnic_event_queue, &fnic->frame_work); in fnic_fcpio_flogi_reg_cmpl_handler()
721 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_fcpio_flogi_reg_cmpl_handler()
753 static inline void fnic_fcpio_ack_handler(struct fnic *fnic, in fnic_fcpio_ack_handler() argument
763 wq = &fnic->wq_copy[cq_index - fnic->raw_wq_count - fnic->rq_count]; in fnic_fcpio_ack_handler()
764 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags); in fnic_fcpio_ack_handler()
766 fnic->fnic_stats.misc_stats.last_ack_time = jiffies; in fnic_fcpio_ack_handler()
768 fnic->fw_ack_index[0] = request_out; in fnic_fcpio_ack_handler()
769 fnic->fw_ack_recd[0] = 1; in fnic_fcpio_ack_handler()
772 &fnic->fnic_stats.misc_stats.ack_index_out_of_range); in fnic_fcpio_ack_handler()
774 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags); in fnic_fcpio_ack_handler()
776 fnic->lport->host->host_no, 0, 0, ox_id_tag[2], ox_id_tag[3], in fnic_fcpio_ack_handler()
784 static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic, in fnic_fcpio_icmnd_cmpl_handler() argument
795 struct fnic_stats *fnic_stats = &fnic->fnic_stats; in fnic_fcpio_icmnd_cmpl_handler()
806 if (id >= fnic->fnic_max_tag_id) { in fnic_fcpio_icmnd_cmpl_handler()
807 shost_printk(KERN_ERR, fnic->lport->host, in fnic_fcpio_icmnd_cmpl_handler()
813 sc = scsi_host_find_tag(fnic->lport->host, id); in fnic_fcpio_icmnd_cmpl_handler()
817 shost_printk(KERN_ERR, fnic->lport->host, in fnic_fcpio_icmnd_cmpl_handler()
822 fnic->lport->host->host_no, id, in fnic_fcpio_icmnd_cmpl_handler()
832 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_fcpio_icmnd_cmpl_handler()
840 shost_printk(KERN_ERR, fnic->lport->host, in fnic_fcpio_icmnd_cmpl_handler()
861 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, in fnic_fcpio_icmnd_cmpl_handler()
872 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, in fnic_fcpio_icmnd_cmpl_handler()
945 shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n", in fnic_fcpio_icmnd_cmpl_handler()
953 shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n", in fnic_fcpio_icmnd_cmpl_handler()
962 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_fcpio_icmnd_cmpl_handler()
964 mempool_free(io_req, fnic->io_req_pool); in fnic_fcpio_icmnd_cmpl_handler()
981 fnic->lport->host_stats.fcp_input_requests++; in fnic_fcpio_icmnd_cmpl_handler()
982 fnic->fcp_input_bytes += xfer_len; in fnic_fcpio_icmnd_cmpl_handler()
984 fnic->lport->host_stats.fcp_output_requests++; in fnic_fcpio_icmnd_cmpl_handler()
985 fnic->fcp_output_bytes += xfer_len; in fnic_fcpio_icmnd_cmpl_handler()
987 fnic->lport->host_stats.fcp_control_requests++; in fnic_fcpio_icmnd_cmpl_handler()
990 if (atomic64_read(&fnic->io_cmpl_skip)) in fnic_fcpio_icmnd_cmpl_handler()
991 atomic64_dec(&fnic->io_cmpl_skip); in fnic_fcpio_icmnd_cmpl_handler()
1003 static void fnic_fcpio_itmf_cmpl_handler(struct fnic *fnic, in fnic_fcpio_itmf_cmpl_handler() argument
1012 struct fnic_stats *fnic_stats = &fnic->fnic_stats; in fnic_fcpio_itmf_cmpl_handler()
1013 struct abort_stats *abts_stats = &fnic->fnic_stats.abts_stats; in fnic_fcpio_itmf_cmpl_handler()
1014 struct terminate_stats *term_stats = &fnic->fnic_stats.term_stats; in fnic_fcpio_itmf_cmpl_handler()
1015 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats; in fnic_fcpio_itmf_cmpl_handler()
1023 if ((id & FNIC_TAG_MASK) >= fnic->fnic_max_tag_id) { in fnic_fcpio_itmf_cmpl_handler()
1024 shost_printk(KERN_ERR, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1030 sc = scsi_host_find_tag(fnic->lport->host, id & FNIC_TAG_MASK); in fnic_fcpio_itmf_cmpl_handler()
1034 shost_printk(KERN_ERR, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1039 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_fcpio_itmf_cmpl_handler()
1047 shost_printk(KERN_ERR, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1058 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1103 if (atomic64_read(&fnic->io_cmpl_skip)) in fnic_fcpio_itmf_cmpl_handler()
1104 atomic64_dec(&fnic->io_cmpl_skip); in fnic_fcpio_itmf_cmpl_handler()
1111 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1125 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1132 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_fcpio_itmf_cmpl_handler()
1133 mempool_free(io_req, fnic->io_req_pool); in fnic_fcpio_itmf_cmpl_handler()
1162 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1177 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1186 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1195 shost_printk(KERN_ERR, fnic->lport->host, in fnic_fcpio_itmf_cmpl_handler()
1211 struct fnic *fnic = vnic_dev_priv(vdev); in fnic_fcpio_cmpl_handler() local
1219 atomic64_dec(&fnic->fnic_stats.fw_stats.active_fw_reqs); in fnic_fcpio_cmpl_handler()
1227 fnic_fcpio_ack_handler(fnic, cq_index, desc); in fnic_fcpio_cmpl_handler()
1231 fnic_fcpio_icmnd_cmpl_handler(fnic, desc); in fnic_fcpio_cmpl_handler()
1235 fnic_fcpio_itmf_cmpl_handler(fnic, desc); in fnic_fcpio_cmpl_handler()
1240 fnic_fcpio_flogi_reg_cmpl_handler(fnic, desc); in fnic_fcpio_cmpl_handler()
1244 fnic_fcpio_fw_reset_cmpl_handler(fnic, desc); in fnic_fcpio_cmpl_handler()
1248 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_fcpio_cmpl_handler()
1261 int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do) in fnic_wq_copy_cmpl_handler() argument
1267 for (i = 0; i < fnic->wq_copy_count; i++) { in fnic_wq_copy_cmpl_handler()
1268 cq_index = i + fnic->raw_wq_count + fnic->rq_count; in fnic_wq_copy_cmpl_handler()
1269 cur_work_done = vnic_cq_copy_service(&fnic->cq[cq_index], in fnic_wq_copy_cmpl_handler()
1277 static void fnic_cleanup_io(struct fnic *fnic, int exclude_id) in fnic_cleanup_io() argument
1285 struct fnic_stats *fnic_stats = &fnic->fnic_stats; in fnic_cleanup_io()
1287 for (i = 0; i < fnic->fnic_max_tag_id; i++) { in fnic_cleanup_io()
1291 io_lock = fnic_io_lock_tag(fnic, i); in fnic_cleanup_io()
1293 sc = scsi_host_find_tag(fnic->lport->host, i); in fnic_cleanup_io()
1331 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_cleanup_io()
1332 mempool_free(io_req, fnic->io_req_pool); in fnic_cleanup_io()
1336 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_cleanup_io()
1340 if (atomic64_read(&fnic->io_cmpl_skip)) in fnic_cleanup_io()
1341 atomic64_dec(&fnic->io_cmpl_skip); in fnic_cleanup_io()
1365 struct fnic *fnic = vnic_dev_priv(wq->vdev); in fnic_wq_copy_cleanup_handler() local
1376 if (id >= fnic->fnic_max_tag_id) in fnic_wq_copy_cleanup_handler()
1379 sc = scsi_host_find_tag(fnic->lport->host, id); in fnic_wq_copy_cleanup_handler()
1383 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_wq_copy_cleanup_handler()
1401 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_wq_copy_cleanup_handler()
1402 mempool_free(io_req, fnic->io_req_pool); in fnic_wq_copy_cleanup_handler()
1406 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "wq_copy_cleanup_handler:" in fnic_wq_copy_cleanup_handler()
1422 static inline int fnic_queue_abort_io_req(struct fnic *fnic, int tag, in fnic_queue_abort_io_req() argument
1426 struct vnic_wq_copy *wq = &fnic->wq_copy[0]; in fnic_queue_abort_io_req()
1427 struct Scsi_Host *host = fnic->lport->host; in fnic_queue_abort_io_req()
1428 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats; in fnic_queue_abort_io_req()
1432 if (unlikely(fnic_chk_state_flags_locked(fnic, in fnic_queue_abort_io_req()
1437 atomic_inc(&fnic->in_flight); in fnic_queue_abort_io_req()
1440 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags); in fnic_queue_abort_io_req()
1442 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0]) in fnic_queue_abort_io_req()
1443 free_wq_copy_descs(fnic, wq); in fnic_queue_abort_io_req()
1446 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags); in fnic_queue_abort_io_req()
1447 atomic_dec(&fnic->in_flight); in fnic_queue_abort_io_req()
1448 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_queue_abort_io_req()
1455 fnic->config.ra_tov, fnic->config.ed_tov); in fnic_queue_abort_io_req()
1457 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs); in fnic_queue_abort_io_req()
1458 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) > in fnic_queue_abort_io_req()
1459 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs)) in fnic_queue_abort_io_req()
1460 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs, in fnic_queue_abort_io_req()
1461 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs)); in fnic_queue_abort_io_req()
1463 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags); in fnic_queue_abort_io_req()
1464 atomic_dec(&fnic->in_flight); in fnic_queue_abort_io_req()
1469 static void fnic_rport_exch_reset(struct fnic *fnic, u32 port_id) in fnic_rport_exch_reset() argument
1478 struct reset_stats *reset_stats = &fnic->fnic_stats.reset_stats; in fnic_rport_exch_reset()
1479 struct terminate_stats *term_stats = &fnic->fnic_stats.term_stats; in fnic_rport_exch_reset()
1484 fnic->lport->host, in fnic_rport_exch_reset()
1488 if (fnic->in_remove) in fnic_rport_exch_reset()
1491 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) { in fnic_rport_exch_reset()
1493 io_lock = fnic_io_lock_tag(fnic, tag); in fnic_rport_exch_reset()
1495 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_rport_exch_reset()
1510 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_rport_exch_reset()
1526 shost_printk(KERN_ERR, fnic->lport->host, in fnic_rport_exch_reset()
1533 shost_printk(KERN_ERR, fnic->lport->host, in fnic_rport_exch_reset()
1545 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_rport_exch_reset()
1552 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_rport_exch_reset()
1560 if (fnic_queue_abort_io_req(fnic, abt_tag, in fnic_rport_exch_reset()
1601 struct fnic *fnic; in fnic_terminate_rport_io() local
1623 fnic = lport_priv(lport); in fnic_terminate_rport_io()
1625 fnic->lport->host, "fnic_terminate_rport_io called" in fnic_terminate_rport_io()
1630 if (fnic->in_remove) in fnic_terminate_rport_io()
1633 reset_stats = &fnic->fnic_stats.reset_stats; in fnic_terminate_rport_io()
1634 term_stats = &fnic->fnic_stats.term_stats; in fnic_terminate_rport_io()
1636 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) { in fnic_terminate_rport_io()
1638 io_lock = fnic_io_lock_tag(fnic, tag); in fnic_terminate_rport_io()
1640 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_terminate_rport_io()
1661 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_terminate_rport_io()
1676 shost_printk(KERN_ERR, fnic->lport->host, in fnic_terminate_rport_io()
1682 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, in fnic_terminate_rport_io()
1694 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_terminate_rport_io()
1701 fnic->lport->host, in fnic_terminate_rport_io()
1709 if (fnic_queue_abort_io_req(fnic, abt_tag, in fnic_terminate_rport_io()
1746 struct fnic *fnic; in fnic_abort_cmd() local
1768 fnic = lport_priv(lp); in fnic_abort_cmd()
1769 fnic_stats = &fnic->fnic_stats; in fnic_abort_cmd()
1770 abts_stats = &fnic->fnic_stats.abts_stats; in fnic_abort_cmd()
1771 term_stats = &fnic->fnic_stats.term_stats; in fnic_abort_cmd()
1776 fnic->lport->host, in fnic_abort_cmd()
1799 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_abort_cmd()
1840 if (fnic_queue_abort_io_req(fnic, sc->request->tag, task_req, in fnic_abort_cmd()
1868 (2 * fnic->config.ra_tov + in fnic_abort_cmd()
1869 fnic->config.ed_tov)); in fnic_abort_cmd()
1901 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_abort_cmd()
1905 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_abort_cmd()
1926 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_abort_cmd()
1927 mempool_free(io_req, fnic->io_req_pool); in fnic_abort_cmd()
1938 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_abort_cmd()
1945 static inline int fnic_queue_dr_io_req(struct fnic *fnic, in fnic_queue_dr_io_req() argument
1949 struct vnic_wq_copy *wq = &fnic->wq_copy[0]; in fnic_queue_dr_io_req()
1950 struct Scsi_Host *host = fnic->lport->host; in fnic_queue_dr_io_req()
1951 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats; in fnic_queue_dr_io_req()
1957 if (unlikely(fnic_chk_state_flags_locked(fnic, in fnic_queue_dr_io_req()
1962 atomic_inc(&fnic->in_flight); in fnic_queue_dr_io_req()
1965 spin_lock_irqsave(&fnic->wq_copy_lock[0], intr_flags); in fnic_queue_dr_io_req()
1967 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0]) in fnic_queue_dr_io_req()
1968 free_wq_copy_descs(fnic, wq); in fnic_queue_dr_io_req()
1971 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_queue_dr_io_req()
1984 fnic->config.ra_tov, fnic->config.ed_tov); in fnic_queue_dr_io_req()
1986 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs); in fnic_queue_dr_io_req()
1987 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) > in fnic_queue_dr_io_req()
1988 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs)) in fnic_queue_dr_io_req()
1989 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs, in fnic_queue_dr_io_req()
1990 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs)); in fnic_queue_dr_io_req()
1993 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags); in fnic_queue_dr_io_req()
1994 atomic_dec(&fnic->in_flight); in fnic_queue_dr_io_req()
2005 static int fnic_clean_pending_aborts(struct fnic *fnic, in fnic_clean_pending_aborts() argument
2019 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) { in fnic_clean_pending_aborts()
2020 io_lock = fnic_io_lock_tag(fnic, tag); in fnic_clean_pending_aborts()
2022 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_clean_pending_aborts()
2043 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_clean_pending_aborts()
2053 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, in fnic_clean_pending_aborts()
2061 shost_printk(KERN_ERR, fnic->lport->host, in fnic_clean_pending_aborts()
2079 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, in fnic_clean_pending_aborts()
2090 if (fnic_queue_abort_io_req(fnic, abt_tag, in fnic_clean_pending_aborts()
2112 (fnic->config.ed_tov)); in fnic_clean_pending_aborts()
2136 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_clean_pending_aborts()
2137 mempool_free(io_req, fnic->io_req_pool); in fnic_clean_pending_aborts()
2140 schedule_timeout(msecs_to_jiffies(2 * fnic->config.ed_tov)); in fnic_clean_pending_aborts()
2143 if (fnic_is_abts_pending(fnic, lr_sc)) in fnic_clean_pending_aborts()
2155 fnic_scsi_host_start_tag(struct fnic *fnic, struct scsi_cmnd *sc) in fnic_scsi_host_start_tag() argument
2157 struct blk_queue_tag *bqt = fnic->lport->host->bqt; in fnic_scsi_host_start_tag()
2191 fnic_scsi_host_end_tag(struct fnic *fnic, struct scsi_cmnd *sc) in fnic_scsi_host_end_tag() argument
2193 struct blk_queue_tag *bqt = fnic->lport->host->bqt; in fnic_scsi_host_end_tag()
2217 struct fnic *fnic; in fnic_device_reset() local
2238 fnic = lport_priv(lp); in fnic_device_reset()
2239 fnic_stats = &fnic->fnic_stats; in fnic_device_reset()
2240 reset_stats = &fnic->fnic_stats.reset_stats; in fnic_device_reset()
2245 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_device_reset()
2279 tag = fnic_scsi_host_start_tag(fnic, sc); in fnic_device_reset()
2284 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_device_reset()
2293 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC); in fnic_device_reset()
2307 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "TAG %x\n", tag); in fnic_device_reset()
2313 if (fnic_queue_dr_io_req(fnic, sc, io_req)) { in fnic_device_reset()
2335 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_device_reset()
2349 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_device_reset()
2365 if (fnic_queue_abort_io_req(fnic, in fnic_device_reset()
2377 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_device_reset()
2404 fnic->lport->host, in fnic_device_reset()
2417 if (fnic_clean_pending_aborts(fnic, sc)) { in fnic_device_reset()
2420 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_device_reset()
2441 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_device_reset()
2442 mempool_free(io_req, fnic->io_req_pool); in fnic_device_reset()
2456 fnic_scsi_host_end_tag(fnic, sc); in fnic_device_reset()
2458 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_device_reset()
2473 struct fnic *fnic; in fnic_reset() local
2478 fnic = lport_priv(lp); in fnic_reset()
2479 reset_stats = &fnic->fnic_stats.reset_stats; in fnic_reset()
2481 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_reset()
2492 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_reset()
2551 struct fnic *fnic = lport_priv(lp); in fnic_scsi_abort_io() local
2556 spin_lock_irqsave(&fnic->fnic_lock, flags); in fnic_scsi_abort_io()
2557 if (unlikely(fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)) { in fnic_scsi_abort_io()
2559 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_scsi_abort_io()
2564 fnic->remove_wait = &remove_wait; in fnic_scsi_abort_io()
2565 old_state = fnic->state; in fnic_scsi_abort_io()
2566 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE; in fnic_scsi_abort_io()
2567 fnic_update_mac_locked(fnic, fnic->ctlr.ctl_src_addr); in fnic_scsi_abort_io()
2568 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_scsi_abort_io()
2570 err = fnic_fw_reset_handler(fnic); in fnic_scsi_abort_io()
2572 spin_lock_irqsave(&fnic->fnic_lock, flags); in fnic_scsi_abort_io()
2573 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE) in fnic_scsi_abort_io()
2574 fnic->state = old_state; in fnic_scsi_abort_io()
2575 fnic->remove_wait = NULL; in fnic_scsi_abort_io()
2576 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_scsi_abort_io()
2584 spin_lock_irqsave(&fnic->fnic_lock, flags); in fnic_scsi_abort_io()
2585 fnic->remove_wait = NULL; in fnic_scsi_abort_io()
2586 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, in fnic_scsi_abort_io()
2588 (fnic->state == FNIC_IN_ETH_MODE) ? in fnic_scsi_abort_io()
2590 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_scsi_abort_io()
2601 struct fnic *fnic = lport_priv(lp); in fnic_scsi_cleanup() local
2605 spin_lock_irqsave(&fnic->fnic_lock, flags); in fnic_scsi_cleanup()
2606 if (unlikely(fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)) { in fnic_scsi_cleanup()
2608 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_scsi_cleanup()
2612 old_state = fnic->state; in fnic_scsi_cleanup()
2613 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE; in fnic_scsi_cleanup()
2614 fnic_update_mac_locked(fnic, fnic->ctlr.ctl_src_addr); in fnic_scsi_cleanup()
2615 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_scsi_cleanup()
2617 if (fnic_fw_reset_handler(fnic)) { in fnic_scsi_cleanup()
2618 spin_lock_irqsave(&fnic->fnic_lock, flags); in fnic_scsi_cleanup()
2619 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE) in fnic_scsi_cleanup()
2620 fnic->state = old_state; in fnic_scsi_cleanup()
2621 spin_unlock_irqrestore(&fnic->fnic_lock, flags); in fnic_scsi_cleanup()
2632 struct fnic *fnic = lport_priv(lp); in fnic_exch_mgr_reset() local
2639 fnic_rport_exch_reset(fnic, did); in fnic_exch_mgr_reset()
2647 if (!fnic->in_remove) in fnic_exch_mgr_reset()
2665 int fnic_is_abts_pending(struct fnic *fnic, struct scsi_cmnd *lr_sc) in fnic_is_abts_pending() argument
2679 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) { in fnic_is_abts_pending()
2680 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_is_abts_pending()
2688 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_is_abts_pending()
2702 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host, in fnic_is_abts_pending()