Check booting during trace_printk()
authorBarret Rhoden <brho@cs.berkeley.edu>
Sun, 6 Nov 2016 16:18:52 +0000 (11:18 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
Instead of num_cores.  This is safer, in case we set num_cores before
various per-cpu structures are set up.

The reason for this is that the memory allocator will need to know about
num_cores, and that will happen very early in the booting process.

trace_printk() will be fine if it just uses the boot object instead of
per-cpu objects during boot.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/dev/kprof.c

index 0b0733a..f6ea896 100644 (file)
@@ -27,6 +27,7 @@
 #include <profiler.h>
 #include <kprof.h>
 #include <ros/procinfo.h>
+#include <init.h>
 
 #define KTRACE_BUFFER_SIZE (128 * 1024)
 #define TRACE_PRINTK_BUFFER_SIZE (8 * 1024)
@@ -463,7 +464,7 @@ static struct trace_printk_buffer *kprof_get_printk_buffer(void)
        static struct trace_printk_buffer *cpu_tpbs;
        static atomic_t alloc_done;
 
-       if (unlikely(!num_cores))
+       if (unlikely(booting))
                return &boot_tpb;
        if (unlikely(!cpu_tpbs)) {
                /* Poor man per-CPU data structure. I really do no like littering global