Lines Matching +full:multi +full:- +full:line
39 struct snic *snic = svnic_dev_priv(wq->vdev); in snic_wq_cmpl_frame_send()
41 SNIC_BUG_ON(buf->os_buf == NULL); in snic_wq_cmpl_frame_send()
44 SNIC_HOST_INFO(snic->shost, in snic_wq_cmpl_frame_send()
46 buf->os_buf); in snic_wq_cmpl_frame_send()
48 SNIC_TRC(snic->shost->host_no, 0, 0, in snic_wq_cmpl_frame_send()
49 ((ulong)(buf->os_buf) - sizeof(struct snic_req_info)), 0, 0, in snic_wq_cmpl_frame_send()
52 buf->os_buf = NULL; in snic_wq_cmpl_frame_send()
68 spin_lock_irqsave(&snic->wq_lock[q_num], flags); in snic_wq_cmpl_handler_cont()
69 svnic_wq_service(&snic->wq[q_num], in snic_wq_cmpl_handler_cont()
74 spin_unlock_irqrestore(&snic->wq_lock[q_num], flags); in snic_wq_cmpl_handler_cont()
85 snic->s_stats.misc.last_ack_time = jiffies; in snic_wq_cmpl_handler()
86 for (i = 0; i < snic->wq_count; i++) { in snic_wq_cmpl_handler()
87 work_done += svnic_cq_service(&snic->cq[i], in snic_wq_cmpl_handler()
100 struct snic_host_req *req = buf->os_buf; in snic_free_wq_buf()
101 struct snic *snic = svnic_dev_priv(wq->vdev); in snic_free_wq_buf()
105 dma_unmap_single(&snic->pdev->dev, buf->dma_addr, buf->len, in snic_free_wq_buf()
109 spin_lock_irqsave(&snic->spl_cmd_lock, flags); in snic_free_wq_buf()
110 if (list_empty(&rqi->list)) { in snic_free_wq_buf()
111 spin_unlock_irqrestore(&snic->spl_cmd_lock, flags); in snic_free_wq_buf()
115 SNIC_BUG_ON(rqi->list.next == NULL); /* if not added to spl_cmd_list */ in snic_free_wq_buf()
116 list_del_init(&rqi->list); in snic_free_wq_buf()
117 spin_unlock_irqrestore(&snic->spl_cmd_lock, flags); in snic_free_wq_buf()
119 if (rqi->sge_va) { in snic_free_wq_buf()
121 kfree((void *)rqi->sge_va); in snic_free_wq_buf()
122 rqi->sge_va = 0; in snic_free_wq_buf()
125 SNIC_HOST_INFO(snic->shost, "snic_free_wq_buf .. freed.\n"); in snic_free_wq_buf()
131 /* Criteria to select work queue in multi queue mode */
135 /* No multi queue support for now */ in snic_select_wq()
144 int nr_wqdesc = snic->config.wq_enet_desc_count; in snic_wqdesc_avail()
148 * Multi Queue case, additional care is required. in snic_wqdesc_avail()
151 SNIC_HOST_INFO(snic->shost, "desc_avail: Multi Queue case.\n"); in snic_wqdesc_avail()
154 return -1; in snic_wqdesc_avail()
157 nr_wqdesc -= atomic64_read(&snic->s_stats.fw.actv_reqs); in snic_wqdesc_avail()
159 return ((req_type == SNIC_REQ_HBA_RESET) ? nr_wqdesc : nr_wqdesc - 1); in snic_wqdesc_avail()
167 struct snic_fw_stats *fwstats = &snic->s_stats.fw; in snic_queue_wq_desc()
176 pa = dma_map_single(&snic->pdev->dev, os_buf, len, DMA_TO_DEVICE); in snic_queue_wq_desc()
177 if (dma_mapping_error(&snic->pdev->dev, pa)) { in snic_queue_wq_desc()
178 SNIC_HOST_ERR(snic->shost, "qdesc: PCI DMA Mapping Fail.\n"); in snic_queue_wq_desc()
180 return -ENOMEM; in snic_queue_wq_desc()
183 req->req_pa = (ulong)pa; in snic_queue_wq_desc()
187 spin_lock_irqsave(&snic->wq_lock[q_num], flags); in snic_queue_wq_desc()
188 desc_avail = snic_wqdesc_avail(snic, q_num, req->hdr.type); in snic_queue_wq_desc()
190 dma_unmap_single(&snic->pdev->dev, pa, len, DMA_TO_DEVICE); in snic_queue_wq_desc()
191 req->req_pa = 0; in snic_queue_wq_desc()
192 spin_unlock_irqrestore(&snic->wq_lock[q_num], flags); in snic_queue_wq_desc()
193 atomic64_inc(&snic->s_stats.misc.wq_alloc_fail); in snic_queue_wq_desc()
194 SNIC_DBG("host = %d, WQ is Full\n", snic->shost->host_no); in snic_queue_wq_desc()
196 return -ENOMEM; in snic_queue_wq_desc()
199 snic_queue_wq_eth_desc(&snic->wq[q_num], os_buf, pa, len, 0, 0, 1); in snic_queue_wq_desc()
202 * note: when multi queue enabled, fw actv_reqs should be per queue. in snic_queue_wq_desc()
204 act_reqs = atomic64_inc_return(&fwstats->actv_reqs); in snic_queue_wq_desc()
205 spin_unlock_irqrestore(&snic->wq_lock[q_num], flags); in snic_queue_wq_desc()
207 if (act_reqs > atomic64_read(&fwstats->max_actv_reqs)) in snic_queue_wq_desc()
208 atomic64_set(&fwstats->max_actv_reqs, act_reqs); in snic_queue_wq_desc()
222 INIT_LIST_HEAD(&rqi->list); in snic_handle_untagged_req()
224 spin_lock_irqsave(&snic->spl_cmd_lock, flags); in snic_handle_untagged_req()
225 list_add_tail(&rqi->list, &snic->spl_cmd_list); in snic_handle_untagged_req()
226 spin_unlock_irqrestore(&snic->spl_cmd_lock, flags); in snic_handle_untagged_req()
242 rqi = mempool_alloc(snic->req_pool[typ], GFP_ATOMIC); in snic_req_init()
244 atomic64_inc(&snic->s_stats.io.alloc_fail); in snic_req_init()
245 SNIC_HOST_ERR(snic->shost, in snic_req_init()
252 rqi->rq_pool_type = typ; in snic_req_init()
253 rqi->start_time = jiffies; in snic_req_init()
254 rqi->req = (struct snic_host_req *) (rqi + 1); in snic_req_init()
255 rqi->req_len = sizeof(struct snic_host_req); in snic_req_init()
256 rqi->snic = snic; in snic_req_init()
258 rqi->req = (struct snic_host_req *)(rqi + 1); in snic_req_init()
263 rqi->req_len += (sg_cnt * sizeof(struct snic_sg_desc)); in snic_req_init()
265 if (sg_cnt > atomic64_read(&snic->s_stats.io.max_sgl)) in snic_req_init()
266 atomic64_set(&snic->s_stats.io.max_sgl, sg_cnt); in snic_req_init()
269 atomic64_inc(&snic->s_stats.io.sgl_cnt[sg_cnt - 1]); in snic_req_init()
272 memset(rqi->req, 0, rqi->req_len); in snic_req_init()
275 rqi->req->hdr.init_ctx = (ulong) rqi; in snic_req_init()
277 SNIC_SCSI_DBG(snic->shost, "Req_alloc:rqi = %p allocatd.\n", rqi); in snic_req_init()
293 if (rqi->abort_req) in snic_abort_req_init()
294 return rqi->abort_req; in snic_abort_req_init()
297 req = mempool_alloc(snic->req_pool[SNIC_REQ_TM_CACHE], GFP_ATOMIC); in snic_abort_req_init()
299 SNIC_HOST_ERR(snic->shost, "abts:Failed to alloc tm req.\n"); in snic_abort_req_init()
305 rqi->abort_req = req; in snic_abort_req_init()
308 req->hdr.init_ctx = (ulong) rqi; in snic_abort_req_init()
323 req = mempool_alloc(snic->req_pool[SNIC_REQ_TM_CACHE], GFP_ATOMIC); in snic_dr_req_init()
325 SNIC_HOST_ERR(snic->shost, "dr:Failed to alloc tm req.\n"); in snic_dr_req_init()
331 SNIC_BUG_ON(rqi->dr_req != NULL); in snic_dr_req_init()
332 rqi->dr_req = req; in snic_dr_req_init()
335 req->hdr.init_ctx = (ulong) rqi; in snic_dr_req_init()
344 SNIC_BUG_ON(rqi->req == rqi->abort_req); in snic_req_free()
345 SNIC_BUG_ON(rqi->req == rqi->dr_req); in snic_req_free()
346 SNIC_BUG_ON(rqi->sge_va != 0); in snic_req_free()
348 SNIC_SCSI_DBG(snic->shost, in snic_req_free()
350 rqi, rqi->req, rqi->abort_req, rqi->dr_req); in snic_req_free()
352 if (rqi->abort_req) { in snic_req_free()
353 if (rqi->abort_req->req_pa) in snic_req_free()
354 dma_unmap_single(&snic->pdev->dev, in snic_req_free()
355 rqi->abort_req->req_pa, in snic_req_free()
359 mempool_free(rqi->abort_req, snic->req_pool[SNIC_REQ_TM_CACHE]); in snic_req_free()
362 if (rqi->dr_req) { in snic_req_free()
363 if (rqi->dr_req->req_pa) in snic_req_free()
364 dma_unmap_single(&snic->pdev->dev, in snic_req_free()
365 rqi->dr_req->req_pa, in snic_req_free()
369 mempool_free(rqi->dr_req, snic->req_pool[SNIC_REQ_TM_CACHE]); in snic_req_free()
372 if (rqi->req->req_pa) in snic_req_free()
373 dma_unmap_single(&snic->pdev->dev, in snic_req_free()
374 rqi->req->req_pa, in snic_req_free()
375 rqi->req_len, in snic_req_free()
378 mempool_free(rqi, snic->req_pool[rqi->rq_pool_type]); in snic_req_free()
388 dma_unmap_single(&snic->pdev->dev, in snic_pci_unmap_rsp_buf()
404 spin_lock_irqsave(&snic->spl_cmd_lock, flags); in snic_free_all_untagged_reqs()
405 list_for_each_safe(cur, nxt, &snic->spl_cmd_list) { in snic_free_all_untagged_reqs()
407 list_del_init(&rqi->list); in snic_free_all_untagged_reqs()
408 if (rqi->sge_va) { in snic_free_all_untagged_reqs()
410 kfree((void *)rqi->sge_va); in snic_free_all_untagged_reqs()
411 rqi->sge_va = 0; in snic_free_all_untagged_reqs()
416 spin_unlock_irqrestore(&snic->spl_cmd_lock, flags); in snic_free_all_untagged_reqs()
427 spin_lock_irqsave(&snic->snic_lock, flags); in snic_release_untagged_req()
428 if (snic->in_remove) { in snic_release_untagged_req()
429 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_release_untagged_req()
432 spin_unlock_irqrestore(&snic->snic_lock, flags); in snic_release_untagged_req()
434 spin_lock_irqsave(&snic->spl_cmd_lock, flags); in snic_release_untagged_req()
435 if (list_empty(&rqi->list)) { in snic_release_untagged_req()
436 spin_unlock_irqrestore(&snic->spl_cmd_lock, flags); in snic_release_untagged_req()
439 list_del_init(&rqi->list); in snic_release_untagged_req()
440 spin_unlock_irqrestore(&snic->spl_cmd_lock, flags); in snic_release_untagged_req()
462 char line[LINE_BUFSZ] = { '\0' }; in snic_dump_desc() local
465 if (req->hdr.type >= SNIC_RSP_REPORT_TGTS_CMPL) in snic_dump_desc()
466 rqi = (struct snic_req_info *) fwreq->hdr.init_ctx; in snic_dump_desc()
468 rqi = (struct snic_req_info *) req->hdr.init_ctx; in snic_dump_desc()
470 SNIC_BUG_ON(rqi == NULL || rqi->req == NULL); in snic_dump_desc()
471 switch (req->hdr.type) { in snic_dump_desc()
473 cmd_str = "report-tgt : "; in snic_dump_desc()
474 snprintf(line, LINE_BUFSZ, "SNIC_REQ_REPORT_TGTS :"); in snic_dump_desc()
479 snprintf(line, LINE_BUFSZ, "SNIC_REQ_ICMND : 0x%x :", in snic_dump_desc()
480 req->u.icmnd.cdb[0]); in snic_dump_desc()
485 snprintf(line, LINE_BUFSZ, "SNIC_REQ_ITMF :"); in snic_dump_desc()
490 snprintf(line, LINE_BUFSZ, "SNIC_REQ_HBA_RESET :"); in snic_dump_desc()
495 snprintf(line, LINE_BUFSZ, "SNIC_REQ_EXCH_VER :"); in snic_dump_desc()
504 snprintf(line, LINE_BUFSZ, "SNIC_RSP_REPORT_TGTS_CMPL :"); in snic_dump_desc()
509 snprintf(line, LINE_BUFSZ, "SNIC_RSP_ICMND_CMPL : 0x%x :", in snic_dump_desc()
510 rqi->req->u.icmnd.cdb[0]); in snic_dump_desc()
515 snprintf(line, LINE_BUFSZ, "SNIC_RSP_ITMF_CMPL :"); in snic_dump_desc()
520 snprintf(line, LINE_BUFSZ, "SNIC_RSP_HBA_RESET_CMPL :"); in snic_dump_desc()
525 snprintf(line, LINE_BUFSZ, "SNIC_RSP_EXCH_VER_CMPL :"); in snic_dump_desc()
530 snprintf(line, LINE_BUFSZ, "SNIC_MSG_ACK :"); in snic_dump_desc()
535 snprintf(line, LINE_BUFSZ, "SNIC_MSG_ASYNC_EVNOTIFY :"); in snic_dump_desc()
545 fn, line, req->hdr.cmnd_id, req->hdr.sg_cnt, req->hdr.status, in snic_dump_desc()
546 req->hdr.init_ctx); in snic_dump_desc()
565 duration = jiffies - rqi->start_time; in snic_calc_io_process_time()
567 if (duration > atomic64_read(&snic->s_stats.io.max_time)) in snic_calc_io_process_time()
568 atomic64_set(&snic->s_stats.io.max_time, duration); in snic_calc_io_process_time()