linux-kernel.vger.kernel.org archive mirror
 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-linus][PATCH 15/17] lib/bootconfig: Add override operator support
Date: Tue, 04 Aug 2020 16:57:58 -0400	[thread overview]
Message-ID: <20200804205814.061094876@goodmis.org> (raw)
In-Reply-To: 20200804205743.419135730@goodmis.org

From: Masami Hiramatsu <mhiramat@kernel.org>

Add the value override operator (":=") support to the bootconfig.

This value override operator will be useful for the bootloaders
which will only update the existing bootconfig according to the
bootloader boot options.

Without this override operator, the bootloader needs to parse
the existing bootconfig and update it. However, with this
assignment, it can just append the updated (partial) bootconfig
text at the tail of existing one without parsing it.
(Of course, it must update the size, checksum and magic,
 but that will be done easily)

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

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

diff --git a/lib/bootconfig.c b/lib/bootconfig.c
index 912ef4921398..a5f701161f6b 100644
--- a/lib/bootconfig.c
+++ b/lib/bootconfig.c
@@ -329,22 +329,30 @@ const char * __init xbc_node_find_next_key_value(struct xbc_node *root,
 
 /* XBC parse and tree build */
 
+static int __init xbc_init_node(struct xbc_node *node, char *data, u32 flag)
+{
+	unsigned long offset = data - xbc_data;
+
+	if (WARN_ON(offset >= XBC_DATA_MAX))
+		return -EINVAL;
+
+	node->data = (u16)offset | flag;
+	node->child = 0;
+	node->next = 0;
+
+	return 0;
+}
+
 static struct xbc_node * __init xbc_add_node(char *data, u32 flag)
 {
 	struct xbc_node *node;
-	unsigned long offset;
 
 	if (xbc_node_num == XBC_NODE_MAX)
 		return NULL;
 
 	node = &xbc_nodes[xbc_node_num++];
-	offset = data - xbc_data;
-	node->data = (u16)offset;
-	if (WARN_ON(offset >= XBC_DATA_MAX))
+	if (xbc_init_node(node, data, flag) < 0)
 		return NULL;
-	node->data |= flag;
-	node->child = 0;
-	node->next = 0;
 
 	return node;
 }
@@ -603,7 +611,9 @@ static int __init xbc_parse_kv(char **k, char *v, int op)
 	if (c < 0)
 		return c;
 
-	if (!xbc_add_sibling(v, XBC_VALUE))
+	if (op == ':' && child) {
+		xbc_init_node(child, v, XBC_VALUE);
+	} else if (!xbc_add_sibling(v, XBC_VALUE))
 		return -ENOMEM;
 
 	if (c == ',') {	/* Array */
@@ -787,7 +797,7 @@ int __init xbc_init(char *buf, const char **emsg, int *epos)
 
 	p = buf;
 	do {
-		q = strpbrk(p, "{}=+;\n#");
+		q = strpbrk(p, "{}=+;:\n#");
 		if (!q) {
 			p = skip_spaces(p);
 			if (*p != '\0')
@@ -798,9 +808,12 @@ int __init xbc_init(char *buf, const char **emsg, int *epos)
 		c = *q;
 		*q++ = '\0';
 		switch (c) {
+		case ':':
 		case '+':
 			if (*q++ != '=') {
-				ret = xbc_parse_error("Wrong '+' operator",
+				ret = xbc_parse_error(c == '+' ?
+						"Wrong '+' operator" :
+						"Wrong ':' operator",
 							q - 2);
 				break;
 			}
-- 
2.26.2



  parent reply	other threads:[~2020-08-04 20:58 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-04 20:57 [for-linus][PATCH 00/17] tracing: Last minute fixes for this merge window Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 01/17] tracing: Simplify defining of the next event id Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 02/17] tracing: Save one trace_event->type by using __TRACE_LAST_TYPE Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 03/17] tracing/hwlat: Drop the duplicate assignment in start_kthread() Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 04/17] tracing/hwlat: Honor the tracing_cpumask Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 05/17] ftrace: Setup correct FTRACE_FL_REGS flags for module Steven Rostedt
2020-08-09 15:53   ` Sasha Levin
2020-08-04 20:57 ` [for-linus][PATCH 06/17] ftrace: Do not let direct or IPMODIFY ftrace_ops be added to module and set trampolines Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 07/17] tracing: Remove outdated comment in stack handling Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 09/17] tracepoint: Mark __tracepoint_strings __used Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 10/17] tracepoint: Use __used attribute definitions from compiler_attributes.h Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 11/17] ftrace: Fix ftrace_trace_task return value Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 12/17] kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 13/17] tracing/uprobe: Remove dead code in trace_uprobe_register() Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 14/17] kprobes: Remove show_registers() function prototype Steven Rostedt
2020-08-04 20:57 ` Steven Rostedt [this message]
2020-08-04 20:57 ` [for-linus][PATCH 16/17] tools/bootconfig: Add testcases for value override operator Steven Rostedt
2020-08-04 20:58 ` [for-linus][PATCH 17/17] Documentation: bootconfig: Add bootconfig " 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=20200804205814.061094876@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;
as well as URLs for NNTP newsgroup(s).