|
@@ -126,6 +126,68 @@ static int _opcode_stats_seq_show(struct seq_file *s, void *v)
|
|
|
|
|
|
DEBUGFS_FILE(opcode_stats)
|
|
|
|
|
|
+static void *_ctx_stats_seq_start(struct seq_file *s, loff_t *pos)
|
|
|
+{
|
|
|
+ struct qib_ibdev *ibd = (struct qib_ibdev *)s->private;
|
|
|
+ struct qib_devdata *dd = dd_from_dev(ibd);
|
|
|
+
|
|
|
+ if (!*pos)
|
|
|
+ return SEQ_START_TOKEN;
|
|
|
+ if (*pos >= dd->first_user_ctxt)
|
|
|
+ return NULL;
|
|
|
+ return pos;
|
|
|
+}
|
|
|
+
|
|
|
+static void *_ctx_stats_seq_next(struct seq_file *s, void *v, loff_t *pos)
|
|
|
+{
|
|
|
+ struct qib_ibdev *ibd = (struct qib_ibdev *)s->private;
|
|
|
+ struct qib_devdata *dd = dd_from_dev(ibd);
|
|
|
+
|
|
|
+ if (v == SEQ_START_TOKEN)
|
|
|
+ return pos;
|
|
|
+
|
|
|
+ ++*pos;
|
|
|
+ if (*pos >= dd->first_user_ctxt)
|
|
|
+ return NULL;
|
|
|
+ return pos;
|
|
|
+}
|
|
|
+
|
|
|
+static void _ctx_stats_seq_stop(struct seq_file *s, void *v)
|
|
|
+{
|
|
|
+ /* nothing allocated */
|
|
|
+}
|
|
|
+
|
|
|
+static int _ctx_stats_seq_show(struct seq_file *s, void *v)
|
|
|
+{
|
|
|
+ loff_t *spos;
|
|
|
+ loff_t i, j;
|
|
|
+ u64 n_packets = 0;
|
|
|
+ struct qib_ibdev *ibd = (struct qib_ibdev *)s->private;
|
|
|
+ struct qib_devdata *dd = dd_from_dev(ibd);
|
|
|
+
|
|
|
+ if (v == SEQ_START_TOKEN) {
|
|
|
+ seq_puts(s, "Ctx:npkts\n");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ spos = v;
|
|
|
+ i = *spos;
|
|
|
+
|
|
|
+ if (!dd->rcd[i])
|
|
|
+ return SEQ_SKIP;
|
|
|
+
|
|
|
+ for (j = 0; j < ARRAY_SIZE(dd->rcd[i]->opstats->stats); j++)
|
|
|
+ n_packets += dd->rcd[i]->opstats->stats[j].n_packets;
|
|
|
+
|
|
|
+ if (!n_packets)
|
|
|
+ return SEQ_SKIP;
|
|
|
+
|
|
|
+ seq_printf(s, " %llu:%llu\n", i, n_packets);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+DEBUGFS_FILE(ctx_stats)
|
|
|
+
|
|
|
void qib_dbg_ibdev_init(struct qib_ibdev *ibd)
|
|
|
{
|
|
|
char name[10];
|
|
@@ -137,6 +199,7 @@ void qib_dbg_ibdev_init(struct qib_ibdev *ibd)
|
|
|
return;
|
|
|
}
|
|
|
DEBUGFS_FILE_CREATE(opcode_stats);
|
|
|
+ DEBUGFS_FILE_CREATE(ctx_stats);
|
|
|
return;
|
|
|
}
|
|
|
|