Lines Matching refs:nq
163 struct bnxt_qplib_nq *nq = nq_work->nq;
165 if (cq && nq) {
167 if (atomic_read(&cq->arm_state) && nq->cqn_handler) {
168 dev_dbg(&nq->pdev->dev,
169 "%s:Trigger cq = %p event nq = %p\n",
170 __func__, cq, nq);
171 nq->cqn_handler(nq, cq);
239 static void clean_nq(struct bnxt_qplib_nq *nq, struct bnxt_qplib_cq *cq)
241 struct bnxt_qplib_hwq *hwq = &nq->hwq;
243 int budget = nq->budget;
252 if (!NQE_CMP_VALID(nqe, nq->nq_db.dbinfo.flags))
281 1, &nq->nq_db.dbinfo.flags);
297 clean_nq(cq->nq, cq);
303 struct bnxt_qplib_nq *nq = from_tasklet(nq, t, nq_tasklet);
304 struct bnxt_qplib_hwq *hwq = &nq->hwq;
306 int budget = nq->budget;
316 if (!NQE_CMP_VALID(nqe, nq->nq_db.dbinfo.flags))
349 if (nq->cqn_handler(nq, (cq)))
350 dev_warn(&nq->pdev->dev,
375 if (nq->srqn_handler(nq,
378 dev_warn(&nq->pdev->dev,
386 dev_warn(&nq->pdev->dev,
392 1, &nq->nq_db.dbinfo.flags);
395 bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, nq->res->cctx, true);
400 * @nq - notification queue pointer
408 void bnxt_re_synchronize_nq(struct bnxt_qplib_nq *nq)
410 int budget = nq->budget;
412 nq->budget = nq->hwq.max_elements;
413 bnxt_qplib_service_nq(&nq->nq_tasklet);
414 nq->budget = budget;
419 struct bnxt_qplib_nq *nq = dev_instance;
420 struct bnxt_qplib_hwq *hwq = &nq->hwq;
428 tasklet_schedule(&nq->nq_tasklet);
433 void bnxt_qplib_nq_stop_irq(struct bnxt_qplib_nq *nq, bool kill)
435 if (!nq->requested)
438 nq->requested = false;
440 bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, nq->res->cctx, false);
442 synchronize_irq(nq->msix_vec);
443 irq_set_affinity_hint(nq->msix_vec, NULL);
444 free_irq(nq->msix_vec, nq);
445 kfree(nq->name);
446 nq->name = NULL;
449 tasklet_kill(&nq->nq_tasklet);
450 tasklet_disable(&nq->nq_tasklet);
453 void bnxt_qplib_disable_nq(struct bnxt_qplib_nq *nq)
455 if (nq->cqn_wq) {
456 destroy_workqueue(nq->cqn_wq);
457 nq->cqn_wq = NULL;
461 bnxt_qplib_nq_stop_irq(nq, true);
463 if (nq->nq_db.reg.bar_reg) {
464 iounmap(nq->nq_db.reg.bar_reg);
465 nq->nq_db.reg.bar_reg = NULL;
468 nq->cqn_handler = NULL;
469 nq->srqn_handler = NULL;
470 nq->msix_vec = 0;
473 int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx,
476 struct bnxt_qplib_res *res = nq->res;
479 if (nq->requested)
482 nq->msix_vec = msix_vector;
484 tasklet_setup(&nq->nq_tasklet, bnxt_qplib_service_nq);
486 tasklet_enable(&nq->nq_tasklet);
488 nq->name = kasprintf(GFP_KERNEL, "bnxt_re-nq-%d@pci:%s",
490 if (!nq->name)
492 rc = request_irq(nq->msix_vec, bnxt_qplib_nq_irq, 0, nq->name, nq);
494 kfree(nq->name);
495 nq->name = NULL;
496 tasklet_disable(&nq->nq_tasklet);
500 cpumask_clear(&nq->mask);
501 cpumask_set_cpu(nq_indx, &nq->mask);
502 rc = irq_set_affinity_hint(nq->msix_vec, &nq->mask);
504 dev_warn(&nq->pdev->dev,
506 nq->msix_vec, nq_indx);
508 nq->requested = true;
509 bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, res->cctx, true);
514 static int bnxt_qplib_map_nq_db(struct bnxt_qplib_nq *nq, u32 reg_offt)
520 pdev = nq->pdev;
521 nq_db = &nq->nq_db;
543 nq_db->dbinfo.hwq = &nq->hwq;
544 nq_db->dbinfo.xid = nq->ring_id;
549 int bnxt_qplib_enable_nq(struct pci_dev *pdev, struct bnxt_qplib_nq *nq,
556 nq->pdev = pdev;
557 nq->cqn_handler = cqn_handler;
558 nq->srqn_handler = srqn_handler;
559 nq->load = 0;
562 nq->cqn_wq = create_singlethread_workqueue("bnxt_qplib_nq");
563 if (!nq->cqn_wq)
566 rc = bnxt_qplib_map_nq_db(nq, bar_reg_offset);
570 rc = bnxt_qplib_nq_start_irq(nq, nq_idx, msix_vector, true);
572 dev_err(&nq->pdev->dev,
573 "Failed to request irq for nq-idx %d\n", nq_idx);
579 bnxt_qplib_disable_nq(nq);
583 void bnxt_qplib_free_nq(struct bnxt_qplib_nq *nq)
585 if (nq->hwq.max_elements) {
586 bnxt_qplib_free_hwq(nq->res, &nq->hwq);
587 nq->hwq.max_elements = 0;
591 int bnxt_qplib_alloc_nq(struct bnxt_qplib_res *res, struct bnxt_qplib_nq *nq)
596 nq->pdev = res->pdev;
597 nq->res = res;
598 if (!nq->hwq.max_elements ||
599 nq->hwq.max_elements > BNXT_QPLIB_NQE_MAX_CNT)
600 nq->hwq.max_elements = BNXT_QPLIB_NQE_MAX_CNT;
606 hwq_attr.depth = nq->hwq.max_elements;
608 hwq_attr.type = bnxt_qplib_get_hwq_type(nq->res);
609 if (bnxt_qplib_alloc_init_hwq(&nq->hwq, &hwq_attr)) {
610 dev_err(&nq->pdev->dev, "FP NQ allocation failed");
613 nq->budget = 8;
2113 nq_work->nq = qp->scq->nq;
2115 queue_work(qp->scq->nq->cqn_wq, &nq_work->work);
2200 nq_work->nq = qp->rcq->nq;
2202 queue_work(qp->rcq->nq->cqn_wq, &nq_work->work);
3243 flush_workqueue(qp->scq->nq->cqn_wq);
3245 flush_workqueue(qp->rcq->nq->cqn_wq);