Skip to content

Commit 31bad59

Browse files
Kalesh APrleon
authored andcommitted
RDMA/bnxt_re: Cache MSIx info to a local structure
L2 driver allocates the vectors for RoCE and pass it through the en_dev structure to RoCE. During probe, cache the MSIx related info to a local structure. Signed-off-by: Selvin Xavier <[email protected]> Signed-off-by: Kalesh AP <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Leon Romanovsky <[email protected]>
1 parent cb97b37 commit 31bad59

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

drivers/infiniband/hw/bnxt_re/bnxt_re.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ struct bnxt_re_pacing {
157157
#define BNXT_RE_MIN_MSIX 2
158158
#define BNXT_RE_MAX_MSIX BNXT_MAX_ROCE_MSIX
159159
struct bnxt_re_nq_record {
160+
struct bnxt_msix_entry msix_entries[BNXT_RE_MAX_MSIX];
160161
struct bnxt_qplib_nq nq[BNXT_RE_MAX_MSIX];
161162
int num_msix;
162163
/* serialize NQ access */

drivers/infiniband/hw/bnxt_re/main.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ static void bnxt_re_start_irq(void *handle, struct bnxt_msix_entry *ent)
347347
return;
348348

349349
rdev = en_info->rdev;
350-
msix_ent = rdev->en_dev->msix_entries;
350+
msix_ent = rdev->nqr->msix_entries;
351351
rcfw = &rdev->rcfw;
352352
if (!ent) {
353353
/* Not setting the f/w timeout bit in rcfw.
@@ -363,7 +363,7 @@ static void bnxt_re_start_irq(void *handle, struct bnxt_msix_entry *ent)
363363
* in device sctructure.
364364
*/
365365
for (indx = 0; indx < rdev->nqr->num_msix; indx++)
366-
rdev->en_dev->msix_entries[indx].vector = ent[indx].vector;
366+
rdev->nqr->msix_entries[indx].vector = ent[indx].vector;
367367

368368
rc = bnxt_qplib_rcfw_start_irq(rcfw, msix_ent[BNXT_RE_AEQ_IDX].vector,
369369
false);
@@ -1569,9 +1569,9 @@ static int bnxt_re_init_res(struct bnxt_re_dev *rdev)
15691569
mutex_init(&rdev->nqr->load_lock);
15701570

15711571
for (i = 1; i < rdev->nqr->num_msix ; i++) {
1572-
db_offt = rdev->en_dev->msix_entries[i].db_offset;
1572+
db_offt = rdev->nqr->msix_entries[i].db_offset;
15731573
rc = bnxt_qplib_enable_nq(rdev->en_dev->pdev, &rdev->nqr->nq[i - 1],
1574-
i - 1, rdev->en_dev->msix_entries[i].vector,
1574+
i - 1, rdev->nqr->msix_entries[i].vector,
15751575
db_offt, &bnxt_re_cqn_handler,
15761576
&bnxt_re_srqn_handler);
15771577
if (rc) {
@@ -1658,7 +1658,7 @@ static int bnxt_re_alloc_res(struct bnxt_re_dev *rdev)
16581658
rattr.type = type;
16591659
rattr.mode = RING_ALLOC_REQ_INT_MODE_MSIX;
16601660
rattr.depth = BNXT_QPLIB_NQE_MAX_CNT - 1;
1661-
rattr.lrid = rdev->en_dev->msix_entries[i + 1].ring_idx;
1661+
rattr.lrid = rdev->nqr->msix_entries[i + 1].ring_idx;
16621662
rc = bnxt_re_net_ring_alloc(rdev, &rattr, &nq->ring_id);
16631663
if (rc) {
16641664
ibdev_err(&rdev->ibdev,
@@ -1983,6 +1983,8 @@ static int bnxt_re_dev_init(struct bnxt_re_dev *rdev, u8 op_type)
19831983
return rc;
19841984
}
19851985
rdev->nqr->num_msix = rdev->en_dev->ulp_tbl->msix_requested;
1986+
memcpy(rdev->nqr->msix_entries, rdev->en_dev->msix_entries,
1987+
sizeof(struct bnxt_msix_entry) * rdev->nqr->num_msix);
19861988

19871989
/* Check whether VF or PF */
19881990
bnxt_re_get_sriov_func_type(rdev);
@@ -2008,14 +2010,14 @@ static int bnxt_re_dev_init(struct bnxt_re_dev *rdev, u8 op_type)
20082010
rattr.type = type;
20092011
rattr.mode = RING_ALLOC_REQ_INT_MODE_MSIX;
20102012
rattr.depth = BNXT_QPLIB_CREQE_MAX_CNT - 1;
2011-
rattr.lrid = rdev->en_dev->msix_entries[BNXT_RE_AEQ_IDX].ring_idx;
2013+
rattr.lrid = rdev->nqr->msix_entries[BNXT_RE_AEQ_IDX].ring_idx;
20122014
rc = bnxt_re_net_ring_alloc(rdev, &rattr, &creq->ring_id);
20132015
if (rc) {
20142016
ibdev_err(&rdev->ibdev, "Failed to allocate CREQ: %#x\n", rc);
20152017
goto free_rcfw;
20162018
}
2017-
db_offt = rdev->en_dev->msix_entries[BNXT_RE_AEQ_IDX].db_offset;
2018-
vid = rdev->en_dev->msix_entries[BNXT_RE_AEQ_IDX].vector;
2019+
db_offt = rdev->nqr->msix_entries[BNXT_RE_AEQ_IDX].db_offset;
2020+
vid = rdev->nqr->msix_entries[BNXT_RE_AEQ_IDX].vector;
20192021
rc = bnxt_qplib_enable_rcfw_channel(&rdev->rcfw,
20202022
vid, db_offt,
20212023
&bnxt_re_aeq_handler);

0 commit comments

Comments
 (0)