"block",
        "stacktrace",
        "sched-tree",
+       "ftrace_printk",
        NULL
 };
 
 
 int __ftrace_printk(unsigned long ip, const char *fmt, ...)
 {
-       struct trace_array *tr = &global_trace;
        static DEFINE_SPINLOCK(trace_buf_lock);
        static char trace_buf[TRACE_BUF_SIZE];
+
+       struct trace_array *tr = &global_trace;
        struct trace_array_cpu *data;
        struct trace_entry *entry;
        unsigned long flags;
        va_list ap;
        int cpu, len = 0, write, written = 0;
 
-       if (likely(!ftrace_function_enabled))
+       if (!(trace_flags & TRACE_ITER_PRINTK) || !tr->ctrl || tracing_disabled)
                return 0;
 
        local_irq_save(flags);
        data = tr->data[cpu];
        disabled = atomic_inc_return(&data->disabled);
 
-       if (unlikely(disabled != 1 || !ftrace_function_enabled))
+       if (unlikely(disabled != 1))
                goto out;
 
        spin_lock(&trace_buf_lock);
 
        TRACE_ITER_BLOCK                = 0x80,
        TRACE_ITER_STACKTRACE           = 0x100,
        TRACE_ITER_SCHED_TREE           = 0x200,
+       TRACE_ITER_PRINTK               = 0x400,
 };
 
 #endif /* _LINUX_KERNEL_TRACE_H */