]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/bnxt_re: Cache MSIx info to a local structure
authorKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Thu, 14 Nov 2024 09:49:08 +0000 (01:49 -0800)
committerLeon Romanovsky <leon@kernel.org>
Thu, 14 Nov 2024 14:52:37 +0000 (09:52 -0500)
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 <selvin.xavier@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Link: https://patch.msgid.link/1731577748-1804-5-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/bnxt_re/bnxt_re.h
drivers/infiniband/hw/bnxt_re/main.c

index 5f64fc496812ea27cce19625d441b603901e7d4a..2975b11b79bf770d2a494f6064e333f539f135ca 100644 (file)
@@ -157,6 +157,7 @@ struct bnxt_re_pacing {
 #define BNXT_RE_MIN_MSIX               2
 #define BNXT_RE_MAX_MSIX               BNXT_MAX_ROCE_MSIX
 struct bnxt_re_nq_record {
+       struct bnxt_msix_entry  msix_entries[BNXT_RE_MAX_MSIX];
        struct bnxt_qplib_nq    nq[BNXT_RE_MAX_MSIX];
        int                     num_msix;
        /* serialize NQ access */
index fcaf2b3cc01db36df9a0139ab1b86fe71f0ff797..533b9f110d249e0913c46ecb48c8d083171c5414 100644 (file)
@@ -347,7 +347,7 @@ static void bnxt_re_start_irq(void *handle, struct bnxt_msix_entry *ent)
                return;
 
        rdev = en_info->rdev;
-       msix_ent = rdev->en_dev->msix_entries;
+       msix_ent = rdev->nqr->msix_entries;
        rcfw = &rdev->rcfw;
        if (!ent) {
                /* 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)
         * in device sctructure.
         */
        for (indx = 0; indx < rdev->nqr->num_msix; indx++)
-               rdev->en_dev->msix_entries[indx].vector = ent[indx].vector;
+               rdev->nqr->msix_entries[indx].vector = ent[indx].vector;
 
        rc = bnxt_qplib_rcfw_start_irq(rcfw, msix_ent[BNXT_RE_AEQ_IDX].vector,
                                       false);
@@ -1569,9 +1569,9 @@ static int bnxt_re_init_res(struct bnxt_re_dev *rdev)
        mutex_init(&rdev->nqr->load_lock);
 
        for (i = 1; i < rdev->nqr->num_msix ; i++) {
-               db_offt = rdev->en_dev->msix_entries[i].db_offset;
+               db_offt = rdev->nqr->msix_entries[i].db_offset;
                rc = bnxt_qplib_enable_nq(rdev->en_dev->pdev, &rdev->nqr->nq[i - 1],
-                                         i - 1, rdev->en_dev->msix_entries[i].vector,
+                                         i - 1, rdev->nqr->msix_entries[i].vector,
                                          db_offt, &bnxt_re_cqn_handler,
                                          &bnxt_re_srqn_handler);
                if (rc) {
@@ -1658,7 +1658,7 @@ static int bnxt_re_alloc_res(struct bnxt_re_dev *rdev)
                rattr.type = type;
                rattr.mode = RING_ALLOC_REQ_INT_MODE_MSIX;
                rattr.depth = BNXT_QPLIB_NQE_MAX_CNT - 1;
-               rattr.lrid = rdev->en_dev->msix_entries[i + 1].ring_idx;
+               rattr.lrid = rdev->nqr->msix_entries[i + 1].ring_idx;
                rc = bnxt_re_net_ring_alloc(rdev, &rattr, &nq->ring_id);
                if (rc) {
                        ibdev_err(&rdev->ibdev,
@@ -1983,6 +1983,8 @@ static int bnxt_re_dev_init(struct bnxt_re_dev *rdev, u8 op_type)
                return rc;
        }
        rdev->nqr->num_msix = rdev->en_dev->ulp_tbl->msix_requested;
+       memcpy(rdev->nqr->msix_entries, rdev->en_dev->msix_entries,
+              sizeof(struct bnxt_msix_entry) * rdev->nqr->num_msix);
 
        /* Check whether VF or PF */
        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)
        rattr.type = type;
        rattr.mode = RING_ALLOC_REQ_INT_MODE_MSIX;
        rattr.depth = BNXT_QPLIB_CREQE_MAX_CNT - 1;
-       rattr.lrid = rdev->en_dev->msix_entries[BNXT_RE_AEQ_IDX].ring_idx;
+       rattr.lrid = rdev->nqr->msix_entries[BNXT_RE_AEQ_IDX].ring_idx;
        rc = bnxt_re_net_ring_alloc(rdev, &rattr, &creq->ring_id);
        if (rc) {
                ibdev_err(&rdev->ibdev, "Failed to allocate CREQ: %#x\n", rc);
                goto free_rcfw;
        }
-       db_offt = rdev->en_dev->msix_entries[BNXT_RE_AEQ_IDX].db_offset;
-       vid = rdev->en_dev->msix_entries[BNXT_RE_AEQ_IDX].vector;
+       db_offt = rdev->nqr->msix_entries[BNXT_RE_AEQ_IDX].db_offset;
+       vid = rdev->nqr->msix_entries[BNXT_RE_AEQ_IDX].vector;
        rc = bnxt_qplib_enable_rcfw_channel(&rdev->rcfw,
                                            vid, db_offt,
                                            &bnxt_re_aeq_handler);