Lines Matching refs:snic
34 #include "snic.h"
56 /* snic cmd status strings */
80 static void snic_scsi_cleanup(struct snic *, int);
112 snic_io_lock_hash(struct snic *snic, struct scsi_cmnd *sc)
116 return &snic->io_req_lock[hash];
120 snic_io_lock_tag(struct snic *snic, int tag)
122 return &snic->io_req_lock[tag & (SNIC_IO_LOCKS - 1)];
127 snic_release_req_buf(struct snic *snic,
142 SNIC_SCSI_DBG(snic->shost,
149 dma_unmap_single(&snic->pdev->dev,
156 snic_req_free(snic, rqi);
163 snic_queue_icmnd_req(struct snic *snic,
188 pa = dma_map_single(&snic->pdev->dev,
192 if (dma_mapping_error(&snic->pdev->dev, pa)) {
193 SNIC_HOST_ERR(snic->shost,
210 snic->config.hid, /* hid */
223 atomic64_inc(&snic->s_stats.io.active);
224 ret = snic_queue_wq_desc(snic, rqi->req, rqi->req_len);
226 atomic64_dec(&snic->s_stats.io.active);
227 SNIC_HOST_ERR(snic->shost,
231 snic_stats_update_active_ios(&snic->s_stats);
240 snic_issue_scsi_req(struct snic *snic,
256 SNIC_TRC((u16)snic->shost->host_no, tag, (ulong) sc, 0,
259 SNIC_HOST_ERR(snic->shost, "issue_sc:Failed to map SG List.\n");
265 rqi = snic_req_init(snic, sg_cnt);
281 io_lock = snic_io_lock_hash(snic, sc);
284 ret = snic_queue_icmnd_req(snic, rqi, sc, sg_cnt);
286 SNIC_HOST_ERR(snic->shost,
298 snic_release_req_buf(snic, rqi, sc);
300 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, 0, 0, 0,
305 struct snic_io_stats *iostats = &snic->s_stats.io;
313 SNIC_SCSI_DBG(snic->shost,
317 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, (ulong) rqi,
336 struct snic *snic = shost_priv(shost);
343 atomic64_inc(&snic->s_stats.misc.tgt_not_rdy);
350 if (snic_get_state(snic) != SNIC_ONLINE) {
351 SNIC_HOST_ERR(shost, "snic state is %s\n",
352 snic_state_str[snic_get_state(snic)]);
356 atomic_inc(&snic->ios_inflight);
361 ret = snic_issue_scsi_req(snic, tgt, sc);
367 atomic_dec(&snic->ios_inflight);
377 snic_proc_tmreq_pending_state(struct snic *snic,
409 snic_process_io_failed_state(struct snic *snic,
418 atomic64_inc(&snic->s_stats.misc.io_tmo);
423 atomic64_inc(&snic->s_stats.misc.io_aborted);
428 atomic64_inc(&snic->s_stats.misc.data_cnt_mismat);
434 atomic64_inc(&snic->s_stats.fw.out_of_res);
439 atomic64_inc(&snic->s_stats.io.io_not_found);
444 atomic64_inc(&snic->s_stats.misc.sgl_inval);
449 atomic64_inc(&snic->s_stats.fw.io_errs);
454 atomic64_inc(&snic->s_stats.fw.scsi_errs);
468 SNIC_SCSI_DBG(snic->shost,
474 SNIC_HOST_ERR(snic->shost, "fw returns failed status %s flags 0x%llx\n",
498 snic_process_icmnd_cmpl_status(struct snic *snic,
520 atomic64_inc(&snic->s_stats.misc.io_under_run);
524 atomic64_inc(&snic->s_stats.misc.qfull);
528 snic_process_io_failed_state(snic, icmnd_cmpl, sc, cmpl_stat);
529 atomic64_inc(&snic->s_stats.io.fail);
530 SNIC_HOST_ERR(snic->shost,
545 snic_icmnd_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq)
562 SNIC_SCSI_DBG(snic->shost,
566 if (cmnd_id >= snic->max_tag_id) {
567 SNIC_HOST_ERR(snic->shost,
573 sc = scsi_host_find_tag(snic->shost, cmnd_id);
577 atomic64_inc(&snic->s_stats.io.sc_null);
578 SNIC_HOST_ERR(snic->shost,
584 SNIC_TRC(snic->shost->host_no, cmnd_id, 0,
592 io_lock = snic_io_lock_hash(snic, sc);
596 SNIC_SCSI_DBG(snic->shost,
610 atomic64_inc(&snic->s_stats.io.req_null);
614 SNIC_HOST_ERR(snic->shost,
632 snic_proc_tmreq_pending_state(snic, sc, hdr_stat);
635 snic_stats_update_io_cmpl(&snic->s_stats);
641 SNIC_SCSI_DBG(snic->shost,
648 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
655 if (snic_process_icmnd_cmpl_status(snic, icmnd_cmpl, hdr_stat, sc)) {
657 SNIC_HOST_ERR(snic->shost,
670 snic_calc_io_process_time(snic, rqi);
672 snic_release_req_buf(snic, rqi, sc);
674 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
682 snic_stats_update_io_cmpl(&snic->s_stats);
686 snic_proc_dr_cmpl_locked(struct snic *snic,
697 SNIC_SCSI_DBG(snic->shost, "itmf_cmpl: Cmd State = %s\n",
703 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
707 SNIC_SCSI_DBG(snic->shost,
718 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
722 SNIC_SCSI_DBG(snic->shost,
734 SNIC_SCSI_DBG(snic->shost,
748 snic_update_abort_stats(struct snic *snic, u8 cmpl_stat)
750 struct snic_abort_stats *abt_stats = &snic->s_stats.abts;
752 SNIC_SCSI_DBG(snic->shost, "Updating Abort stats.\n");
773 snic_process_itmf_cmpl(struct snic *snic,
786 io_lock = snic_io_lock_hash(snic, sc);
797 atomic64_inc(&snic->s_stats.io.req_null);
800 SNIC_HOST_ERR(snic->shost,
817 snic_update_abort_stats(snic, cmpl_stat);
830 SNIC_SCSI_DBG(snic->shost,
850 SNIC_SCSI_DBG(snic->shost,
856 snic_release_req_buf(snic, rqi, sc);
859 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
871 snic_proc_dr_cmpl_locked(snic, fwreq, cmpl_stat, cmnd_id, sc);
884 SNIC_SCSI_DBG(snic->shost,
898 SNIC_HOST_ERR(snic->shost,
901 SNIC_HOST_ERR(snic->shost,
920 snic_itmf_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq)
932 SNIC_SCSI_DBG(snic->shost,
937 SNIC_SCSI_DBG(snic->shost,
949 if ((cmnd_id & SNIC_TAG_MASK) >= snic->max_tag_id) {
950 SNIC_HOST_ERR(snic->shost,
958 sc = scsi_host_find_tag(snic->shost, cmnd_id & SNIC_TAG_MASK);
963 atomic64_inc(&snic->s_stats.io.sc_null);
964 SNIC_HOST_ERR(snic->shost,
971 snic_process_itmf_cmpl(snic, fwreq, cmnd_id, hdr_stat, sc);
977 snic_hba_reset_scsi_cleanup(struct snic *snic, struct scsi_cmnd *sc)
979 struct snic_stats *st = &snic->s_stats;
982 SNIC_SCSI_DBG(snic->shost, "HBA Reset scsi cleanup.\n");
983 snic_scsi_cleanup(snic, snic_cmd_tag(sc));
998 * 1. Cleanup all the scsi cmds, release all snic specific cmds
1002 snic_hba_reset_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq)
1016 SNIC_HOST_INFO(snic->shost,
1020 SNIC_SCSI_DBG(snic->shost,
1027 SNIC_HOST_INFO(snic->shost,
1035 if (cmnd_id >= snic->max_tag_id) {
1036 SNIC_HOST_ERR(snic->shost,
1044 sc = scsi_host_find_tag(snic->shost, cmnd_id);
1047 atomic64_inc(&snic->s_stats.io.sc_null);
1048 SNIC_HOST_ERR(snic->shost,
1056 SNIC_HOST_INFO(snic->shost,
1060 io_lock = snic_io_lock_hash(snic, sc);
1063 if (!snic->remove_wait) {
1065 SNIC_HOST_ERR(snic->shost,
1076 atomic64_inc(&snic->s_stats.io.req_null);
1079 SNIC_HOST_ERR(snic->shost,
1092 snic_hba_reset_scsi_cleanup(snic, sc);
1094 SNIC_BUG_ON(snic_get_state(snic) != SNIC_OFFLINE &&
1095 snic_get_state(snic) != SNIC_FWRESET);
1099 spin_lock_irqsave(&snic->snic_lock, gflags);
1100 if (snic_get_state(snic) == SNIC_FWRESET)
1101 snic_set_state(snic, SNIC_ONLINE);
1102 spin_unlock_irqrestore(&snic->snic_lock, gflags);
1104 if (snic->remove_wait)
1105 complete(snic->remove_wait);
1108 atomic64_inc(&snic->s_stats.reset.hba_reset_cmpl);
1112 if (snic->config.xpt_type == SNIC_DAS)
1115 SNIC_SCSI_DBG(snic->shost, "reset_cmpl: Queuing discovery work.\n");
1116 queue_work(snic_glob->event_q, &snic->disc_work);
1122 snic_msg_ack_handler(struct snic *snic, struct snic_fw_req *fwreq)
1124 SNIC_HOST_INFO(snic->shost, "Message Ack Received.\n");
1130 snic_aen_handler(struct snic *snic, struct snic_fw_req *fwreq)
1139 SNIC_SCSI_DBG(snic->shost,
1147 SNIC_HOST_INFO(snic->shost, "aen:TGT_OFFLINE Event Recvd.\n");
1151 SNIC_HOST_INFO(snic->shost, "aen:TGT_ONLINE Event Recvd.\n");
1155 SNIC_HOST_INFO(snic->shost, "aen:LUN_OFFLINE Event Recvd.\n");
1159 SNIC_HOST_INFO(snic->shost, "aen:LUN_ONLINE Event Recvd.\n");
1163 SNIC_HOST_INFO(snic->shost, "aen:Config Change Event Recvd.\n");
1167 SNIC_HOST_INFO(snic->shost, "aen:TGT_ADD Event Recvd.\n");
1171 SNIC_HOST_INFO(snic->shost, "aen:TGT_DEL Event Recvd.\n");
1175 SNIC_HOST_INFO(snic->shost, "aen:LUN_ADD Event Recvd.\n");
1179 SNIC_HOST_INFO(snic->shost, "aen:LUN_DEL Event Recvd.\n");
1183 SNIC_HOST_INFO(snic->shost, "aen:DISC_CMPL Event Recvd.\n");
1187 SNIC_HOST_INFO(snic->shost, "aen:Unknown Event Recvd.\n");
1204 struct snic *snic = svnic_dev_priv(vdev);
1212 atomic64_dec(&snic->s_stats.fw.actv_reqs);
1217 /* Check for snic subsys errors */
1220 SNIC_HOST_ERR(snic->shost,
1225 SNIC_HOST_ERR(snic->shost,
1232 snic_io_exch_ver_cmpl_handler(snic, fwreq);
1236 snic_report_tgt_cmpl_handler(snic, fwreq);
1240 snic_icmnd_cmpl_handler(snic, fwreq);
1244 snic_itmf_cmpl_handler(snic, fwreq);
1248 snic_hba_reset_cmpl_handler(snic, fwreq);
1252 snic_msg_ack_handler(snic, fwreq);
1256 snic_aen_handler(snic, fwreq);
1261 SNIC_SCSI_DBG(snic->shost,
1269 if (cmpl_time > atomic64_read(&snic->s_stats.io.max_cmpl_time))
1270 atomic64_set(&snic->s_stats.io.max_cmpl_time, cmpl_time);
1281 snic_fwcq_cmpl_handler(struct snic *snic, int io_cmpl_work)
1286 struct snic_misc_stats *misc_stats = &snic->s_stats.misc;
1288 for (cq_idx = snic->wq_count; cq_idx < snic->cq_count; cq_idx++) {
1289 nent_per_cq = vnic_cq_fw_service(&snic->cq[cq_idx],
1307 snic_queue_itmf_req(struct snic *snic,
1327 snic->config.hid,
1342 ret = snic_queue_wq_desc(snic, tmreq, sizeof(*tmreq));
1344 SNIC_HOST_ERR(snic->shost,
1348 SNIC_SCSI_DBG(snic->shost,
1356 snic_issue_tm_req(struct snic *snic,
1365 if (snic_get_state(snic) == SNIC_FWRESET)
1368 atomic_inc(&snic->ios_inflight);
1370 SNIC_SCSI_DBG(snic->shost,
1376 tmreq = snic_dr_req_init(snic, rqi);
1379 tmreq = snic_abort_req_init(snic, rqi);
1389 ret = snic_queue_itmf_req(snic, tmreq, sc, tmf, req_id);
1393 SNIC_HOST_ERR(snic->shost,
1397 SNIC_SCSI_DBG(snic->shost,
1402 atomic_dec(&snic->ios_inflight);
1411 snic_queue_abort_req(struct snic *snic,
1416 SNIC_SCSI_DBG(snic->shost, "q_abtreq: sc %p, rqi %p, tag %x, tmf %d\n",
1422 return snic_issue_tm_req(snic, rqi, sc, tmf);
1429 snic_abort_finish(struct snic *snic, struct scsi_cmnd *sc)
1436 io_lock = snic_io_lock_hash(snic, sc);
1440 atomic64_inc(&snic->s_stats.io.req_null);
1443 SNIC_SCSI_DBG(snic->shost,
1460 atomic64_inc(&snic->s_stats.abts.drv_tmo);
1461 SNIC_SCSI_DBG(snic->shost,
1464 /* do not release snic request in timedout case */
1489 SNIC_HOST_INFO(snic->shost,
1497 snic_release_req_buf(snic, rqi, sc);
1506 snic_send_abort_and_wait(struct snic *snic, struct scsi_cmnd *sc)
1524 io_lock = snic_io_lock_hash(snic, sc);
1543 SNIC_HOST_ERR(snic->shost,
1573 SNIC_SCSI_DBG(snic->shost, "send_abt_cmd: TAG 0x%x\n", tag);
1578 ret = snic_queue_abort_req(snic, rqi, sc, tmf);
1580 atomic64_inc(&snic->s_stats.abts.q_fail);
1581 SNIC_HOST_ERR(snic->shost,
1600 atomic64_inc(&snic->s_stats.abts.num);
1607 SNIC_SCSI_DBG(snic->shost,
1634 struct snic *snic = shost_priv(sc->device->host);
1638 SNIC_SCSI_DBG(snic->shost, "abt_cmd:sc %p :0x%x :req = %p :tag = %d\n",
1641 if (unlikely(snic_get_state(snic) != SNIC_ONLINE)) {
1642 SNIC_HOST_ERR(snic->shost,
1651 ret = snic_send_abort_and_wait(snic, sc);
1655 ret = snic_abort_finish(snic, sc);
1658 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc,
1662 SNIC_SCSI_DBG(snic->shost,
1673 snic_is_abts_pending(struct snic *snic, struct scsi_cmnd *lr_sc)
1686 for (tag = 0; tag < snic->max_tag_id; tag++) {
1687 io_lock = snic_io_lock_tag(snic, tag);
1690 sc = scsi_host_find_tag(snic->shost, tag);
1709 SNIC_SCSI_DBG(snic->shost, "Found IO in %s on LUN\n",
1725 snic_dr_clean_single_req(struct snic *snic,
1738 io_lock = snic_io_lock_tag(snic, tag);
1740 sc = scsi_host_find_tag(snic->shost, tag);
1759 SNIC_SCSI_DBG(snic->shost,
1766 SNIC_SCSI_DBG(snic->shost,
1787 SNIC_SCSI_DBG(snic->shost,
1802 ret = snic_queue_abort_req(snic, rqi, sc, tmf);
1804 SNIC_HOST_ERR(snic->shost,
1841 SNIC_HOST_ERR(snic->shost,
1855 snic_release_req_buf(snic, rqi, sc);
1871 snic_dr_clean_pending_req(struct snic *snic, struct scsi_cmnd *lr_sc)
1877 for (tag = 0; tag < snic->max_tag_id; tag++) {
1881 ret = snic_dr_clean_single_req(snic, tag, lr_sdev);
1883 SNIC_HOST_ERR(snic->shost, "clean_err:tag = %d\n", tag);
1892 if (snic_is_abts_pending(snic, lr_sc)) {
1899 SNIC_SCSI_DBG(snic->shost, "clean_pending_req: Success.\n");
1905 SNIC_HOST_ERR(snic->shost,
1917 snic_dr_finish(struct snic *snic, struct scsi_cmnd *sc)
1925 io_lock = snic_io_lock_hash(snic, sc);
1930 SNIC_SCSI_DBG(snic->shost,
1945 SNIC_SCSI_DBG(snic->shost,
1955 SNIC_SCSI_DBG(snic->shost,
1962 SNIC_HOST_ERR(snic->shost,
1979 ret = snic_dr_clean_pending_req(snic, sc);
1982 SNIC_SCSI_DBG(snic->shost,
2005 snic_release_req_buf(snic, rqi, sc);
2012 snic_queue_dr_req(struct snic *snic,
2019 return snic_issue_tm_req(snic, rqi, sc, SNIC_ITMF_LUN_RESET);
2023 snic_send_dr_and_wait(struct snic *snic, struct scsi_cmnd *sc)
2032 io_lock = snic_io_lock_hash(snic, sc);
2037 SNIC_HOST_ERR(snic->shost,
2052 SNIC_SCSI_DBG(snic->shost, "dr: TAG = %x\n", tag);
2065 ret = snic_queue_dr_req(snic, rqi, sc);
2067 SNIC_HOST_ERR(snic->shost,
2112 snic_unlink_and_release_req(struct snic *snic, struct scsi_cmnd *sc, int flag)
2119 io_lock = snic_io_lock_hash(snic, sc);
2131 snic_release_req_buf(snic, rqi, sc);
2133 SNIC_TRC(snic->shost->host_no, snic_cmd_tag(sc), (ulong) sc,
2147 struct snic *snic = shost_priv(shost);
2161 snic_unlink_and_release_req(snic, sc, SNIC_DEV_RST_NOTSUP);
2166 if (unlikely(snic_get_state(snic) != SNIC_ONLINE)) {
2167 snic_unlink_and_release_req(snic, sc, 0);
2175 SNIC_HOST_INFO(snic->shost,
2178 rqi = snic_req_init(snic, 0);
2192 ret = snic_send_dr_and_wait(snic, sc);
2194 SNIC_HOST_ERR(snic->shost,
2198 snic_unlink_and_release_req(snic, sc, 0);
2203 ret = snic_dr_finish(snic, sc);
2206 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc,
2210 SNIC_SCSI_DBG(snic->shost,
2228 snic_issue_hba_reset(struct snic *snic, struct scsi_cmnd *sc)
2237 rqi = snic_req_init(snic, 0);
2247 SNIC_HOST_INFO(snic->shost, "issu_hr:Host reset thru ioctl.\n");
2253 io_lock = snic_io_lock_hash(snic, sc);
2259 snic->remove_wait = &wait;
2264 snic->config.hid, 0, (ulong) rqi);
2268 ret = snic_queue_wq_desc(snic, req, sizeof(*req));
2270 SNIC_HOST_ERR(snic->shost,
2280 atomic64_inc(&snic->s_stats.reset.hba_resets);
2281 SNIC_HOST_INFO(snic->shost, "Queued HBA Reset Successfully.\n");
2283 wait_for_completion_timeout(snic->remove_wait,
2286 if (snic_get_state(snic) == SNIC_FWRESET) {
2287 SNIC_HOST_ERR(snic->shost, "reset_cmpl: Reset Timedout.\n");
2294 snic->remove_wait = NULL;
2300 snic_req_free(snic, rqi);
2308 snic->remove_wait = NULL;
2314 snic_req_free(snic, rqi);
2317 SNIC_HOST_ERR(snic->shost,
2327 struct snic *snic = shost_priv(shost);
2332 /* Set snic state as SNIC_FWRESET*/
2333 sv_state = snic_get_state(snic);
2335 spin_lock_irqsave(&snic->snic_lock, flags);
2336 if (snic_get_state(snic) == SNIC_FWRESET) {
2337 spin_unlock_irqrestore(&snic->snic_lock, flags);
2346 snic_set_state(snic, SNIC_FWRESET);
2347 spin_unlock_irqrestore(&snic->snic_lock, flags);
2351 while (atomic_read(&snic->ios_inflight))
2354 ret = snic_issue_hba_reset(snic, sc);
2359 spin_lock_irqsave(&snic->snic_lock, flags);
2360 snic_set_state(snic, sv_state);
2361 spin_unlock_irqrestore(&snic->snic_lock, flags);
2362 atomic64_inc(&snic->s_stats.reset.hba_reset_fail);
2406 snic_cmpl_pending_tmreq(struct snic *snic, struct scsi_cmnd *sc)
2410 SNIC_SCSI_DBG(snic->shost,
2435 snic_scsi_cleanup(struct snic *snic, int ex_tag)
2444 SNIC_SCSI_DBG(snic->shost, "sc_clean: scsi cleanup.\n");
2446 for (tag = 0; tag < snic->max_tag_id; tag++) {
2451 io_lock = snic_io_lock_tag(snic, tag);
2453 sc = scsi_host_find_tag(snic->shost, tag);
2465 snic_cmpl_pending_tmreq(snic, sc);
2478 SNIC_SCSI_DBG(snic->shost,
2487 SNIC_HOST_INFO(snic->shost,
2491 snic_release_req_buf(snic, rqi, sc);
2495 SNIC_HOST_INFO(snic->shost,
2501 snic_stats_update_io_cmpl(&snic->s_stats);
2504 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc,
2515 snic_shutdown_scsi_cleanup(struct snic *snic)
2517 SNIC_HOST_INFO(snic->shost, "Shutdown time SCSI Cleanup.\n");
2519 snic_scsi_cleanup(snic, SCSI_NO_TAG);
2527 snic_internal_abort_io(struct snic *snic, struct scsi_cmnd *sc, int tmf)
2535 io_lock = snic_io_lock_hash(snic, sc);
2547 SNIC_SCSI_DBG(snic->shost,
2556 SNIC_SCSI_DBG(snic->shost,
2571 SNIC_SCSI_DBG(snic->shost, "internal_abts:dev rst sc %p\n", sc);
2574 SNIC_SCSI_DBG(snic->shost, "internal_abts: Issuing abts tag %x\n",
2579 ret = snic_queue_abort_req(snic, rqi, sc, tmf);
2581 SNIC_HOST_ERR(snic->shost,
2614 struct snic *snic = NULL;
2624 snic = shost_priv(snic_tgt_to_shost(tgt));
2625 SNIC_SCSI_DBG(snic->shost, "tgt_abt_io: Cleaning Pending IOs.\n");
2632 for (tag = 0; tag < snic->max_tag_id; tag++) {
2633 io_lock = snic_io_lock_tag(snic, tag);
2636 sc = scsi_host_find_tag(snic->shost, tag);
2651 ret = snic_internal_abort_io(snic, sc, tmf);
2653 SNIC_HOST_ERR(snic->shost,
2664 SNIC_SCSI_DBG(snic->shost, "tgt_abt_io: abt_cnt = %d\n", abt_cnt);