From: Selvin Xavier <selvin.xavier@broadcom.com>
To: leon@kernel.org, jgg@ziepe.ca
Cc: linux-rdma@vger.kernel.org, andrew.gospodarek@broadcom.com,
kalesh-anakkur.purayil@broadcom.com, netdev@vger.kernel.org,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
abeni@redhat.com, horms@kernel.org, michael.chan@broadcom.com,
Saravanan Vajravel <saravanan.vajravel@broadcom.com>,
Selvin Xavier <selvin.xavier@broadcom.com>
Subject: [PATCH rdma-next 7/9] RDMA/bnxt_re: Dump the debug information in snapdump
Date: Thu, 20 Feb 2025 10:34:54 -0800 [thread overview]
Message-ID: <1740076496-14227-8-git-send-email-selvin.xavier@broadcom.com> (raw)
In-Reply-To: <1740076496-14227-1-git-send-email-selvin.xavier@broadcom.com>
From: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Dump the cached debug information when the L2 driver
invokes the get_dump_data hook.
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
drivers/infiniband/hw/bnxt_re/main.c | 109 +++++++++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index 76dd0fa..afde0ef 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -508,6 +508,106 @@ static void bnxt_re_dump_ctx(struct bnxt_re_dev *rdev, u32 seg_id, void *buf,
{
}
+/*
+ * bnxt_re_snapdump_qp - Log QP dump to the coredump buffer
+ * @rdev - Pointer to RoCE device instance
+ * @buf - Pointer to dump buffer
+ * @buf_len - Buffer length
+ *
+ * This function will invoke ULP logger to capture snapshot of
+ * SQ/RQ/SCQ/RCQ of a QP in ASCII format.
+ *
+ * Returns: Buffer length
+ */
+static u32 bnxt_re_snapdump_qp(struct bnxt_re_dev *rdev, void *buf, u32 buf_len)
+{
+ u32 index, len = 0, count = 0;
+ struct qdump_qpinfo *qpinfo;
+ struct qdump_array *qdump;
+
+ if (!rdev->qdump_head.qdump)
+ return 0;
+
+ mutex_lock(&rdev->qdump_head.lock);
+ index = rdev->qdump_head.index;
+ while (count < rdev->qdump_head.max_elements) {
+ count++;
+ index = (!index) ? (rdev->qdump_head.max_elements - 1) : (index - 1);
+ qdump = &rdev->qdump_head.qdump[index];
+ if (!qdump->valid || qdump->is_mr)
+ continue;
+
+ qpinfo = &qdump->qpinfo;
+ len += snprintf(buf + len, buf_len - len,
+ "qp_handle 0x%.8x 0x%.8x (xid %d) dest_qp %d type %s state %s ",
+ (u32)(qpinfo->qp_handle >> 32),
+ (u32)(qpinfo->qp_handle & 0xFFFFFFFF),
+ qpinfo->id, qpinfo->dest_qpid,
+ __to_qp_type_str(qpinfo->type),
+ __to_qp_state_str(qpinfo->state));
+ len += snprintf(buf + len, buf_len - len,
+ "is_usr %d scq_handle 0x%llx rcq_handle 0x%llx",
+ qpinfo->is_user, qpinfo->scq_handle, qpinfo->rcq_handle);
+ len += snprintf(buf + len, buf_len - len,
+ "scq_id %d rcq_id %d\n",
+ qpinfo->scq_id, qpinfo->rcq_id);
+ if (len >= buf_len)
+ goto dump_full;
+
+ if (len >= buf_len)
+ goto dump_full;
+ }
+ mutex_unlock(&rdev->qdump_head.lock);
+ return len;
+
+dump_full:
+ mutex_unlock(&rdev->qdump_head.lock);
+ return buf_len;
+}
+
+/*
+ * bnxt_re_snapdump_mr - Log PBL of MR to the coredump buffer
+ * @rdev - Pointer to RoCE device instance
+ * @buf - Pointer to dump buffer
+ * @buf_len - Buffer length
+ *
+ * This function will invoke ULP logger to capture PBL list of
+ * Memory Region in ASCII format.
+ *
+ * Returns: Buffer length
+ */
+static u32 bnxt_re_snapdump_mr(struct bnxt_re_dev *rdev, void *buf, u32 buf_len)
+{
+ u32 index, count = 0, len = 0;
+ struct qdump_array *qdump;
+
+ if (!rdev->qdump_head.qdump)
+ return 0;
+
+ mutex_lock(&rdev->qdump_head.lock);
+ index = rdev->qdump_head.index;
+ while (count < rdev->qdump_head.max_elements) {
+ count++;
+ index = (!index) ? (rdev->qdump_head.max_elements - 1) : (index - 1);
+ qdump = &rdev->qdump_head.qdump[index];
+ if (!qdump->valid || !qdump->is_mr)
+ continue;
+
+ len += snprintf(buf + len, buf_len - len,
+ "**MemoryRegion: type %d lkey 0x%x rkey 0x%x tot_sz %llu **\n",
+ qdump->mrinfo.type, qdump->mrinfo.lkey,
+ qdump->mrinfo.rkey, qdump->mrinfo.total_size);
+ if (len >= buf_len)
+ goto dump_full;
+ }
+ mutex_unlock(&rdev->qdump_head.lock);
+ return len;
+
+dump_full:
+ mutex_unlock(&rdev->qdump_head.lock);
+ return buf_len;
+}
+
/* bnxt_re_snapdump - Collect RoCE debug data for coredump.
* @rdev - rdma device instance
* @buf - Pointer to dump buffer
@@ -520,6 +620,15 @@ static void bnxt_re_dump_ctx(struct bnxt_re_dev *rdev, u32 seg_id, void *buf,
*/
static void bnxt_re_snapdump(struct bnxt_re_dev *rdev, void *buf, u32 buf_len)
{
+ u32 len = 0;
+
+ len += bnxt_re_snapdump_qp(rdev, buf + len, buf_len - len);
+ if (len >= buf_len)
+ return;
+
+ len += bnxt_re_snapdump_mr(rdev, buf + len, buf_len - len);
+ if (len >= buf_len)
+ return;
}
#define BNXT_RE_TRACE_DUMP_SIZE 0x2000000
--
2.5.5
next prev parent reply other threads:[~2025-02-20 18:56 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-20 18:34 [PATCH rdma-next 0/9] RDMA/bnxt_re: Driver Debug Enhancements Selvin Xavier
2025-02-20 18:34 ` [PATCH rdma-next 1/9] RDMA/bnxt_re: Add support for collecting the Queue dumps Selvin Xavier
2025-02-20 18:34 ` [PATCH rdma-next 2/9] RDMA/bnxt_re: Cache the QP information Selvin Xavier
2025-02-20 18:34 ` [PATCH rdma-next 3/9] RDMA/bnxt_re : Initialize the HW context dump collection Selvin Xavier
2025-02-20 18:34 ` [PATCH rdma-next 4/9] RDMA/bnxt_re: Get the resource contexts from the HW Selvin Xavier
2025-02-20 18:34 ` [PATCH rdma-next 5/9] bnxt_en: Introduce ULP coredump callbacks Selvin Xavier
2025-02-22 0:40 ` Jakub Kicinski
2025-02-20 18:34 ` [PATCH rdma-next 6/9] RDMA/bnxt_re: Support the dump infrastructure Selvin Xavier
2025-02-20 18:34 ` Selvin Xavier [this message]
2025-02-20 18:34 ` [PATCH rdma-next 8/9] RDMA/bnxt_re: Dump the HW context information Selvin Xavier
2025-02-20 18:34 ` [PATCH rdma-next 9/9] RDMA/bnxt_re: Add support for changing the snap dump level Selvin Xavier
2025-02-23 13:34 ` [PATCH rdma-next 0/9] RDMA/bnxt_re: Driver Debug Enhancements Leon Romanovsky
2025-02-24 9:00 ` Selvin Xavier
2025-04-01 13:41 ` Jason Gunthorpe
2025-04-01 20:48 ` Andy Gospodarek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1740076496-14227-8-git-send-email-selvin.xavier@broadcom.com \
--to=selvin.xavier@broadcom.com \
--cc=abeni@redhat.com \
--cc=andrew.gospodarek@broadcom.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jgg@ziepe.ca \
--cc=kalesh-anakkur.purayil@broadcom.com \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=michael.chan@broadcom.com \
--cc=netdev@vger.kernel.org \
--cc=saravanan.vajravel@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox