comma-separated list of trace events to enable. See
                        also Documentation/trace/events.rst
 
+       trace_instance=[instance-info]
+                       [FTRACE] Create a ring buffer instance early in boot up.
+                       This will be listed in:
+
+                               /sys/kernel/tracing/instances
+
        trace_options=[option-list]
                        [FTRACE] Enable or disable tracer options at boot.
                        The option-list is a comma delimited list of options
 
 #include <linux/irq_work.h>
 #include <linux/workqueue.h>
 
+#include <asm/setup.h> /* COMMAND_LINE_SIZE */
+
 #include "trace.h"
 #include "trace_output.h"
 
 static bool allocate_snapshot;
 static bool snapshot_at_boot;
 
+static char boot_instance_info[COMMAND_LINE_SIZE] __initdata;
+static int boot_instance_index;
+
 static int __init set_cmdline_ftrace(char *str)
 {
        strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
 __setup("ftrace_boot_snapshot", boot_snapshot);
 
 
+static int __init boot_instance(char *str)
+{
+       char *slot = boot_instance_info + boot_instance_index;
+       int left = sizeof(boot_instance_info) - boot_instance_index;
+       int ret;
+
+       if (strlen(str) >= left)
+               return -1;
+
+       ret = snprintf(slot, left, "%s\t", str);
+       boot_instance_index += ret;
+
+       return 1;
+}
+__setup("trace_instance=", boot_instance);
+
+
 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
 
 static int __init set_trace_boot_options(char *str)
        return ret;
 }
 
+__init static void enable_instances(void)
+{
+       struct trace_array *tr;
+       char *curr_str;
+       char *str;
+       char *tok;
+
+       /* A tab is always appended */
+       boot_instance_info[boot_instance_index - 1] = '\0';
+       str = boot_instance_info;
+
+       while ((curr_str = strsep(&str, "\t"))) {
+
+               tok = strsep(&curr_str, ",");
+
+               tr = trace_array_get_by_name(tok);
+               if (!tr) {
+                       pr_warn("Failed to create instance buffer %s\n", curr_str);
+                       continue;
+               }
+               /* Allow user space to delete it */
+               trace_array_put(tr);
+       }
+}
+
 __init static int tracer_alloc_buffers(void)
 {
        int ring_buf_size;
 void __init trace_init(void)
 {
        trace_event_init();
+
+       if (boot_instance_index)
+               enable_instances();
 }
 
 __init static void clear_boot_tracer(void)