Lines Matching refs:fnic
41 #include "fnic.h"
105 static void fnic_cleanup_io(struct fnic *fnic, int exclude_id);
107 static inline spinlock_t *fnic_io_lock_hash(struct fnic *fnic,
112 return &fnic->io_req_lock[hash];
115 static inline spinlock_t *fnic_io_lock_tag(struct fnic *fnic,
118 return &fnic->io_req_lock[tag & (FNIC_IO_LOCKS - 1)];
125 static void fnic_release_ioreq_buf(struct fnic *fnic,
130 dma_unmap_single(&fnic->pdev->dev, io_req->sgl_list_pa,
137 fnic->io_sgl_pool[io_req->sgl_type]);
139 dma_unmap_single(&fnic->pdev->dev, io_req->sense_buf_pa,
144 static int free_wq_copy_descs(struct fnic *fnic, struct vnic_wq_copy *wq)
147 if (!fnic->fw_ack_recd[0])
154 if (wq->to_clean_index <= fnic->fw_ack_index[0])
155 wq->ring.desc_avail += (fnic->fw_ack_index[0]
160 + fnic->fw_ack_index[0] + 1);
168 (fnic->fw_ack_index[0] + 1) % wq->ring.desc_count;
171 fnic->fw_ack_recd[0] = 0;
178 * Sets/Clears bits in fnic's state_flags
181 __fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
187 spin_lock_irqsave(&fnic->fnic_lock, flags);
188 spin_lock_irqsave(fnic->lport->host->host_lock, host_lock_flags);
191 fnic->state_flags &= ~st_flags;
193 fnic->state_flags |= st_flags;
195 spin_unlock_irqrestore(fnic->lport->host->host_lock, host_lock_flags);
196 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
206 int fnic_fw_reset_handler(struct fnic *fnic)
208 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
213 fnic_set_state_flags(fnic, FNIC_FLAGS_FWRESET);
215 skb_queue_purge(&fnic->frame_queue);
216 skb_queue_purge(&fnic->tx_queue);
219 while (atomic_read(&fnic->in_flight))
222 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
224 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
225 free_wq_copy_descs(fnic, wq);
231 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
232 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
233 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
234 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
236 &fnic->fnic_stats.fw_stats.active_fw_reqs));
239 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
242 atomic64_inc(&fnic->fnic_stats.reset_stats.fw_resets);
243 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
246 fnic_clear_state_flags(fnic, FNIC_FLAGS_FWRESET);
247 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
259 int fnic_flogi_reg_handler(struct fnic *fnic, u32 fc_id)
261 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
263 struct fc_lport *lp = fnic->lport;
268 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
270 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
271 free_wq_copy_descs(fnic, wq);
278 if (fnic->ctlr.map_dest) {
282 memcpy(gw_mac, fnic->ctlr.dest_addr, ETH_ALEN);
286 if ((fnic->config.flags & VFCF_FIP_CAPABLE) && !fnic->ctlr.map_dest) {
289 fnic->data_src_addr,
291 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
293 fc_id, fnic->data_src_addr, gw_mac);
297 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
299 fc_id, fnic->ctlr.map_dest, gw_mac);
302 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
303 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
304 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
305 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
306 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
309 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
317 static inline int fnic_queue_wq_copy_desc(struct fnic *fnic,
327 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
344 io_req->sgl_list_pa = dma_map_single(&fnic->pdev->dev,
348 if (dma_mapping_error(&fnic->pdev->dev, io_req->sgl_list_pa)) {
354 io_req->sense_buf_pa = dma_map_single(&fnic->pdev->dev,
358 if (dma_mapping_error(&fnic->pdev->dev, io_req->sense_buf_pa)) {
359 dma_unmap_single(&fnic->pdev->dev, io_req->sgl_list_pa,
369 spin_lock_irqsave(&fnic->wq_copy_lock[0], intr_flags);
371 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
372 free_wq_copy_descs(fnic, wq);
375 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags);
376 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
389 if ((fnic->config.flags & VFCF_FCP_SEQ_LVL_ERR) &&
408 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
409 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
410 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
411 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
412 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
414 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags);
428 struct fnic *fnic = lport_priv(lp);
429 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
440 if (unlikely(fnic_chk_state_flags_locked(fnic, FNIC_FLAGS_IO_BLOCKED)))
443 if (unlikely(fnic_chk_state_flags_locked(fnic, FNIC_FLAGS_FWRESET)))
448 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
457 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
467 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
478 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
490 atomic_inc(&fnic->in_flight);
502 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC);
516 mempool_free(io_req, fnic->io_req_pool);
528 mempool_alloc(fnic->io_sgl_pool[io_req->sgl_type],
534 mempool_free(io_req, fnic->io_req_pool);
553 io_lock = fnic_io_lock_hash(fnic, sc);
566 wq = &fnic->wq_copy[0];
567 ret = fnic_queue_wq_copy_desc(fnic, wq, io_req, sc, sg_count);
581 fnic_release_ioreq_buf(fnic, io_req, sc);
582 mempool_free(io_req, fnic->io_req_pool);
584 atomic_dec(&fnic->in_flight);
614 atomic_dec(&fnic->in_flight);
626 static int fnic_fcpio_fw_reset_cmpl_handler(struct fnic *fnic,
634 struct reset_stats *reset_stats = &fnic->fnic_stats.reset_stats;
641 fnic_cleanup_io(fnic, SCSI_NO_TAG);
643 atomic64_set(&fnic->fnic_stats.fw_stats.active_fw_reqs, 0);
644 atomic64_set(&fnic->fnic_stats.io_stats.active_ios, 0);
645 atomic64_set(&fnic->io_cmpl_skip, 0);
647 spin_lock_irqsave(&fnic->fnic_lock, flags);
649 /* fnic should be in FC_TRANS_ETH_MODE */
650 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE) {
653 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
656 fnic->state = FNIC_IN_ETH_MODE;
659 fnic->lport->host,
660 "fnic fw_reset : failed %s\n",
669 fnic->state = FNIC_IN_FC_MODE;
675 fnic->lport->host,
677 " reset cmpl\n", fnic_state_to_str(fnic->state));
683 if (fnic->remove_wait)
684 complete(fnic->remove_wait);
687 * If fnic is being removed, or fw reset failed
690 if (fnic->remove_wait || ret) {
691 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
692 skb_queue_purge(&fnic->tx_queue);
696 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
698 fnic_flush_tx(fnic);
701 fnic_clear_state_flags(fnic, FNIC_FLAGS_FWRESET);
710 static int fnic_fcpio_flogi_reg_cmpl_handler(struct fnic *fnic,
721 /* Update fnic state based on status of flogi reg completion */
722 spin_lock_irqsave(&fnic->fnic_lock, flags);
724 if (fnic->state == FNIC_IN_ETH_TRANS_FC_MODE) {
728 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
730 fnic->state = FNIC_IN_FC_MODE;
733 fnic->lport->host,
734 "fnic flogi reg :failed %s\n",
736 fnic->state = FNIC_IN_ETH_MODE;
740 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
741 "Unexpected fnic state %s while"
743 fnic_state_to_str(fnic->state));
748 if (fnic->stop_rx_link_events) {
749 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
752 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
754 fnic_flush_tx(fnic);
755 queue_work(fnic_event_queue, &fnic->frame_work);
757 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
787 * instead of in the fnic
789 static inline void fnic_fcpio_ack_handler(struct fnic *fnic,
799 wq = &fnic->wq_copy[cq_index - fnic->raw_wq_count - fnic->rq_count];
800 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
802 fnic->fnic_stats.misc_stats.last_ack_time = jiffies;
804 fnic->fw_ack_index[0] = request_out;
805 fnic->fw_ack_recd[0] = 1;
808 &fnic->fnic_stats.misc_stats.ack_index_out_of_range);
810 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
812 fnic->lport->host->host_no, 0, 0, ox_id_tag[2], ox_id_tag[3],
820 static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic,
831 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
843 if (id >= fnic->fnic_max_tag_id) {
844 shost_printk(KERN_ERR, fnic->lport->host,
850 sc = scsi_host_find_tag(fnic->lport->host, id);
854 shost_printk(KERN_ERR, fnic->lport->host,
859 fnic->lport->host->host_no, id,
869 io_lock = fnic_io_lock_hash(fnic, sc);
877 shost_printk(KERN_ERR, fnic->lport->host,
904 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
993 shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n",
997 fnic_release_ioreq_buf(fnic, io_req, sc);
999 mempool_free(io_req, fnic->io_req_pool);
1016 fnic->lport->host_stats.fcp_input_requests++;
1017 fnic->fcp_input_bytes += xfer_len;
1019 fnic->lport->host_stats.fcp_output_requests++;
1020 fnic->fcp_output_bytes += xfer_len;
1022 fnic->lport->host_stats.fcp_control_requests++;
1025 if (atomic64_read(&fnic->io_cmpl_skip))
1026 atomic64_dec(&fnic->io_cmpl_skip);
1061 static void fnic_fcpio_itmf_cmpl_handler(struct fnic *fnic,
1070 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
1071 struct abort_stats *abts_stats = &fnic->fnic_stats.abts_stats;
1072 struct terminate_stats *term_stats = &fnic->fnic_stats.term_stats;
1073 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
1081 if ((id & FNIC_TAG_MASK) >= fnic->fnic_max_tag_id) {
1082 shost_printk(KERN_ERR, fnic->lport->host,
1088 sc = scsi_host_find_tag(fnic->lport->host, id & FNIC_TAG_MASK);
1092 shost_printk(KERN_ERR, fnic->lport->host,
1097 io_lock = fnic_io_lock_hash(fnic, sc);
1105 shost_printk(KERN_ERR, fnic->lport->host,
1116 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1138 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
1173 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1187 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1194 fnic_release_ioreq_buf(fnic, io_req, sc);
1195 mempool_free(io_req, fnic->io_req_pool);
1211 if (atomic64_read(&fnic->io_cmpl_skip))
1212 atomic64_dec(&fnic->io_cmpl_skip);
1229 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1244 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1253 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1262 shost_printk(KERN_ERR, fnic->lport->host,
1278 struct fnic *fnic = vnic_dev_priv(vdev);
1286 atomic64_dec(&fnic->fnic_stats.fw_stats.active_fw_reqs);
1294 fnic_fcpio_ack_handler(fnic, cq_index, desc);
1298 fnic_fcpio_icmnd_cmpl_handler(fnic, desc);
1302 fnic_fcpio_itmf_cmpl_handler(fnic, desc);
1307 fnic_fcpio_flogi_reg_cmpl_handler(fnic, desc);
1311 fnic_fcpio_fw_reset_cmpl_handler(fnic, desc);
1315 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1328 int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do)
1333 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
1339 for (i = 0; i < fnic->wq_copy_count; i++) {
1340 cq_index = i + fnic->raw_wq_count + fnic->rq_count;
1343 cur_work_done = vnic_cq_copy_service(&fnic->cq[cq_index],
1363 static void fnic_cleanup_io(struct fnic *fnic, int exclude_id)
1371 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
1373 for (i = 0; i < fnic->fnic_max_tag_id; i++) {
1377 io_lock = fnic_io_lock_tag(fnic, i);
1379 sc = scsi_host_find_tag(fnic->lport->host, i);
1417 fnic_release_ioreq_buf(fnic, io_req, sc);
1418 mempool_free(io_req, fnic->io_req_pool);
1421 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1426 if (atomic64_read(&fnic->io_cmpl_skip))
1427 atomic64_dec(&fnic->io_cmpl_skip);
1434 shost_printk(KERN_ERR, fnic->lport->host,
1456 struct fnic *fnic = vnic_dev_priv(wq->vdev);
1467 if (id >= fnic->fnic_max_tag_id)
1470 sc = scsi_host_find_tag(fnic->lport->host, id);
1474 io_lock = fnic_io_lock_hash(fnic, sc);
1480 /* fnic interrupts are turned off by now */
1492 fnic_release_ioreq_buf(fnic, io_req, sc);
1493 mempool_free(io_req, fnic->io_req_pool);
1497 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "wq_copy_cleanup_handler:"
1513 static inline int fnic_queue_abort_io_req(struct fnic *fnic, int tag,
1517 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
1518 struct Scsi_Host *host = fnic->lport->host;
1519 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
1523 if (unlikely(fnic_chk_state_flags_locked(fnic,
1528 atomic_inc(&fnic->in_flight);
1531 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
1533 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
1534 free_wq_copy_descs(fnic, wq);
1537 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
1538 atomic_dec(&fnic->in_flight);
1539 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1546 fnic->config.ra_tov, fnic->config.ed_tov);
1548 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
1549 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
1550 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
1551 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
1552 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
1554 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
1555 atomic_dec(&fnic->in_flight);
1560 static void fnic_rport_exch_reset(struct fnic *fnic, u32 port_id)
1569 struct reset_stats *reset_stats = &fnic->fnic_stats.reset_stats;
1570 struct terminate_stats *term_stats = &fnic->fnic_stats.term_stats;
1575 fnic->lport->host,
1579 if (fnic->in_remove)
1582 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) {
1584 io_lock = fnic_io_lock_tag(fnic, tag);
1586 sc = scsi_host_find_tag(fnic->lport->host, tag);
1601 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1617 shost_printk(KERN_ERR, fnic->lport->host,
1624 shost_printk(KERN_ERR, fnic->lport->host,
1636 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1643 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1651 if (fnic_queue_abort_io_req(fnic, abt_tag,
1692 struct fnic *fnic;
1714 fnic = lport_priv(lport);
1716 fnic->lport->host, "fnic_terminate_rport_io called"
1721 if (fnic->in_remove)
1724 reset_stats = &fnic->fnic_stats.reset_stats;
1725 term_stats = &fnic->fnic_stats.term_stats;
1727 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) {
1729 io_lock = fnic_io_lock_tag(fnic, tag);
1731 sc = scsi_host_find_tag(fnic->lport->host, tag);
1752 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1767 shost_printk(KERN_ERR, fnic->lport->host,
1773 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
1785 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1792 fnic->lport->host,
1800 if (fnic_queue_abort_io_req(fnic, abt_tag,
1837 struct fnic *fnic;
1860 fnic = lport_priv(lp);
1861 fnic_stats = &fnic->fnic_stats;
1862 abts_stats = &fnic->fnic_stats.abts_stats;
1863 term_stats = &fnic->fnic_stats.term_stats;
1868 fnic->lport->host,
1891 io_lock = fnic_io_lock_hash(fnic, sc);
1922 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
1951 if (fnic_queue_abort_io_req(fnic, sc->request->tag, task_req,
1979 (2 * fnic->config.ra_tov +
1980 fnic->config.ed_tov));
2012 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2037 fnic_release_ioreq_buf(fnic, io_req, sc);
2038 mempool_free(io_req, fnic->io_req_pool);
2045 if (atomic64_read(&fnic->io_cmpl_skip))
2046 atomic64_dec(&fnic->io_cmpl_skip);
2060 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2067 static inline int fnic_queue_dr_io_req(struct fnic *fnic,
2071 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
2072 struct Scsi_Host *host = fnic->lport->host;
2073 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
2079 if (unlikely(fnic_chk_state_flags_locked(fnic,
2084 atomic_inc(&fnic->in_flight);
2087 spin_lock_irqsave(&fnic->wq_copy_lock[0], intr_flags);
2089 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
2090 free_wq_copy_descs(fnic, wq);
2093 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2106 fnic->config.ra_tov, fnic->config.ed_tov);
2108 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
2109 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
2110 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
2111 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
2112 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
2115 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags);
2116 atomic_dec(&fnic->in_flight);
2127 static int fnic_clean_pending_aborts(struct fnic *fnic,
2143 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) {
2144 io_lock = fnic_io_lock_tag(fnic, tag);
2146 sc = scsi_host_find_tag(fnic->lport->host, tag);
2167 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2177 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2185 shost_printk(KERN_ERR, fnic->lport->host,
2203 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2214 if (fnic_queue_abort_io_req(fnic, abt_tag,
2236 (fnic->config.ed_tov));
2265 fnic_release_ioreq_buf(fnic, io_req, sc);
2266 mempool_free(io_req, fnic->io_req_pool);
2280 schedule_timeout(msecs_to_jiffies(2 * fnic->config.ed_tov));
2283 if (fnic_is_abts_pending(fnic, lr_sc))
2295 fnic_scsi_host_start_tag(struct fnic *fnic, struct scsi_cmnd *sc)
2315 fnic_scsi_host_end_tag(struct fnic *fnic, struct scsi_cmnd *sc)
2330 struct fnic *fnic;
2343 int tag_gen_flag = 0; /*to track tags allocated by fnic driver*/
2352 fnic = lport_priv(lp);
2353 fnic_stats = &fnic->fnic_stats;
2354 reset_stats = &fnic->fnic_stats.reset_stats;
2359 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2381 tag = fnic_scsi_host_start_tag(fnic, sc);
2387 io_lock = fnic_io_lock_hash(fnic, sc);
2396 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC);
2410 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "TAG %x\n", tag);
2416 if (fnic_queue_dr_io_req(fnic, sc, io_req)) {
2438 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2452 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2468 if (fnic_queue_abort_io_req(fnic,
2480 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2507 fnic->lport->host,
2520 if (fnic_clean_pending_aborts(fnic, sc, new_sc)) {
2523 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2544 fnic_release_ioreq_buf(fnic, io_req, sc);
2545 mempool_free(io_req, fnic->io_req_pool);
2559 fnic_scsi_host_end_tag(fnic, sc);
2561 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2576 struct fnic *fnic;
2581 fnic = lport_priv(lp);
2582 reset_stats = &fnic->fnic_stats.reset_stats;
2584 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2595 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2596 "Returning from fnic reset %s\n",
2623 struct fnic *fnic = lport_priv(lp);
2626 spin_lock_irqsave(&fnic->fnic_lock, flags);
2627 if (!fnic->internal_reset_inprogress) {
2628 fnic->internal_reset_inprogress = true;
2630 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2631 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2635 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2656 spin_lock_irqsave(&fnic->fnic_lock, flags);
2657 fnic->internal_reset_inprogress = false;
2658 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2670 struct fnic *fnic = lport_priv(lp);
2673 /* Issue firmware reset for fnic, wait for reset to complete */
2675 spin_lock_irqsave(&fnic->fnic_lock, flags);
2676 if (unlikely(fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)) {
2678 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2683 fnic->remove_wait = &remove_wait;
2684 old_state = fnic->state;
2685 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE;
2686 fnic_update_mac_locked(fnic, fnic->ctlr.ctl_src_addr);
2687 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2689 err = fnic_fw_reset_handler(fnic);
2691 spin_lock_irqsave(&fnic->fnic_lock, flags);
2692 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)
2693 fnic->state = old_state;
2694 fnic->remove_wait = NULL;
2695 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2703 spin_lock_irqsave(&fnic->fnic_lock, flags);
2704 fnic->remove_wait = NULL;
2705 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2707 (fnic->state == FNIC_IN_ETH_MODE) ?
2709 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2720 struct fnic *fnic = lport_priv(lp);
2724 spin_lock_irqsave(&fnic->fnic_lock, flags);
2725 if (unlikely(fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)) {
2727 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2731 old_state = fnic->state;
2732 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE;
2733 fnic_update_mac_locked(fnic, fnic->ctlr.ctl_src_addr);
2734 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2736 if (fnic_fw_reset_handler(fnic)) {
2737 spin_lock_irqsave(&fnic->fnic_lock, flags);
2738 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)
2739 fnic->state = old_state;
2740 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2751 struct fnic *fnic = lport_priv(lp);
2758 fnic_rport_exch_reset(fnic, did);
2766 if (!fnic->in_remove)
2784 int fnic_is_abts_pending(struct fnic *fnic, struct scsi_cmnd *lr_sc)
2798 for (tag = 0; tag < fnic->fnic_max_tag_id; tag++) {
2799 sc = scsi_host_find_tag(fnic->lport->host, tag);
2807 io_lock = fnic_io_lock_hash(fnic, sc);
2821 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,