Lines Matching refs:fnic
29 #include "fnic.h"
93 static void fnic_cleanup_io(struct fnic *fnic);
95 static inline spinlock_t *fnic_io_lock_hash(struct fnic *fnic,
100 return &fnic->io_req_lock[hash];
103 static inline spinlock_t *fnic_io_lock_tag(struct fnic *fnic,
106 return &fnic->io_req_lock[tag & (FNIC_IO_LOCKS - 1)];
113 static void fnic_release_ioreq_buf(struct fnic *fnic,
118 dma_unmap_single(&fnic->pdev->dev, io_req->sgl_list_pa,
125 fnic->io_sgl_pool[io_req->sgl_type]);
127 dma_unmap_single(&fnic->pdev->dev, io_req->sense_buf_pa,
132 static int free_wq_copy_descs(struct fnic *fnic, struct vnic_wq_copy *wq)
135 if (!fnic->fw_ack_recd[0])
142 if (wq->to_clean_index <= fnic->fw_ack_index[0])
143 wq->ring.desc_avail += (fnic->fw_ack_index[0]
148 + fnic->fw_ack_index[0] + 1);
156 (fnic->fw_ack_index[0] + 1) % wq->ring.desc_count;
159 fnic->fw_ack_recd[0] = 0;
166 * Sets/Clears bits in fnic's state_flags
169 __fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
175 spin_lock_irqsave(&fnic->fnic_lock, flags);
176 spin_lock_irqsave(fnic->lport->host->host_lock, host_lock_flags);
179 fnic->state_flags &= ~st_flags;
181 fnic->state_flags |= st_flags;
183 spin_unlock_irqrestore(fnic->lport->host->host_lock, host_lock_flags);
184 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
194 int fnic_fw_reset_handler(struct fnic *fnic)
196 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
201 fnic_set_state_flags(fnic, FNIC_FLAGS_FWRESET);
203 skb_queue_purge(&fnic->frame_queue);
204 skb_queue_purge(&fnic->tx_queue);
207 while (atomic_read(&fnic->in_flight))
210 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
212 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
213 free_wq_copy_descs(fnic, wq);
219 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
220 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
221 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
222 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
224 &fnic->fnic_stats.fw_stats.active_fw_reqs));
227 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
230 atomic64_inc(&fnic->fnic_stats.reset_stats.fw_resets);
231 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
234 fnic_clear_state_flags(fnic, FNIC_FLAGS_FWRESET);
235 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
247 int fnic_flogi_reg_handler(struct fnic *fnic, u32 fc_id)
249 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
251 struct fc_lport *lp = fnic->lport;
256 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
258 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
259 free_wq_copy_descs(fnic, wq);
266 if (fnic->ctlr.map_dest) {
270 memcpy(gw_mac, fnic->ctlr.dest_addr, ETH_ALEN);
274 if ((fnic->config.flags & VFCF_FIP_CAPABLE) && !fnic->ctlr.map_dest) {
277 fnic->data_src_addr,
279 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
281 fc_id, fnic->data_src_addr, gw_mac);
285 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
287 fc_id, fnic->ctlr.map_dest, gw_mac);
290 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
291 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
292 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
293 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
294 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
297 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
305 static inline int fnic_queue_wq_copy_desc(struct fnic *fnic,
315 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
332 io_req->sgl_list_pa = dma_map_single(&fnic->pdev->dev,
336 if (dma_mapping_error(&fnic->pdev->dev, io_req->sgl_list_pa)) {
342 io_req->sense_buf_pa = dma_map_single(&fnic->pdev->dev,
346 if (dma_mapping_error(&fnic->pdev->dev, io_req->sense_buf_pa)) {
347 dma_unmap_single(&fnic->pdev->dev, io_req->sgl_list_pa,
357 spin_lock_irqsave(&fnic->wq_copy_lock[0], intr_flags);
359 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
360 free_wq_copy_descs(fnic, wq);
363 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags);
364 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
377 if ((fnic->config.flags & VFCF_FCP_SEQ_LVL_ERR) &&
396 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
397 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
398 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
399 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
400 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
402 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags);
418 struct fnic *fnic = lport_priv(lp);
419 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
430 if (unlikely(fnic_chk_state_flags_locked(fnic, FNIC_FLAGS_IO_BLOCKED)))
433 if (unlikely(fnic_chk_state_flags_locked(fnic, FNIC_FLAGS_FWRESET)))
438 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
447 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
457 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
468 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
480 atomic_inc(&fnic->in_flight);
492 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC);
505 mempool_free(io_req, fnic->io_req_pool);
517 mempool_alloc(fnic->io_sgl_pool[io_req->sgl_type],
523 mempool_free(io_req, fnic->io_req_pool);
542 io_lock = fnic_io_lock_hash(fnic, sc);
554 wq = &fnic->wq_copy[0];
555 ret = fnic_queue_wq_copy_desc(fnic, wq, io_req, sc, sg_count);
568 fnic_release_ioreq_buf(fnic, io_req, sc);
569 mempool_free(io_req, fnic->io_req_pool);
571 atomic_dec(&fnic->in_flight);
600 atomic_dec(&fnic->in_flight);
612 static int fnic_fcpio_fw_reset_cmpl_handler(struct fnic *fnic,
620 struct reset_stats *reset_stats = &fnic->fnic_stats.reset_stats;
627 fnic_cleanup_io(fnic);
629 atomic64_set(&fnic->fnic_stats.fw_stats.active_fw_reqs, 0);
630 atomic64_set(&fnic->fnic_stats.io_stats.active_ios, 0);
631 atomic64_set(&fnic->io_cmpl_skip, 0);
633 spin_lock_irqsave(&fnic->fnic_lock, flags);
635 /* fnic should be in FC_TRANS_ETH_MODE */
636 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE) {
639 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
642 fnic->state = FNIC_IN_ETH_MODE;
645 fnic->lport->host,
646 "fnic fw_reset : failed %s\n",
655 fnic->state = FNIC_IN_FC_MODE;
661 fnic->lport->host,
663 " reset cmpl\n", fnic_state_to_str(fnic->state));
669 if (fnic->remove_wait)
670 complete(fnic->remove_wait);
673 * If fnic is being removed, or fw reset failed
676 if (fnic->remove_wait || ret) {
677 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
678 skb_queue_purge(&fnic->tx_queue);
682 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
684 fnic_flush_tx(fnic);
687 fnic_clear_state_flags(fnic, FNIC_FLAGS_FWRESET);
696 static int fnic_fcpio_flogi_reg_cmpl_handler(struct fnic *fnic,
707 /* Update fnic state based on status of flogi reg completion */
708 spin_lock_irqsave(&fnic->fnic_lock, flags);
710 if (fnic->state == FNIC_IN_ETH_TRANS_FC_MODE) {
714 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
716 fnic->state = FNIC_IN_FC_MODE;
719 fnic->lport->host,
720 "fnic flogi reg :failed %s\n",
722 fnic->state = FNIC_IN_ETH_MODE;
726 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
727 "Unexpected fnic state %s while"
729 fnic_state_to_str(fnic->state));
734 if (fnic->stop_rx_link_events) {
735 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
738 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
740 fnic_flush_tx(fnic);
741 queue_work(fnic_event_queue, &fnic->frame_work);
743 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
773 * instead of in the fnic
775 static inline void fnic_fcpio_ack_handler(struct fnic *fnic,
785 wq = &fnic->wq_copy[cq_index - fnic->raw_wq_count - fnic->rq_count];
786 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
788 fnic->fnic_stats.misc_stats.last_ack_time = jiffies;
790 fnic->fw_ack_index[0] = request_out;
791 fnic->fw_ack_recd[0] = 1;
794 &fnic->fnic_stats.misc_stats.ack_index_out_of_range);
796 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
798 fnic->lport->host->host_no, 0, 0, ox_id_tag[2], ox_id_tag[3],
806 static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic,
817 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
829 if (id >= fnic->fnic_max_tag_id) {
830 shost_printk(KERN_ERR, fnic->lport->host,
836 sc = scsi_host_find_tag(fnic->lport->host, id);
840 shost_printk(KERN_ERR, fnic->lport->host,
845 fnic->lport->host->host_no, id,
855 io_lock = fnic_io_lock_hash(fnic, sc);
863 shost_printk(KERN_ERR, fnic->lport->host,
890 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
978 shost_printk(KERN_ERR, fnic->lport->host, "hdr status = %s\n",
982 fnic_release_ioreq_buf(fnic, io_req, sc);
998 fnic->lport->host_stats.fcp_input_requests++;
999 fnic->fcp_input_bytes += xfer_len;
1001 fnic->lport->host_stats.fcp_output_requests++;
1002 fnic->fcp_output_bytes += xfer_len;
1004 fnic->lport->host_stats.fcp_control_requests++;
1010 mempool_free(io_req, fnic->io_req_pool);
1013 if (atomic64_read(&fnic->io_cmpl_skip))
1014 atomic64_dec(&fnic->io_cmpl_skip);
1045 static void fnic_fcpio_itmf_cmpl_handler(struct fnic *fnic,
1054 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
1055 struct abort_stats *abts_stats = &fnic->fnic_stats.abts_stats;
1056 struct terminate_stats *term_stats = &fnic->fnic_stats.term_stats;
1057 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
1067 if (tag == fnic->fnic_max_tag_id) {
1069 shost_printk(KERN_ERR, fnic->lport->host,
1074 } else if (tag > fnic->fnic_max_tag_id) {
1075 shost_printk(KERN_ERR, fnic->lport->host,
1081 if ((tag == fnic->fnic_max_tag_id) && (id & FNIC_TAG_DEV_RST)) {
1082 sc = fnic->sgreset_sc;
1083 io_lock = &fnic->sgreset_lock;
1085 sc = scsi_host_find_tag(fnic->lport->host, id & FNIC_TAG_MASK);
1086 io_lock = fnic_io_lock_hash(fnic, sc);
1092 shost_printk(KERN_ERR, fnic->lport->host,
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);
1209 if (atomic64_read(&fnic->io_cmpl_skip))
1210 atomic64_dec(&fnic->io_cmpl_skip);
1224 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1238 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1247 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1256 shost_printk(KERN_ERR, fnic->lport->host,
1272 struct fnic *fnic = vnic_dev_priv(vdev);
1280 atomic64_dec(&fnic->fnic_stats.fw_stats.active_fw_reqs);
1288 fnic_fcpio_ack_handler(fnic, cq_index, desc);
1292 fnic_fcpio_icmnd_cmpl_handler(fnic, desc);
1296 fnic_fcpio_itmf_cmpl_handler(fnic, desc);
1301 fnic_fcpio_flogi_reg_cmpl_handler(fnic, desc);
1305 fnic_fcpio_fw_reset_cmpl_handler(fnic, desc);
1309 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1322 int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do)
1327 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
1333 for (i = 0; i < fnic->wq_copy_count; i++) {
1334 cq_index = i + fnic->raw_wq_count + fnic->rq_count;
1337 cur_work_done = vnic_cq_copy_service(&fnic->cq[cq_index],
1360 struct fnic *fnic = data;
1365 struct fnic_stats *fnic_stats = &fnic->fnic_stats;
1367 io_lock = fnic_io_lock_tag(fnic, tag);
1402 fnic_release_ioreq_buf(fnic, io_req, sc);
1403 mempool_free(io_req, fnic->io_req_pool);
1407 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1411 if (atomic64_read(&fnic->io_cmpl_skip))
1412 atomic64_dec(&fnic->io_cmpl_skip);
1418 shost_printk(KERN_ERR, fnic->lport->host,
1436 static void fnic_cleanup_io(struct fnic *fnic)
1438 scsi_host_busy_iter(fnic->lport->host,
1439 fnic_cleanup_io_iter, fnic);
1446 struct fnic *fnic = vnic_dev_priv(wq->vdev);
1457 if (id >= fnic->fnic_max_tag_id)
1460 sc = scsi_host_find_tag(fnic->lport->host, id);
1464 io_lock = fnic_io_lock_hash(fnic, sc);
1470 /* fnic interrupts are turned off by now */
1482 fnic_release_ioreq_buf(fnic, io_req, sc);
1483 mempool_free(io_req, fnic->io_req_pool);
1487 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "wq_copy_cleanup_handler:"
1501 static inline int fnic_queue_abort_io_req(struct fnic *fnic, int tag,
1505 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
1506 struct Scsi_Host *host = fnic->lport->host;
1507 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
1511 if (unlikely(fnic_chk_state_flags_locked(fnic,
1516 atomic_inc(&fnic->in_flight);
1519 spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
1521 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
1522 free_wq_copy_descs(fnic, wq);
1525 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
1526 atomic_dec(&fnic->in_flight);
1527 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1534 fnic->config.ra_tov, fnic->config.ed_tov);
1536 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
1537 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
1538 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
1539 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
1540 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
1542 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], flags);
1543 atomic_dec(&fnic->in_flight);
1549 struct fnic *fnic;
1557 struct fnic *fnic = iter_data->fnic;
1562 struct reset_stats *reset_stats = &fnic->fnic_stats.reset_stats;
1563 struct terminate_stats *term_stats = &fnic->fnic_stats.term_stats;
1567 io_lock = fnic_io_lock_tag(fnic, abt_tag);
1579 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1595 shost_printk(KERN_ERR, fnic->lport->host,
1602 shost_printk(KERN_ERR, fnic->lport->host,
1615 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1619 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1627 if (fnic_queue_abort_io_req(fnic, abt_tag,
1653 static void fnic_rport_exch_reset(struct fnic *fnic, u32 port_id)
1655 struct terminate_stats *term_stats = &fnic->fnic_stats.term_stats;
1657 .fnic = fnic,
1663 fnic->lport->host,
1667 if (fnic->in_remove)
1670 scsi_host_busy_iter(fnic->lport->host, fnic_rport_abort_io_iter,
1681 struct fnic *fnic;
1699 fnic = lport_priv(lport);
1701 fnic->lport->host, "fnic_terminate_rport_io called"
1706 if (fnic->in_remove)
1709 fnic_rport_exch_reset(fnic, rport->port_id);
1721 struct fnic *fnic;
1744 fnic = lport_priv(lp);
1745 fnic_stats = &fnic->fnic_stats;
1746 abts_stats = &fnic->fnic_stats.abts_stats;
1747 term_stats = &fnic->fnic_stats.term_stats;
1751 fnic->lport->host,
1774 io_lock = fnic_io_lock_hash(fnic, sc);
1805 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
1834 if (fnic_queue_abort_io_req(fnic, tag, task_req, fc_lun.scsi_lun,
1862 (2 * fnic->config.ra_tov +
1863 fnic->config.ed_tov));
1895 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1920 fnic_release_ioreq_buf(fnic, io_req, sc);
1921 mempool_free(io_req, fnic->io_req_pool);
1927 if (atomic64_read(&fnic->io_cmpl_skip))
1928 atomic64_dec(&fnic->io_cmpl_skip);
1940 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1947 static inline int fnic_queue_dr_io_req(struct fnic *fnic,
1951 struct vnic_wq_copy *wq = &fnic->wq_copy[0];
1952 struct Scsi_Host *host = fnic->lport->host;
1953 struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
1963 if (unlikely(fnic_chk_state_flags_locked(fnic,
1968 atomic_inc(&fnic->in_flight);
1971 spin_lock_irqsave(&fnic->wq_copy_lock[0], intr_flags);
1973 if (vnic_wq_copy_desc_avail(wq) <= fnic->wq_copy_desc_low[0])
1974 free_wq_copy_descs(fnic, wq);
1977 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
1991 fnic->config.ra_tov, fnic->config.ed_tov);
1993 atomic64_inc(&fnic->fnic_stats.fw_stats.active_fw_reqs);
1994 if (atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs) >
1995 atomic64_read(&fnic->fnic_stats.fw_stats.max_fw_reqs))
1996 atomic64_set(&fnic->fnic_stats.fw_stats.max_fw_reqs,
1997 atomic64_read(&fnic->fnic_stats.fw_stats.active_fw_reqs));
2000 spin_unlock_irqrestore(&fnic->wq_copy_lock[0], intr_flags);
2001 atomic_dec(&fnic->in_flight);
2007 struct fnic *fnic;
2016 struct fnic *fnic = iter_data->fnic;
2029 io_lock = fnic_io_lock_tag(fnic, abt_tag);
2041 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2051 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2059 shost_printk(KERN_ERR, fnic->lport->host,
2076 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2087 if (fnic_queue_abort_io_req(fnic, abt_tag,
2108 (fnic->config.ed_tov));
2137 fnic_release_ioreq_buf(fnic, io_req, sc);
2138 mempool_free(io_req, fnic->io_req_pool);
2158 static int fnic_clean_pending_aborts(struct fnic *fnic,
2165 .fnic = fnic,
2172 scsi_host_busy_iter(fnic->lport->host,
2178 schedule_timeout(msecs_to_jiffies(2 * fnic->config.ed_tov));
2181 if (fnic_is_abts_pending(fnic, lr_sc))
2185 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2199 struct fnic *fnic;
2220 fnic = lport_priv(lp);
2221 fnic_stats = &fnic->fnic_stats;
2222 reset_stats = &fnic->fnic_stats.reset_stats;
2227 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2250 mutex_lock(&fnic->sgreset_mutex);
2251 tag = fnic->fnic_max_tag_id;
2253 fnic->sgreset_sc = sc;
2254 io_lock = &fnic->sgreset_lock;
2255 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2259 io_lock = fnic_io_lock_hash(fnic, sc);
2269 io_req = mempool_alloc(fnic->io_req_pool, GFP_ATOMIC);
2285 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host, "TAG %x\n", tag);
2291 if (fnic_queue_dr_io_req(fnic, sc, io_req)) {
2313 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2327 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2343 if (fnic_queue_abort_io_req(fnic,
2355 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2382 fnic->lport->host,
2395 if (fnic_clean_pending_aborts(fnic, sc, new_sc)) {
2398 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2419 fnic_release_ioreq_buf(fnic, io_req, sc);
2420 mempool_free(io_req, fnic->io_req_pool);
2432 fnic->sgreset_sc = NULL;
2433 mutex_unlock(&fnic->sgreset_mutex);
2436 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2451 struct fnic *fnic;
2456 fnic = lport_priv(lp);
2457 reset_stats = &fnic->fnic_stats.reset_stats;
2459 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2470 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2471 "Returning from fnic reset %s\n",
2498 struct fnic *fnic = lport_priv(lp);
2501 spin_lock_irqsave(&fnic->fnic_lock, flags);
2502 if (!fnic->internal_reset_inprogress) {
2503 fnic->internal_reset_inprogress = true;
2505 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2506 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2510 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2531 spin_lock_irqsave(&fnic->fnic_lock, flags);
2532 fnic->internal_reset_inprogress = false;
2533 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2545 struct fnic *fnic = lport_priv(lp);
2548 /* Issue firmware reset for fnic, wait for reset to complete */
2550 spin_lock_irqsave(&fnic->fnic_lock, flags);
2551 if (unlikely(fnic->state == FNIC_IN_FC_TRANS_ETH_MODE) &&
2552 fnic->link_events) {
2554 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2559 fnic->remove_wait = &remove_wait;
2560 old_state = fnic->state;
2561 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE;
2562 fnic_update_mac_locked(fnic, fnic->ctlr.ctl_src_addr);
2563 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2565 err = fnic_fw_reset_handler(fnic);
2567 spin_lock_irqsave(&fnic->fnic_lock, flags);
2568 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)
2569 fnic->state = old_state;
2570 fnic->remove_wait = NULL;
2571 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2579 spin_lock_irqsave(&fnic->fnic_lock, flags);
2580 fnic->remove_wait = NULL;
2581 FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
2583 (fnic->state == FNIC_IN_ETH_MODE) ?
2585 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2596 struct fnic *fnic = lport_priv(lp);
2600 spin_lock_irqsave(&fnic->fnic_lock, flags);
2601 if (unlikely(fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)) {
2603 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2607 old_state = fnic->state;
2608 fnic->state = FNIC_IN_FC_TRANS_ETH_MODE;
2609 fnic_update_mac_locked(fnic, fnic->ctlr.ctl_src_addr);
2610 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2612 if (fnic_fw_reset_handler(fnic)) {
2613 spin_lock_irqsave(&fnic->fnic_lock, flags);
2614 if (fnic->state == FNIC_IN_FC_TRANS_ETH_MODE)
2615 fnic->state = old_state;
2616 spin_unlock_irqrestore(&fnic->fnic_lock, flags);
2627 struct fnic *fnic = lport_priv(lp);
2634 fnic_rport_exch_reset(fnic, did);
2642 if (!fnic->in_remove)
2656 struct fnic *fnic = iter_data->fnic;
2671 io_lock = fnic_io_lock_hash(fnic, sc);
2684 FNIC_SCSI_DBG(KERN_INFO, fnic->lport->host,
2702 int fnic_is_abts_pending(struct fnic *fnic, struct scsi_cmnd *lr_sc)
2705 .fnic = fnic,
2716 scsi_host_busy_iter(fnic->lport->host,