Commit 44ec5aa3 authored by Michael J. Ruhl's avatar Michael J. Ruhl Committed by Jason Gunthorpe

IB/hfi1: List all receive contexts from debugfs

The current debugfs output for receive contexts (rcds), stops after the
kernel receive contexts have been displayed.  This is not enough
information to fully diagnose packet drops.

Display all of the receive contexts.

Augment the output with some more context information.

Limit the ring buffer header output to 5 entries to avoid overextending
the sequential file output.

Fixes: bf808b50 ("IB/hfi1: Add kernel receive context info to debugfs")
Link: https://lore.kernel.org/r/20191219211928.58387.20737.stgit@awfm-01.aw.intel.comReviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: default avatarKaike Wan <kaike.wan@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 2fb3b5ae
...@@ -379,7 +379,7 @@ static void *_rcds_seq_next(struct seq_file *s, void *v, loff_t *pos) ...@@ -379,7 +379,7 @@ static void *_rcds_seq_next(struct seq_file *s, void *v, loff_t *pos)
struct hfi1_devdata *dd = dd_from_dev(ibd); struct hfi1_devdata *dd = dd_from_dev(ibd);
++*pos; ++*pos;
if (!dd->rcd || *pos >= dd->n_krcv_queues) if (!dd->rcd || *pos >= dd->num_rcv_contexts)
return NULL; return NULL;
return pos; return pos;
} }
......
...@@ -1726,23 +1726,29 @@ static int process_receive_invalid(struct hfi1_packet *packet) ...@@ -1726,23 +1726,29 @@ static int process_receive_invalid(struct hfi1_packet *packet)
return RHF_RCV_CONTINUE; return RHF_RCV_CONTINUE;
} }
#define HFI1_RCVHDR_DUMP_MAX 5
void seqfile_dump_rcd(struct seq_file *s, struct hfi1_ctxtdata *rcd) void seqfile_dump_rcd(struct seq_file *s, struct hfi1_ctxtdata *rcd)
{ {
struct hfi1_packet packet; struct hfi1_packet packet;
struct ps_mdata mdata; struct ps_mdata mdata;
int i;
seq_printf(s, "Rcd %u: RcvHdr cnt %u entsize %u %s head %llu tail %llu\n", seq_printf(s, "Rcd %u: RcvHdr cnt %u entsize %u %s ctrl 0x%08llx status 0x%08llx, head %llu tail %llu sw head %u\n",
rcd->ctxt, get_hdrq_cnt(rcd), get_hdrqentsize(rcd), rcd->ctxt, get_hdrq_cnt(rcd), get_hdrqentsize(rcd),
get_dma_rtail_setting(rcd) ? get_dma_rtail_setting(rcd) ?
"dma_rtail" : "nodma_rtail", "dma_rtail" : "nodma_rtail",
read_kctxt_csr(rcd->dd, rcd->ctxt, RCV_CTXT_CTRL),
read_kctxt_csr(rcd->dd, rcd->ctxt, RCV_CTXT_STATUS),
read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_HEAD) & read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_HEAD) &
RCV_HDR_HEAD_HEAD_MASK, RCV_HDR_HEAD_HEAD_MASK,
read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_TAIL)); read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_TAIL),
rcd->head);
init_packet(rcd, &packet); init_packet(rcd, &packet);
init_ps_mdata(&mdata, &packet); init_ps_mdata(&mdata, &packet);
while (1) { for (i = 0; i < HFI1_RCVHDR_DUMP_MAX; i++) {
__le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head + __le32 *rhf_addr = (__le32 *)rcd->rcvhdrq + mdata.ps_head +
rcd->rhf_offset; rcd->rhf_offset;
struct ib_header *hdr; struct ib_header *hdr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment