.. | .. |
---|
404 | 404 | |
---|
405 | 405 | void bnxt_qplib_nq_stop_irq(struct bnxt_qplib_nq *nq, bool kill) |
---|
406 | 406 | { |
---|
| 407 | + if (!nq->requested) |
---|
| 408 | + return; |
---|
| 409 | + |
---|
407 | 410 | tasklet_disable(&nq->nq_tasklet); |
---|
408 | 411 | /* Mask h/w interrupt */ |
---|
409 | 412 | bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, nq->res->cctx, false); |
---|
.. | .. |
---|
411 | 414 | synchronize_irq(nq->msix_vec); |
---|
412 | 415 | if (kill) |
---|
413 | 416 | tasklet_kill(&nq->nq_tasklet); |
---|
414 | | - if (nq->requested) { |
---|
415 | | - irq_set_affinity_hint(nq->msix_vec, NULL); |
---|
416 | | - free_irq(nq->msix_vec, nq); |
---|
417 | | - nq->requested = false; |
---|
418 | | - } |
---|
| 417 | + |
---|
| 418 | + irq_set_affinity_hint(nq->msix_vec, NULL); |
---|
| 419 | + free_irq(nq->msix_vec, nq); |
---|
| 420 | + kfree(nq->name); |
---|
| 421 | + nq->name = NULL; |
---|
| 422 | + nq->requested = false; |
---|
419 | 423 | } |
---|
420 | 424 | |
---|
421 | 425 | void bnxt_qplib_disable_nq(struct bnxt_qplib_nq *nq) |
---|
.. | .. |
---|
441 | 445 | int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx, |
---|
442 | 446 | int msix_vector, bool need_init) |
---|
443 | 447 | { |
---|
| 448 | + struct bnxt_qplib_res *res = nq->res; |
---|
444 | 449 | int rc; |
---|
445 | 450 | |
---|
446 | 451 | if (nq->requested) |
---|
.. | .. |
---|
452 | 457 | else |
---|
453 | 458 | tasklet_enable(&nq->nq_tasklet); |
---|
454 | 459 | |
---|
455 | | - snprintf(nq->name, sizeof(nq->name), "bnxt_qplib_nq-%d", nq_indx); |
---|
| 460 | + nq->name = kasprintf(GFP_KERNEL, "bnxt_re-nq-%d@pci:%s", |
---|
| 461 | + nq_indx, pci_name(res->pdev)); |
---|
| 462 | + if (!nq->name) |
---|
| 463 | + return -ENOMEM; |
---|
456 | 464 | rc = request_irq(nq->msix_vec, bnxt_qplib_nq_irq, 0, nq->name, nq); |
---|
457 | | - if (rc) |
---|
| 465 | + if (rc) { |
---|
| 466 | + kfree(nq->name); |
---|
| 467 | + nq->name = NULL; |
---|
| 468 | + tasklet_disable(&nq->nq_tasklet); |
---|
458 | 469 | return rc; |
---|
| 470 | + } |
---|
459 | 471 | |
---|
460 | 472 | cpumask_clear(&nq->mask); |
---|
461 | 473 | cpumask_set_cpu(nq_indx, &nq->mask); |
---|
.. | .. |
---|
466 | 478 | nq->msix_vec, nq_indx); |
---|
467 | 479 | } |
---|
468 | 480 | nq->requested = true; |
---|
469 | | - bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, nq->res->cctx, true); |
---|
| 481 | + bnxt_qplib_ring_nq_db(&nq->nq_db.dbinfo, res->cctx, true); |
---|
470 | 482 | |
---|
471 | 483 | return rc; |
---|
472 | 484 | } |
---|
.. | .. |
---|
1599 | 1611 | il_src = (void *)wqe->sg_list[indx].addr; |
---|
1600 | 1612 | t_len += len; |
---|
1601 | 1613 | if (t_len > qp->max_inline_data) |
---|
1602 | | - goto bad; |
---|
| 1614 | + return -ENOMEM; |
---|
1603 | 1615 | while (len) { |
---|
1604 | 1616 | if (pull_dst) { |
---|
1605 | 1617 | pull_dst = false; |
---|
.. | .. |
---|
1623 | 1635 | } |
---|
1624 | 1636 | |
---|
1625 | 1637 | return t_len; |
---|
1626 | | -bad: |
---|
1627 | | - return -ENOMEM; |
---|
1628 | 1638 | } |
---|
1629 | 1639 | |
---|
1630 | 1640 | static u32 bnxt_qplib_put_sges(struct bnxt_qplib_hwq *hwq, |
---|
.. | .. |
---|
2041 | 2051 | u32 pg_sz_lvl; |
---|
2042 | 2052 | int rc; |
---|
2043 | 2053 | |
---|
| 2054 | + if (!cq->dpi) { |
---|
| 2055 | + dev_err(&rcfw->pdev->dev, |
---|
| 2056 | + "FP: CREATE_CQ failed due to NULL DPI\n"); |
---|
| 2057 | + return -EINVAL; |
---|
| 2058 | + } |
---|
| 2059 | + |
---|
2044 | 2060 | hwq_attr.res = res; |
---|
2045 | 2061 | hwq_attr.depth = cq->max_wqe; |
---|
2046 | 2062 | hwq_attr.stride = sizeof(struct cq_base); |
---|
.. | .. |
---|
2048 | 2064 | hwq_attr.sginfo = &cq->sg_info; |
---|
2049 | 2065 | rc = bnxt_qplib_alloc_init_hwq(&cq->hwq, &hwq_attr); |
---|
2050 | 2066 | if (rc) |
---|
2051 | | - goto exit; |
---|
| 2067 | + return rc; |
---|
2052 | 2068 | |
---|
2053 | 2069 | RCFW_CMD_PREP(req, CREATE_CQ, cmd_flags); |
---|
2054 | 2070 | |
---|
2055 | | - if (!cq->dpi) { |
---|
2056 | | - dev_err(&rcfw->pdev->dev, |
---|
2057 | | - "FP: CREATE_CQ failed due to NULL DPI\n"); |
---|
2058 | | - return -EINVAL; |
---|
2059 | | - } |
---|
2060 | 2071 | req.dpi = cpu_to_le32(cq->dpi->dpi); |
---|
2061 | 2072 | req.cq_handle = cpu_to_le64(cq->cq_handle); |
---|
2062 | 2073 | req.cq_size = cpu_to_le32(cq->hwq.max_elements); |
---|
.. | .. |
---|
2094 | 2105 | |
---|
2095 | 2106 | fail: |
---|
2096 | 2107 | bnxt_qplib_free_hwq(res, &cq->hwq); |
---|
2097 | | -exit: |
---|
2098 | 2108 | return rc; |
---|
2099 | 2109 | } |
---|
2100 | 2110 | |
---|
.. | .. |
---|
2722 | 2732 | |
---|
2723 | 2733 | qp = (struct bnxt_qplib_qp *)((unsigned long) |
---|
2724 | 2734 | le64_to_cpu(hwcqe->qp_handle)); |
---|
2725 | | - if (!qp) { |
---|
2726 | | - dev_err(&cq->hwq.pdev->dev, |
---|
2727 | | - "FP: CQ Process terminal qp is NULL\n"); |
---|
| 2735 | + if (!qp) |
---|
2728 | 2736 | return -EINVAL; |
---|
2729 | | - } |
---|
2730 | 2737 | |
---|
2731 | 2738 | /* Must block new posting of SQ and RQ */ |
---|
2732 | 2739 | qp->state = CMDQ_MODIFY_QP_NEW_STATE_ERR; |
---|