From: Jim Cromie <jim.cromie@gmail.com>
Add an epilogue to the control-file, to allow display of statistics
etc, without disturbing the header.
NB: epilogue lines should start with "#: " to distinguish them from
lines describing pr_debugs (and from the header line). No new lines
are added here, only the place to do so.
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
lib/dynamic_debug.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b7ccf471b5ef..d098afe8d340 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -1183,17 +1183,28 @@ static void *ddebug_proc_start(struct seq_file *m, loff_t *pos)
* call from userspace, with ddebug_lock held. Walks to the
* next _ddebug object with a special case for the header line.
*/
+static char ddebug_epilogue_token;
+#define EPILOGUE_TOKEN (&ddebug_epilogue_token)
+
static void *ddebug_proc_next(struct seq_file *m, void *p, loff_t *pos)
{
struct ddebug_iter *iter = m->private;
struct _ddebug *dp;
+ (*pos)++;
+
+ if (p == EPILOGUE_TOKEN)
+ return NULL;
+
if (p == SEQ_START_TOKEN)
dp = ddebug_iter_first(iter);
else
dp = ddebug_iter_next(iter);
- ++*pos;
- return dp;
+
+ if (dp)
+ return dp;
+
+ return EPILOGUE_TOKEN;
}
static bool ddebug_class_map_in_range(const int class_id, const struct ddebug_class_map *map)@@ -1245,6 +1256,10 @@ static int ddebug_proc_show(struct seq_file *m, void *p)
"# filename:lineno [module]function flags format\n");
return 0;
}
+ if (p == EPILOGUE_TOKEN) {
+ /* use this soon */
+ return 0;
+ }
seq_printf(m, "%s:%u [%s]%s =%s \"",
trim_prefix(dp->filename), dp->lineno,
--
2.55.0