@@ -6743,6 +6743,15 @@
the same thing would happen if it was left off). The irq_handler_entry
event, and all events under the "initcall" system.
+ Flags can be added to the instance to modify its behavior when it is
+ created. The flags are separated by '^'. Currently there's only one flag
+ defined, and that's "traceoff", to have the tracing instance tracing
+ disabled after it is created.
+
+ trace_instance=foo^traceoff,sched,irq
+
+ The flags must come before the defined events.
+
If memory has been reserved (see memmap for x86), the instance
can use that memory:
@@ -6765,6 +6774,14 @@
kernel versions where the validator will fail and reset the ring buffer
if the layout is not the same as the previous kernel.
+ If the ring buffer is used for persistent bootups and has events enabled,
+ it is recommend to disable tracing so that events from a previous boot do not
+ mix with events of the current boot (unless you are debugging a random crash
+ at boot up).
+
+ reserve_mem=12M:4096:trace trace_instance=boot_map^traceoff@trace,sched,irq
+
+
trace_options=[option-list]
[FTRACE] Enable or disable tracer options at boot.
The option-list is a comma delimited list of options
@@ -10468,10 +10468,36 @@ __init static void enable_instances(void)
phys_addr_t start = 0;
phys_addr_t size = 0;
unsigned long addr = 0;
+ bool traceoff = false;
+ char *flag_delim;
+ char *addr_delim;
tok = strsep(&curr_str, ",");
- name = strsep(&tok, "@");
+ flag_delim = strchr(tok, '^');
+ addr_delim = strchr(tok, '@');
+
+ if (addr_delim)
+ *addr_delim++ = '\0';
+
+ if (flag_delim)
+ *flag_delim++ = '\0';
+
+ name = tok;
+
+ if (flag_delim) {
+ char *flag;
+
+ while ((flag = strsep(&flag_delim, "^"))) {
+ if (strcmp(flag, "traceoff") == 0)
+ traceoff = true;
+ else
+ pr_info("Tracing: Invalid instance flag '%s' for %s\n",
+ flag, name);
+ }
+ }
+
+ tok = addr_delim;
if (tok && isdigit(*tok)) {
start = memparse(tok, &tok);
if (!start) {
@@ -10519,6 +10545,9 @@ __init static void enable_instances(void)
continue;
}
+ if (traceoff)
+ tracer_tracing_off(tr);
+
/* Only allow non mapped buffers to be deleted */
if (!start)
trace_array_put(tr);