RDMA/bnxt_re: Get the toggle bits from CQ completions
authorSelvin Xavier <selvin.xavier@broadcom.com>
Thu, 7 Dec 2023 10:47:38 +0000 (02:47 -0800)
committerLeon Romanovsky <leon@kernel.org>
Mon, 11 Dec 2023 07:56:28 +0000 (09:56 +0200)
Get the toggle bits from CQ completions. For older adapters
these values are 0.

Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Link: https://lore.kernel.org/r/1701946060-13931-5-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/bnxt_re/qplib_fp.c
drivers/infiniband/hw/bnxt_re/qplib_fp.h
drivers/infiniband/hw/bnxt_re/qplib_res.h

index 1b7e950..177c6c1 100644 (file)
@@ -330,6 +330,9 @@ static void bnxt_qplib_service_nq(struct tasklet_struct *t)
                        cq = (struct bnxt_qplib_cq *)(unsigned long)q_handle;
                        if (!cq)
                                break;
+                       cq->toggle = (le16_to_cpu(nqe->info10_type) &
+                                       NQ_CN_TOGGLE_MASK) >> NQ_CN_TOGGLE_SFT;
+                       cq->dbinfo.toggle = cq->toggle;
                        bnxt_qplib_armen_db(&cq->dbinfo,
                                            DBC_DBC_TYPE_CQ_ARMENA);
                        spin_lock_bh(&cq->compl_lock);
@@ -2124,6 +2127,8 @@ int bnxt_qplib_create_cq(struct bnxt_qplib_res *res, struct bnxt_qplib_cq *cq)
        cq->dbinfo.xid = cq->id;
        cq->dbinfo.db = cq->dpi->dbr;
        cq->dbinfo.priv_db = res->dpi_tbl.priv_db;
+       cq->dbinfo.flags = 0;
+       cq->dbinfo.toggle = 0;
 
        bnxt_qplib_armen_db(&cq->dbinfo, DBC_DBC_TYPE_CQ_ARMENA);
 
@@ -3018,6 +3023,7 @@ exit:
 
 void bnxt_qplib_req_notify_cq(struct bnxt_qplib_cq *cq, u32 arm_type)
 {
+       cq->dbinfo.toggle = cq->toggle;
        if (arm_type)
                bnxt_qplib_ring_db(&cq->dbinfo, arm_type);
        /* Using cq->arm_state variable to track whether to issue cq handler */
index 23c27cb..8a6bea2 100644 (file)
@@ -418,6 +418,7 @@ struct bnxt_qplib_cq {
        bool                            resize_in_progress;
        struct bnxt_qplib_sg_info       sg_info;
        u64                             cq_handle;
+       u8                              toggle;
 
 #define CQ_RESIZE_WAIT_TIME_MS         500
        unsigned long                   flags;
index 397846b..7e6d907 100644 (file)
@@ -190,6 +190,7 @@ struct bnxt_qplib_db_info {
        u32                     xid;
        u32                     max_slot;
        u32                     flags;
+       u8                      toggle;
 };
 
 enum bnxt_qplib_db_info_flags_mask {