Lines Matching refs:snic

20 #include "snic.h"
42 /* snic cmd status strings */
66 static void snic_scsi_cleanup(struct snic *, int);
98 snic_io_lock_hash(struct snic *snic, struct scsi_cmnd *sc)
102 return &snic->io_req_lock[hash];
106 snic_io_lock_tag(struct snic *snic, int tag)
108 return &snic->io_req_lock[tag & (SNIC_IO_LOCKS - 1)];
113 snic_release_req_buf(struct snic *snic,
128 SNIC_SCSI_DBG(snic->shost,
135 dma_unmap_single(&snic->pdev->dev,
142 snic_req_free(snic, rqi);
149 snic_queue_icmnd_req(struct snic *snic,
174 pa = dma_map_single(&snic->pdev->dev,
178 if (dma_mapping_error(&snic->pdev->dev, pa)) {
179 SNIC_HOST_ERR(snic->shost,
196 snic->config.hid, /* hid */
209 atomic64_inc(&snic->s_stats.io.active);
210 ret = snic_queue_wq_desc(snic, rqi->req, rqi->req_len);
212 atomic64_dec(&snic->s_stats.io.active);
213 SNIC_HOST_ERR(snic->shost,
217 snic_stats_update_active_ios(&snic->s_stats);
226 snic_issue_scsi_req(struct snic *snic,
242 SNIC_TRC((u16)snic->shost->host_no, tag, (ulong) sc, 0,
245 SNIC_HOST_ERR(snic->shost, "issue_sc:Failed to map SG List.\n");
251 rqi = snic_req_init(snic, sg_cnt);
267 io_lock = snic_io_lock_hash(snic, sc);
270 ret = snic_queue_icmnd_req(snic, rqi, sc, sg_cnt);
272 SNIC_HOST_ERR(snic->shost,
284 snic_release_req_buf(snic, rqi, sc);
286 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, 0, 0, 0,
291 struct snic_io_stats *iostats = &snic->s_stats.io;
299 SNIC_SCSI_DBG(snic->shost,
303 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, (ulong) rqi,
322 struct snic *snic = shost_priv(shost);
329 atomic64_inc(&snic->s_stats.misc.tgt_not_rdy);
336 if (snic_get_state(snic) != SNIC_ONLINE) {
337 SNIC_HOST_ERR(shost, "snic state is %s\n",
338 snic_state_str[snic_get_state(snic)]);
342 atomic_inc(&snic->ios_inflight);
347 ret = snic_issue_scsi_req(snic, tgt, sc);
353 atomic_dec(&snic->ios_inflight);
363 snic_proc_tmreq_pending_state(struct snic *snic,
395 snic_process_io_failed_state(struct snic *snic,
404 atomic64_inc(&snic->s_stats.misc.io_tmo);
409 atomic64_inc(&snic->s_stats.misc.io_aborted);
414 atomic64_inc(&snic->s_stats.misc.data_cnt_mismat);
420 atomic64_inc(&snic->s_stats.fw.out_of_res);
425 atomic64_inc(&snic->s_stats.io.io_not_found);
430 atomic64_inc(&snic->s_stats.misc.sgl_inval);
435 atomic64_inc(&snic->s_stats.fw.io_errs);
440 atomic64_inc(&snic->s_stats.fw.scsi_errs);
454 SNIC_SCSI_DBG(snic->shost,
460 SNIC_HOST_ERR(snic->shost, "fw returns failed status %s flags 0x%llx\n",
484 snic_process_icmnd_cmpl_status(struct snic *snic,
502 atomic64_inc(&snic->s_stats.misc.io_under_run);
505 atomic64_inc(&snic->s_stats.misc.qfull);
509 snic_process_io_failed_state(snic, icmnd_cmpl, sc, cmpl_stat);
510 atomic64_inc(&snic->s_stats.io.fail);
511 SNIC_HOST_ERR(snic->shost,
526 snic_icmnd_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq)
543 SNIC_SCSI_DBG(snic->shost,
547 if (cmnd_id >= snic->max_tag_id) {
548 SNIC_HOST_ERR(snic->shost,
554 sc = scsi_host_find_tag(snic->shost, cmnd_id);
558 atomic64_inc(&snic->s_stats.io.sc_null);
559 SNIC_HOST_ERR(snic->shost,
565 SNIC_TRC(snic->shost->host_no, cmnd_id, 0,
573 io_lock = snic_io_lock_hash(snic, sc);
577 SNIC_SCSI_DBG(snic->shost,
591 atomic64_inc(&snic->s_stats.io.req_null);
595 SNIC_HOST_ERR(snic->shost,
613 snic_proc_tmreq_pending_state(snic, sc, hdr_stat);
616 snic_stats_update_io_cmpl(&snic->s_stats);
622 SNIC_SCSI_DBG(snic->shost,
629 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
636 if (snic_process_icmnd_cmpl_status(snic, icmnd_cmpl, hdr_stat, sc)) {
638 SNIC_HOST_ERR(snic->shost,
651 snic_calc_io_process_time(snic, rqi);
653 snic_release_req_buf(snic, rqi, sc);
655 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
662 snic_stats_update_io_cmpl(&snic->s_stats);
666 snic_proc_dr_cmpl_locked(struct snic *snic,
677 SNIC_SCSI_DBG(snic->shost, "itmf_cmpl: Cmd State = %s\n",
683 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
687 SNIC_SCSI_DBG(snic->shost,
698 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
702 SNIC_SCSI_DBG(snic->shost,
714 SNIC_SCSI_DBG(snic->shost,
728 snic_update_abort_stats(struct snic *snic, u8 cmpl_stat)
730 struct snic_abort_stats *abt_stats = &snic->s_stats.abts;
732 SNIC_SCSI_DBG(snic->shost, "Updating Abort stats.\n");
753 snic_process_itmf_cmpl(struct snic *snic,
766 io_lock = snic_io_lock_hash(snic, sc);
777 atomic64_inc(&snic->s_stats.io.req_null);
780 SNIC_HOST_ERR(snic->shost,
797 snic_update_abort_stats(snic, cmpl_stat);
810 SNIC_SCSI_DBG(snic->shost,
830 SNIC_SCSI_DBG(snic->shost,
836 snic_release_req_buf(snic, rqi, sc);
838 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc,
849 snic_proc_dr_cmpl_locked(snic, fwreq, cmpl_stat, cmnd_id, sc);
862 SNIC_SCSI_DBG(snic->shost,
876 SNIC_HOST_ERR(snic->shost,
879 SNIC_HOST_ERR(snic->shost,
898 snic_itmf_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq)
910 SNIC_SCSI_DBG(snic->shost,
915 SNIC_SCSI_DBG(snic->shost,
927 if ((cmnd_id & SNIC_TAG_MASK) >= snic->max_tag_id) {
928 SNIC_HOST_ERR(snic->shost,
936 sc = scsi_host_find_tag(snic->shost, cmnd_id & SNIC_TAG_MASK);
941 atomic64_inc(&snic->s_stats.io.sc_null);
942 SNIC_HOST_ERR(snic->shost,
949 snic_process_itmf_cmpl(snic, fwreq, cmnd_id, hdr_stat, sc);
955 snic_hba_reset_scsi_cleanup(struct snic *snic, struct scsi_cmnd *sc)
957 struct snic_stats *st = &snic->s_stats;
960 SNIC_SCSI_DBG(snic->shost, "HBA Reset scsi cleanup.\n");
961 snic_scsi_cleanup(snic, snic_cmd_tag(sc));
976 * 1. Cleanup all the scsi cmds, release all snic specific cmds
980 snic_hba_reset_cmpl_handler(struct snic *snic, struct snic_fw_req *fwreq)
994 SNIC_HOST_INFO(snic->shost,
998 SNIC_SCSI_DBG(snic->shost,
1005 SNIC_HOST_INFO(snic->shost,
1013 if (cmnd_id >= snic->max_tag_id) {
1014 SNIC_HOST_ERR(snic->shost,
1022 sc = scsi_host_find_tag(snic->shost, cmnd_id);
1025 atomic64_inc(&snic->s_stats.io.sc_null);
1026 SNIC_HOST_ERR(snic->shost,
1034 SNIC_HOST_INFO(snic->shost,
1038 io_lock = snic_io_lock_hash(snic, sc);
1041 if (!snic->remove_wait) {
1043 SNIC_HOST_ERR(snic->shost,
1054 atomic64_inc(&snic->s_stats.io.req_null);
1057 SNIC_HOST_ERR(snic->shost,
1070 snic_hba_reset_scsi_cleanup(snic, sc);
1072 SNIC_BUG_ON(snic_get_state(snic) != SNIC_OFFLINE &&
1073 snic_get_state(snic) != SNIC_FWRESET);
1077 spin_lock_irqsave(&snic->snic_lock, gflags);
1078 if (snic_get_state(snic) == SNIC_FWRESET)
1079 snic_set_state(snic, SNIC_ONLINE);
1080 spin_unlock_irqrestore(&snic->snic_lock, gflags);
1082 if (snic->remove_wait)
1083 complete(snic->remove_wait);
1086 atomic64_inc(&snic->s_stats.reset.hba_reset_cmpl);
1090 if (snic->config.xpt_type == SNIC_DAS)
1093 SNIC_SCSI_DBG(snic->shost, "reset_cmpl: Queuing discovery work.\n");
1094 queue_work(snic_glob->event_q, &snic->disc_work);
1100 snic_msg_ack_handler(struct snic *snic, struct snic_fw_req *fwreq)
1102 SNIC_HOST_INFO(snic->shost, "Message Ack Received.\n");
1108 snic_aen_handler(struct snic *snic, struct snic_fw_req *fwreq)
1117 SNIC_SCSI_DBG(snic->shost,
1125 SNIC_HOST_INFO(snic->shost, "aen:TGT_OFFLINE Event Recvd.\n");
1129 SNIC_HOST_INFO(snic->shost, "aen:TGT_ONLINE Event Recvd.\n");
1133 SNIC_HOST_INFO(snic->shost, "aen:LUN_OFFLINE Event Recvd.\n");
1137 SNIC_HOST_INFO(snic->shost, "aen:LUN_ONLINE Event Recvd.\n");
1141 SNIC_HOST_INFO(snic->shost, "aen:Config Change Event Recvd.\n");
1145 SNIC_HOST_INFO(snic->shost, "aen:TGT_ADD Event Recvd.\n");
1149 SNIC_HOST_INFO(snic->shost, "aen:TGT_DEL Event Recvd.\n");
1153 SNIC_HOST_INFO(snic->shost, "aen:LUN_ADD Event Recvd.\n");
1157 SNIC_HOST_INFO(snic->shost, "aen:LUN_DEL Event Recvd.\n");
1161 SNIC_HOST_INFO(snic->shost, "aen:DISC_CMPL Event Recvd.\n");
1165 SNIC_HOST_INFO(snic->shost, "aen:Unknown Event Recvd.\n");
1182 struct snic *snic = svnic_dev_priv(vdev);
1190 atomic64_dec(&snic->s_stats.fw.actv_reqs);
1195 /* Check for snic subsys errors */
1198 SNIC_HOST_ERR(snic->shost,
1203 SNIC_HOST_ERR(snic->shost,
1210 snic_io_exch_ver_cmpl_handler(snic, fwreq);
1214 snic_report_tgt_cmpl_handler(snic, fwreq);
1218 snic_icmnd_cmpl_handler(snic, fwreq);
1222 snic_itmf_cmpl_handler(snic, fwreq);
1226 snic_hba_reset_cmpl_handler(snic, fwreq);
1230 snic_msg_ack_handler(snic, fwreq);
1234 snic_aen_handler(snic, fwreq);
1239 SNIC_SCSI_DBG(snic->shost,
1247 if (cmpl_time > atomic64_read(&snic->s_stats.io.max_cmpl_time))
1248 atomic64_set(&snic->s_stats.io.max_cmpl_time, cmpl_time);
1259 snic_fwcq_cmpl_handler(struct snic *snic, int io_cmpl_work)
1264 struct snic_misc_stats *misc_stats = &snic->s_stats.misc;
1266 for (cq_idx = snic->wq_count; cq_idx < snic->cq_count; cq_idx++) {
1267 nent_per_cq = vnic_cq_fw_service(&snic->cq[cq_idx],
1285 snic_queue_itmf_req(struct snic *snic,
1305 snic->config.hid,
1320 ret = snic_queue_wq_desc(snic, tmreq, sizeof(*tmreq));
1322 SNIC_HOST_ERR(snic->shost,
1326 SNIC_SCSI_DBG(snic->shost,
1334 snic_issue_tm_req(struct snic *snic,
1343 if (snic_get_state(snic) == SNIC_FWRESET)
1346 atomic_inc(&snic->ios_inflight);
1348 SNIC_SCSI_DBG(snic->shost,
1354 tmreq = snic_dr_req_init(snic, rqi);
1357 tmreq = snic_abort_req_init(snic, rqi);
1367 ret = snic_queue_itmf_req(snic, tmreq, sc, tmf, req_id);
1371 SNIC_HOST_ERR(snic->shost,
1375 SNIC_SCSI_DBG(snic->shost,
1380 atomic_dec(&snic->ios_inflight);
1389 snic_queue_abort_req(struct snic *snic,
1394 SNIC_SCSI_DBG(snic->shost, "q_abtreq: sc %p, rqi %p, tag %x, tmf %d\n",
1400 return snic_issue_tm_req(snic, rqi, sc, tmf);
1407 snic_abort_finish(struct snic *snic, struct scsi_cmnd *sc)
1414 io_lock = snic_io_lock_hash(snic, sc);
1418 atomic64_inc(&snic->s_stats.io.req_null);
1421 SNIC_SCSI_DBG(snic->shost,
1438 atomic64_inc(&snic->s_stats.abts.drv_tmo);
1439 SNIC_SCSI_DBG(snic->shost,
1442 /* do not release snic request in timedout case */
1467 SNIC_HOST_INFO(snic->shost,
1475 snic_release_req_buf(snic, rqi, sc);
1484 snic_send_abort_and_wait(struct snic *snic, struct scsi_cmnd *sc)
1502 io_lock = snic_io_lock_hash(snic, sc);
1521 SNIC_HOST_ERR(snic->shost,
1551 SNIC_SCSI_DBG(snic->shost, "send_abt_cmd: TAG 0x%x\n", tag);
1556 ret = snic_queue_abort_req(snic, rqi, sc, tmf);
1558 atomic64_inc(&snic->s_stats.abts.q_fail);
1559 SNIC_HOST_ERR(snic->shost,
1578 atomic64_inc(&snic->s_stats.abts.num);
1585 SNIC_SCSI_DBG(snic->shost,
1612 struct snic *snic = shost_priv(sc->device->host);
1616 SNIC_SCSI_DBG(snic->shost, "abt_cmd:sc %p :0x%x :req = %p :tag = %d\n",
1619 if (unlikely(snic_get_state(snic) != SNIC_ONLINE)) {
1620 SNIC_HOST_ERR(snic->shost,
1629 ret = snic_send_abort_and_wait(snic, sc);
1633 ret = snic_abort_finish(snic, sc);
1636 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc,
1640 SNIC_SCSI_DBG(snic->shost,
1651 snic_is_abts_pending(struct snic *snic, struct scsi_cmnd *lr_sc)
1664 for (tag = 0; tag < snic->max_tag_id; tag++) {
1665 io_lock = snic_io_lock_tag(snic, tag);
1668 sc = scsi_host_find_tag(snic->shost, tag);
1687 SNIC_SCSI_DBG(snic->shost, "Found IO in %s on LUN\n",
1703 snic_dr_clean_single_req(struct snic *snic,
1716 io_lock = snic_io_lock_tag(snic, tag);
1718 sc = scsi_host_find_tag(snic->shost, tag);
1737 SNIC_SCSI_DBG(snic->shost,
1744 SNIC_SCSI_DBG(snic->shost,
1765 SNIC_SCSI_DBG(snic->shost,
1780 ret = snic_queue_abort_req(snic, rqi, sc, tmf);
1782 SNIC_HOST_ERR(snic->shost,
1819 SNIC_HOST_ERR(snic->shost,
1833 snic_release_req_buf(snic, rqi, sc);
1849 snic_dr_clean_pending_req(struct snic *snic, struct scsi_cmnd *lr_sc)
1855 for (tag = 0; tag < snic->max_tag_id; tag++) {
1859 ret = snic_dr_clean_single_req(snic, tag, lr_sdev);
1861 SNIC_HOST_ERR(snic->shost, "clean_err:tag = %d\n", tag);
1870 if (snic_is_abts_pending(snic, lr_sc)) {
1877 SNIC_SCSI_DBG(snic->shost, "clean_pending_req: Success.\n");
1883 SNIC_HOST_ERR(snic->shost,
1895 snic_dr_finish(struct snic *snic, struct scsi_cmnd *sc)
1903 io_lock = snic_io_lock_hash(snic, sc);
1908 SNIC_SCSI_DBG(snic->shost,
1923 SNIC_SCSI_DBG(snic->shost,
1933 SNIC_SCSI_DBG(snic->shost,
1940 SNIC_HOST_ERR(snic->shost,
1957 ret = snic_dr_clean_pending_req(snic, sc);
1960 SNIC_SCSI_DBG(snic->shost,
1983 snic_release_req_buf(snic, rqi, sc);
1990 snic_queue_dr_req(struct snic *snic,
1997 return snic_issue_tm_req(snic, rqi, sc, SNIC_ITMF_LUN_RESET);
2001 snic_send_dr_and_wait(struct snic *snic, struct scsi_cmnd *sc)
2010 io_lock = snic_io_lock_hash(snic, sc);
2015 SNIC_HOST_ERR(snic->shost,
2030 SNIC_SCSI_DBG(snic->shost, "dr: TAG = %x\n", tag);
2043 ret = snic_queue_dr_req(snic, rqi, sc);
2045 SNIC_HOST_ERR(snic->shost,
2090 snic_unlink_and_release_req(struct snic *snic, struct scsi_cmnd *sc, int flag)
2097 io_lock = snic_io_lock_hash(snic, sc);
2109 snic_release_req_buf(snic, rqi, sc);
2111 SNIC_TRC(snic->shost->host_no, snic_cmd_tag(sc), (ulong) sc,
2125 struct snic *snic = shost_priv(shost);
2139 snic_unlink_and_release_req(snic, sc, SNIC_DEV_RST_NOTSUP);
2144 if (unlikely(snic_get_state(snic) != SNIC_ONLINE)) {
2145 snic_unlink_and_release_req(snic, sc, 0);
2153 SNIC_HOST_INFO(snic->shost,
2156 rqi = snic_req_init(snic, 0);
2170 ret = snic_send_dr_and_wait(snic, sc);
2172 SNIC_HOST_ERR(snic->shost,
2176 snic_unlink_and_release_req(snic, sc, 0);
2181 ret = snic_dr_finish(snic, sc);
2184 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc,
2188 SNIC_SCSI_DBG(snic->shost,
2206 snic_issue_hba_reset(struct snic *snic, struct scsi_cmnd *sc)
2215 rqi = snic_req_init(snic, 0);
2225 SNIC_HOST_INFO(snic->shost, "issu_hr:Host reset thru ioctl.\n");
2231 io_lock = snic_io_lock_hash(snic, sc);
2237 snic->remove_wait = &wait;
2242 snic->config.hid, 0, (ulong) rqi);
2246 ret = snic_queue_wq_desc(snic, req, sizeof(*req));
2248 SNIC_HOST_ERR(snic->shost,
2258 atomic64_inc(&snic->s_stats.reset.hba_resets);
2259 SNIC_HOST_INFO(snic->shost, "Queued HBA Reset Successfully.\n");
2261 wait_for_completion_timeout(snic->remove_wait,
2264 if (snic_get_state(snic) == SNIC_FWRESET) {
2265 SNIC_HOST_ERR(snic->shost, "reset_cmpl: Reset Timedout.\n");
2272 snic->remove_wait = NULL;
2278 snic_req_free(snic, rqi);
2286 snic->remove_wait = NULL;
2292 snic_req_free(snic, rqi);
2295 SNIC_HOST_ERR(snic->shost,
2305 struct snic *snic = shost_priv(shost);
2310 /* Set snic state as SNIC_FWRESET*/
2311 sv_state = snic_get_state(snic);
2313 spin_lock_irqsave(&snic->snic_lock, flags);
2314 if (snic_get_state(snic) == SNIC_FWRESET) {
2315 spin_unlock_irqrestore(&snic->snic_lock, flags);
2324 snic_set_state(snic, SNIC_FWRESET);
2325 spin_unlock_irqrestore(&snic->snic_lock, flags);
2329 while (atomic_read(&snic->ios_inflight))
2332 ret = snic_issue_hba_reset(snic, sc);
2337 spin_lock_irqsave(&snic->snic_lock, flags);
2338 snic_set_state(snic, sv_state);
2339 spin_unlock_irqrestore(&snic->snic_lock, flags);
2340 atomic64_inc(&snic->s_stats.reset.hba_reset_fail);
2384 snic_cmpl_pending_tmreq(struct snic *snic, struct scsi_cmnd *sc)
2388 SNIC_SCSI_DBG(snic->shost,
2413 snic_scsi_cleanup(struct snic *snic, int ex_tag)
2422 SNIC_SCSI_DBG(snic->shost, "sc_clean: scsi cleanup.\n");
2424 for (tag = 0; tag < snic->max_tag_id; tag++) {
2429 io_lock = snic_io_lock_tag(snic, tag);
2431 sc = scsi_host_find_tag(snic->shost, tag);
2443 snic_cmpl_pending_tmreq(snic, sc);
2456 SNIC_SCSI_DBG(snic->shost,
2465 SNIC_HOST_INFO(snic->shost,
2469 snic_release_req_buf(snic, rqi, sc);
2473 SNIC_HOST_INFO(snic->shost,
2479 snic_stats_update_io_cmpl(&snic->s_stats);
2481 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc,
2491 snic_shutdown_scsi_cleanup(struct snic *snic)
2493 SNIC_HOST_INFO(snic->shost, "Shutdown time SCSI Cleanup.\n");
2495 snic_scsi_cleanup(snic, SCSI_NO_TAG);
2503 snic_internal_abort_io(struct snic *snic, struct scsi_cmnd *sc, int tmf)
2511 io_lock = snic_io_lock_hash(snic, sc);
2523 SNIC_SCSI_DBG(snic->shost,
2532 SNIC_SCSI_DBG(snic->shost,
2547 SNIC_SCSI_DBG(snic->shost, "internal_abts:dev rst sc %p\n", sc);
2550 SNIC_SCSI_DBG(snic->shost, "internal_abts: Issuing abts tag %x\n",
2555 ret = snic_queue_abort_req(snic, rqi, sc, tmf);
2557 SNIC_HOST_ERR(snic->shost,
2590 struct snic *snic = NULL;
2600 snic = shost_priv(snic_tgt_to_shost(tgt));
2601 SNIC_SCSI_DBG(snic->shost, "tgt_abt_io: Cleaning Pending IOs.\n");
2608 for (tag = 0; tag < snic->max_tag_id; tag++) {
2609 io_lock = snic_io_lock_tag(snic, tag);
2612 sc = scsi_host_find_tag(snic->shost, tag);
2627 ret = snic_internal_abort_io(snic, sc, tmf);
2629 SNIC_HOST_ERR(snic->shost,
2640 SNIC_SCSI_DBG(snic->shost, "tgt_abt_io: abt_cnt = %d\n", abt_cnt);