public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Masami Hiramatsu <mhiramat@kernel.org>
Subject: [for-next][PATCH 01/26] tools/bootconfig: Show bootconfig compact tree from bootconfig file
Date: Mon, 21 Sep 2020 21:24:15 -0400	[thread overview]
Message-ID: <20200922012449.957719149@goodmis.org> (raw)
In-Reply-To: 20200922012414.115238201@goodmis.org

From: Masami Hiramatsu <mhiramat@kernel.org>

Show the bootconfig compact tree from the bootconfig file
instead of an initrd if the given file has no magic number
and is smaller than 32KB.

User can use this for checking the syntax error or output
checking before applying the bootconfig to initrd.

Link: https://lkml.kernel.org/r/159704848156.175360.6621139371000789360.stgit@devnote2

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
 tools/bootconfig/main.c | 81 +++++++++++++++++++++++++++++------------
 1 file changed, 58 insertions(+), 23 deletions(-)

diff --git a/tools/bootconfig/main.c b/tools/bootconfig/main.c
index e0878f5f74b1..d165e63b5d5a 100644
--- a/tools/bootconfig/main.c
+++ b/tools/bootconfig/main.c
@@ -195,10 +195,55 @@ int load_xbc_from_initrd(int fd, char **buf)
 	return size;
 }
 
+static void show_xbc_error(const char *data, const char *msg, int pos)
+{
+	int lin = 1, col, i;
+
+	if (pos < 0) {
+		pr_err("Error: %s.\n", msg);
+		return;
+	}
+
+	/* Note that pos starts from 0 but lin and col should start from 1. */
+	col = pos + 1;
+	for (i = 0; i < pos; i++) {
+		if (data[i] == '\n') {
+			lin++;
+			col = pos - i;
+		}
+	}
+	pr_err("Parse Error: %s at %d:%d\n", msg, lin, col);
+
+}
+
+static int init_xbc_with_error(char *buf, int len)
+{
+	char *copy = strdup(buf);
+	const char *msg;
+	int ret, pos;
+
+	if (!copy)
+		return -ENOMEM;
+
+	ret = xbc_init(buf, &msg, &pos);
+	if (ret < 0)
+		show_xbc_error(copy, msg, pos);
+	free(copy);
+
+	return ret;
+}
+
 int show_xbc(const char *path)
 {
 	int ret, fd;
 	char *buf = NULL;
+	struct stat st;
+
+	ret = stat(path, &st);
+	if (ret < 0) {
+		pr_err("Failed to stat %s: %d\n", path, -errno);
+		return -errno;
+	}
 
 	fd = open(path, O_RDONLY);
 	if (fd < 0) {
@@ -207,14 +252,24 @@ int show_xbc(const char *path)
 	}
 
 	ret = load_xbc_from_initrd(fd, &buf);
+	close(fd);
 	if (ret < 0) {
 		pr_err("Failed to load a boot config from initrd: %d\n", ret);
 		goto out;
 	}
+	/* Assume a bootconfig file if it is enough small */
+	if (ret == 0 && st.st_size <= XBC_DATA_MAX) {
+		ret = load_xbc_file(path, &buf);
+		if (ret < 0) {
+			pr_err("Failed to load a boot config: %d\n", ret);
+			goto out;
+		}
+		if (init_xbc_with_error(buf, ret) < 0)
+			goto out;
+	}
 	xbc_show_compact_tree();
 	ret = 0;
 out:
-	close(fd);
 	free(buf);
 
 	return ret;
@@ -251,27 +306,6 @@ int delete_xbc(const char *path)
 	return ret;
 }
 
-static void show_xbc_error(const char *data, const char *msg, int pos)
-{
-	int lin = 1, col, i;
-
-	if (pos < 0) {
-		pr_err("Error: %s.\n", msg);
-		return;
-	}
-
-	/* Note that pos starts from 0 but lin and col should start from 1. */
-	col = pos + 1;
-	for (i = 0; i < pos; i++) {
-		if (data[i] == '\n') {
-			lin++;
-			col = pos - i;
-		}
-	}
-	pr_err("Parse Error: %s at %d:%d\n", msg, lin, col);
-
-}
-
 int apply_xbc(const char *path, const char *xbc_path)
 {
 	u32 size, csum;
@@ -352,11 +386,12 @@ int apply_xbc(const char *path, const char *xbc_path)
 int usage(void)
 {
 	printf("Usage: bootconfig [OPTIONS] <INITRD>\n"
+		"Or     bootconfig <CONFIG>\n"
 		" Apply, delete or show boot config to initrd.\n"
 		" Options:\n"
 		"		-a <config>: Apply boot config to initrd\n"
 		"		-d : Delete boot config file from initrd\n\n"
-		" If no option is given, show current applied boot config.\n");
+		" If no option is given, show the bootconfig in the given file.\n");
 	return -1;
 }
 
-- 
2.28.0



  reply	other threads:[~2020-09-22  1:25 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-22  1:24 [for-next][PATCH 00/26] tracing: Updates for 5.10 Steven Rostedt
2020-09-22  1:24 ` Steven Rostedt [this message]
2020-09-22  1:24 ` [for-next][PATCH 02/26] tools/bootconfig: Add list option Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 03/26] tools/bootconfig: Make all functions static Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 04/26] tools/bootconfig: Add a script to generate ftrace shell-command from bootconfig Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 05/26] tools/bootconfig: Add a script to generates bootconfig from ftrace Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 06/26] tools/bootconfig: Add --init option for bconf2ftrace.sh Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 07/26] tracing: toplevel d_entry already initialized Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 08/26] tracing: make tracing_init_dentry() returns an integer instead of a d_entry pointer Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 09/26] tracing: Delete repeated words in comments Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 10/26] tracing: Use __this_cpu_read() in trace_buffered_event_enable() Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 11/26] kprobes: Use module_name() macro Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 12/26] tracing: remove a pointless assignment Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 13/26] fgraph: Convert ret_stack tasklist scanning to rcu Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 14/26] tracing/boot: Add per-instance tracing_on option support Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 15/26] Documentation: tracing: Add tracing_on option to boot-time tracer Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 16/26] tracing/kprobes: Support perf-style return probe Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 17/26] tracing/uprobes: " Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 18/26] Documentation: tracing: Add %return suffix description Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 19/26] Documentation: tracing: boot: Add an example of tracing function-calls Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 20/26] selftests/ftrace: Add %return suffix tests Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 21/26] kprobes: Init kprobes in early_initcall Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 22/26] tracing: Define event fields early stage Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 23/26] tracing: Enable adding dynamic events " Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 24/26] tracing: Enable creating new instance early boot Steven Rostedt
2020-09-23 23:52   ` Masami Hiramatsu
2020-09-24 16:40     ` [PATCH] tracing/boot: Initialize per-instance event list in " Masami Hiramatsu
2020-09-25 19:37       ` Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 25/26] tracing/boot, kprobe, synth: Initialize boot-time tracing earlier Steven Rostedt
2020-09-22  1:24 ` [for-next][PATCH 26/26] Documentation: tracing: Add the startup timing of boot-time tracing Steven Rostedt

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=20200922012449.957719149@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    /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