Commit ce4c8f88 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'trace-v5.15-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing fixes from Steven Rostedt:
 "Minor fixes to the processing of the bootconfig tree"

* tag 'trace-v5.15-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  bootconfig: Rename xbc_node_find_child() to xbc_node_find_subkey()
  tracing/boot: Fix to check the histogram control param is a leaf node
  tracing/boot: Fix trace_boot_hist_add_array() to check array is value
parents a1406e42 5dfe50b0
...@@ -110,7 +110,7 @@ static inline __init bool xbc_node_is_leaf(struct xbc_node *node) ...@@ -110,7 +110,7 @@ static inline __init bool xbc_node_is_leaf(struct xbc_node *node)
} }
/* Tree-based key-value access APIs */ /* Tree-based key-value access APIs */
struct xbc_node * __init xbc_node_find_child(struct xbc_node *parent, struct xbc_node * __init xbc_node_find_subkey(struct xbc_node *parent,
const char *key); const char *key);
const char * __init xbc_node_find_value(struct xbc_node *parent, const char * __init xbc_node_find_value(struct xbc_node *parent,
...@@ -148,7 +148,7 @@ xbc_find_value(const char *key, struct xbc_node **vnode) ...@@ -148,7 +148,7 @@ xbc_find_value(const char *key, struct xbc_node **vnode)
*/ */
static inline struct xbc_node * __init xbc_find_node(const char *key) static inline struct xbc_node * __init xbc_find_node(const char *key)
{ {
return xbc_node_find_child(NULL, key); return xbc_node_find_subkey(NULL, key);
} }
/** /**
......
...@@ -219,13 +219,12 @@ static int __init ...@@ -219,13 +219,12 @@ static int __init
trace_boot_hist_add_array(struct xbc_node *hnode, char **bufp, trace_boot_hist_add_array(struct xbc_node *hnode, char **bufp,
char *end, const char *key) char *end, const char *key)
{ {
struct xbc_node *knode, *anode; struct xbc_node *anode;
const char *p; const char *p;
char sep; char sep;
knode = xbc_node_find_child(hnode, key); p = xbc_node_find_value(hnode, key, &anode);
if (knode) { if (p) {
anode = xbc_node_get_child(knode);
if (!anode) { if (!anode) {
pr_err("hist.%s requires value(s).\n", key); pr_err("hist.%s requires value(s).\n", key);
return -EINVAL; return -EINVAL;
...@@ -263,9 +262,9 @@ trace_boot_hist_add_one_handler(struct xbc_node *hnode, char **bufp, ...@@ -263,9 +262,9 @@ trace_boot_hist_add_one_handler(struct xbc_node *hnode, char **bufp,
append_printf(bufp, end, ":%s(%s)", handler, p); append_printf(bufp, end, ":%s(%s)", handler, p);
/* Compose 'action' parameter */ /* Compose 'action' parameter */
knode = xbc_node_find_child(hnode, "trace"); knode = xbc_node_find_subkey(hnode, "trace");
if (!knode) if (!knode)
knode = xbc_node_find_child(hnode, "save"); knode = xbc_node_find_subkey(hnode, "save");
if (knode) { if (knode) {
anode = xbc_node_get_child(knode); anode = xbc_node_get_child(knode);
...@@ -284,7 +283,7 @@ trace_boot_hist_add_one_handler(struct xbc_node *hnode, char **bufp, ...@@ -284,7 +283,7 @@ trace_boot_hist_add_one_handler(struct xbc_node *hnode, char **bufp,
sep = ','; sep = ',';
} }
append_printf(bufp, end, ")"); append_printf(bufp, end, ")");
} else if (xbc_node_find_child(hnode, "snapshot")) { } else if (xbc_node_find_subkey(hnode, "snapshot")) {
append_printf(bufp, end, ".snapshot()"); append_printf(bufp, end, ".snapshot()");
} else { } else {
pr_err("hist.%s requires an action.\n", pr_err("hist.%s requires an action.\n",
...@@ -315,7 +314,7 @@ trace_boot_hist_add_handlers(struct xbc_node *hnode, char **bufp, ...@@ -315,7 +314,7 @@ trace_boot_hist_add_handlers(struct xbc_node *hnode, char **bufp,
break; break;
} }
if (xbc_node_find_child(hnode, param)) if (xbc_node_find_subkey(hnode, param))
ret = trace_boot_hist_add_one_handler(hnode, bufp, end, handler, param); ret = trace_boot_hist_add_one_handler(hnode, bufp, end, handler, param);
return ret; return ret;
...@@ -375,7 +374,7 @@ trace_boot_compose_hist_cmd(struct xbc_node *hnode, char *buf, size_t size) ...@@ -375,7 +374,7 @@ trace_boot_compose_hist_cmd(struct xbc_node *hnode, char *buf, size_t size)
if (p) if (p)
append_printf(&buf, end, ":name=%s", p); append_printf(&buf, end, ":name=%s", p);
node = xbc_node_find_child(hnode, "var"); node = xbc_node_find_subkey(hnode, "var");
if (node) { if (node) {
xbc_node_for_each_key_value(node, knode, p) { xbc_node_for_each_key_value(node, knode, p) {
/* Expression must not include spaces. */ /* Expression must not include spaces. */
...@@ -386,21 +385,21 @@ trace_boot_compose_hist_cmd(struct xbc_node *hnode, char *buf, size_t size) ...@@ -386,21 +385,21 @@ trace_boot_compose_hist_cmd(struct xbc_node *hnode, char *buf, size_t size)
} }
/* Histogram control attributes (mutual exclusive) */ /* Histogram control attributes (mutual exclusive) */
if (xbc_node_find_child(hnode, "pause")) if (xbc_node_find_value(hnode, "pause", NULL))
append_printf(&buf, end, ":pause"); append_printf(&buf, end, ":pause");
else if (xbc_node_find_child(hnode, "continue")) else if (xbc_node_find_value(hnode, "continue", NULL))
append_printf(&buf, end, ":continue"); append_printf(&buf, end, ":continue");
else if (xbc_node_find_child(hnode, "clear")) else if (xbc_node_find_value(hnode, "clear", NULL))
append_printf(&buf, end, ":clear"); append_printf(&buf, end, ":clear");
/* Histogram handler and actions */ /* Histogram handler and actions */
node = xbc_node_find_child(hnode, "onmax"); node = xbc_node_find_subkey(hnode, "onmax");
if (node && trace_boot_hist_add_handlers(node, &buf, end, "var") < 0) if (node && trace_boot_hist_add_handlers(node, &buf, end, "var") < 0)
return -EINVAL; return -EINVAL;
node = xbc_node_find_child(hnode, "onchange"); node = xbc_node_find_subkey(hnode, "onchange");
if (node && trace_boot_hist_add_handlers(node, &buf, end, "var") < 0) if (node && trace_boot_hist_add_handlers(node, &buf, end, "var") < 0)
return -EINVAL; return -EINVAL;
node = xbc_node_find_child(hnode, "onmatch"); node = xbc_node_find_subkey(hnode, "onmatch");
if (node && trace_boot_hist_add_handlers(node, &buf, end, "event") < 0) if (node && trace_boot_hist_add_handlers(node, &buf, end, "event") < 0)
return -EINVAL; return -EINVAL;
...@@ -437,7 +436,7 @@ trace_boot_init_histograms(struct trace_event_file *file, ...@@ -437,7 +436,7 @@ trace_boot_init_histograms(struct trace_event_file *file,
} }
} }
if (xbc_node_find_child(hnode, "keys")) { if (xbc_node_find_subkey(hnode, "keys")) {
if (trace_boot_compose_hist_cmd(hnode, buf, size) == 0) { if (trace_boot_compose_hist_cmd(hnode, buf, size) == 0) {
tmp = kstrdup(buf, GFP_KERNEL); tmp = kstrdup(buf, GFP_KERNEL);
if (trigger_process_regex(file, buf) < 0) if (trigger_process_regex(file, buf) < 0)
...@@ -496,7 +495,7 @@ trace_boot_init_one_event(struct trace_array *tr, struct xbc_node *gnode, ...@@ -496,7 +495,7 @@ trace_boot_init_one_event(struct trace_array *tr, struct xbc_node *gnode,
else if (trigger_process_regex(file, buf) < 0) else if (trigger_process_regex(file, buf) < 0)
pr_err("Failed to apply an action: %s\n", p); pr_err("Failed to apply an action: %s\n", p);
} }
anode = xbc_node_find_child(enode, "hist"); anode = xbc_node_find_subkey(enode, "hist");
if (anode) if (anode)
trace_boot_init_histograms(file, anode, buf, ARRAY_SIZE(buf)); trace_boot_init_histograms(file, anode, buf, ARRAY_SIZE(buf));
} else if (xbc_node_find_value(enode, "actions", NULL)) } else if (xbc_node_find_value(enode, "actions", NULL))
...@@ -518,7 +517,7 @@ trace_boot_init_events(struct trace_array *tr, struct xbc_node *node) ...@@ -518,7 +517,7 @@ trace_boot_init_events(struct trace_array *tr, struct xbc_node *node)
bool enable, enable_all = false; bool enable, enable_all = false;
const char *data; const char *data;
node = xbc_node_find_child(node, "event"); node = xbc_node_find_subkey(node, "event");
if (!node) if (!node)
return; return;
/* per-event key starts with "event.GROUP.EVENT" */ /* per-event key starts with "event.GROUP.EVENT" */
...@@ -621,7 +620,7 @@ trace_boot_init_instances(struct xbc_node *node) ...@@ -621,7 +620,7 @@ trace_boot_init_instances(struct xbc_node *node)
struct trace_array *tr; struct trace_array *tr;
const char *p; const char *p;
node = xbc_node_find_child(node, "instance"); node = xbc_node_find_subkey(node, "instance");
if (!node) if (!node)
return; return;
......
...@@ -142,16 +142,16 @@ xbc_node_match_prefix(struct xbc_node *node, const char **prefix) ...@@ -142,16 +142,16 @@ xbc_node_match_prefix(struct xbc_node *node, const char **prefix)
} }
/** /**
* xbc_node_find_child() - Find a child node which matches given key * xbc_node_find_subkey() - Find a subkey node which matches given key
* @parent: An XBC node. * @parent: An XBC node.
* @key: A key string. * @key: A key string.
* *
* Search a node under @parent which matches @key. The @key can contain * Search a key node under @parent which matches @key. The @key can contain
* several words jointed with '.'. If @parent is NULL, this searches the * several words jointed with '.'. If @parent is NULL, this searches the
* node from whole tree. Return NULL if no node is matched. * node from whole tree. Return NULL if no node is matched.
*/ */
struct xbc_node * __init struct xbc_node * __init
xbc_node_find_child(struct xbc_node *parent, const char *key) xbc_node_find_subkey(struct xbc_node *parent, const char *key)
{ {
struct xbc_node *node; struct xbc_node *node;
...@@ -191,7 +191,7 @@ const char * __init ...@@ -191,7 +191,7 @@ const char * __init
xbc_node_find_value(struct xbc_node *parent, const char *key, xbc_node_find_value(struct xbc_node *parent, const char *key,
struct xbc_node **vnode) struct xbc_node **vnode)
{ {
struct xbc_node *node = xbc_node_find_child(parent, key); struct xbc_node *node = xbc_node_find_subkey(parent, key);
if (!node || !xbc_node_is_key(node)) if (!node || !xbc_node_is_key(node))
return NULL; return NULL;
......
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