These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / kernel / trace / trace_output.c
index c86bed2..9f19d83 100644 (file)
@@ -60,9 +60,9 @@ enum print_line_t trace_print_printk_msg_only(struct trace_iterator *iter)
 }
 
 const char *
-ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
-                      unsigned long flags,
-                      const struct trace_print_flags *flag_array)
+trace_print_flags_seq(struct trace_seq *p, const char *delim,
+                     unsigned long flags,
+                     const struct trace_print_flags *flag_array)
 {
        unsigned long mask;
        const char *str;
@@ -95,11 +95,11 @@ ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
 
        return ret;
 }
-EXPORT_SYMBOL(ftrace_print_flags_seq);
+EXPORT_SYMBOL(trace_print_flags_seq);
 
 const char *
-ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
-                        const struct trace_print_flags *symbol_array)
+trace_print_symbols_seq(struct trace_seq *p, unsigned long val,
+                       const struct trace_print_flags *symbol_array)
 {
        int i;
        const char *ret = trace_seq_buffer_ptr(p);
@@ -120,11 +120,11 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
 
        return ret;
 }
-EXPORT_SYMBOL(ftrace_print_symbols_seq);
+EXPORT_SYMBOL(trace_print_symbols_seq);
 
 #if BITS_PER_LONG == 32
 const char *
-ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val,
+trace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val,
                         const struct trace_print_flags_u64 *symbol_array)
 {
        int i;
@@ -146,12 +146,12 @@ ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val,
 
        return ret;
 }
-EXPORT_SYMBOL(ftrace_print_symbols_seq_u64);
+EXPORT_SYMBOL(trace_print_symbols_seq_u64);
 #endif
 
 const char *
-ftrace_print_bitmask_seq(struct trace_seq *p, void *bitmask_ptr,
-                        unsigned int bitmask_size)
+trace_print_bitmask_seq(struct trace_seq *p, void *bitmask_ptr,
+                       unsigned int bitmask_size)
 {
        const char *ret = trace_seq_buffer_ptr(p);
 
@@ -160,10 +160,10 @@ ftrace_print_bitmask_seq(struct trace_seq *p, void *bitmask_ptr,
 
        return ret;
 }
-EXPORT_SYMBOL_GPL(ftrace_print_bitmask_seq);
+EXPORT_SYMBOL_GPL(trace_print_bitmask_seq);
 
 const char *
-ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
+trace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
 {
        int i;
        const char *ret = trace_seq_buffer_ptr(p);
@@ -175,11 +175,11 @@ ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
 
        return ret;
 }
-EXPORT_SYMBOL(ftrace_print_hex_seq);
+EXPORT_SYMBOL(trace_print_hex_seq);
 
 const char *
-ftrace_print_array_seq(struct trace_seq *p, const void *buf, int count,
-                      size_t el_size)
+trace_print_array_seq(struct trace_seq *p, const void *buf, int count,
+                     size_t el_size)
 {
        const char *ret = trace_seq_buffer_ptr(p);
        const char *prefix = "";
@@ -220,17 +220,17 @@ ftrace_print_array_seq(struct trace_seq *p, const void *buf, int count,
 
        return ret;
 }
-EXPORT_SYMBOL(ftrace_print_array_seq);
+EXPORT_SYMBOL(trace_print_array_seq);
 
-int ftrace_raw_output_prep(struct trace_iterator *iter,
-                          struct trace_event *trace_event)
+int trace_raw_output_prep(struct trace_iterator *iter,
+                         struct trace_event *trace_event)
 {
-       struct ftrace_event_call *event;
+       struct trace_event_call *event;
        struct trace_seq *s = &iter->seq;
        struct trace_seq *p = &iter->tmp_seq;
        struct trace_entry *entry;
 
-       event = container_of(trace_event, struct ftrace_event_call, event);
+       event = container_of(trace_event, struct trace_event_call, event);
        entry = iter->ent;
 
        if (entry->type != event->event.type) {
@@ -239,14 +239,14 @@ int ftrace_raw_output_prep(struct trace_iterator *iter,
        }
 
        trace_seq_init(p);
-       trace_seq_printf(s, "%s: ", ftrace_event_name(event));
+       trace_seq_printf(s, "%s: ", trace_event_name(event));
 
        return trace_handle_return(s);
 }
-EXPORT_SYMBOL(ftrace_raw_output_prep);
+EXPORT_SYMBOL(trace_raw_output_prep);
 
-static int ftrace_output_raw(struct trace_iterator *iter, char *name,
-                            char *fmt, va_list ap)
+static int trace_output_raw(struct trace_iterator *iter, char *name,
+                           char *fmt, va_list ap)
 {
        struct trace_seq *s = &iter->seq;
 
@@ -256,18 +256,18 @@ static int ftrace_output_raw(struct trace_iterator *iter, char *name,
        return trace_handle_return(s);
 }
 
-int ftrace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...)
+int trace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...)
 {
        va_list ap;
        int ret;
 
        va_start(ap, fmt);
-       ret = ftrace_output_raw(iter, name, fmt, ap);
+       ret = trace_output_raw(iter, name, fmt, ap);
        va_end(ap);
 
        return ret;
 }
-EXPORT_SYMBOL_GPL(ftrace_output_call);
+EXPORT_SYMBOL_GPL(trace_output_call);
 
 #ifdef CONFIG_KRETPROBES
 static inline const char *kretprobed(const char *name)
@@ -322,8 +322,8 @@ seq_print_sym_offset(struct trace_seq *s, const char *fmt,
 # define IP_FMT "%016lx"
 #endif
 
-int seq_print_user_ip(struct trace_seq *s, struct mm_struct *mm,
-                     unsigned long ip, unsigned long sym_flags)
+static int seq_print_user_ip(struct trace_seq *s, struct mm_struct *mm,
+                            unsigned long ip, unsigned long sym_flags)
 {
        struct file *file = NULL;
        unsigned long vmstart = 0;
@@ -354,50 +354,6 @@ int seq_print_user_ip(struct trace_seq *s, struct mm_struct *mm,
        return !trace_seq_has_overflowed(s);
 }
 
-int
-seq_print_userip_objs(const struct userstack_entry *entry, struct trace_seq *s,
-                     unsigned long sym_flags)
-{
-       struct mm_struct *mm = NULL;
-       unsigned int i;
-
-       if (trace_flags & TRACE_ITER_SYM_USEROBJ) {
-               struct task_struct *task;
-               /*
-                * we do the lookup on the thread group leader,
-                * since individual threads might have already quit!
-                */
-               rcu_read_lock();
-               task = find_task_by_vpid(entry->tgid);
-               if (task)
-                       mm = get_task_mm(task);
-               rcu_read_unlock();
-       }
-
-       for (i = 0; i < FTRACE_STACK_ENTRIES; i++) {
-               unsigned long ip = entry->caller[i];
-
-               if (ip == ULONG_MAX || trace_seq_has_overflowed(s))
-                       break;
-
-               trace_seq_puts(s, " => ");
-
-               if (!ip) {
-                       trace_seq_puts(s, "??");
-                       trace_seq_putc(s, '\n');
-                       continue;
-               }
-
-               seq_print_user_ip(s, mm, ip, sym_flags);
-               trace_seq_putc(s, '\n');
-       }
-
-       if (mm)
-               mmput(mm);
-
-       return !trace_seq_has_overflowed(s);
-}
-
 int
 seq_print_ip_sym(struct trace_seq *s, unsigned long ip, unsigned long sym_flags)
 {
@@ -510,6 +466,8 @@ static const struct trace_mark {
        char                    sym;
 } mark[] = {
        MARK(1000000000ULL      , '$'), /* 1 sec */
+       MARK(100000000ULL       , '@'), /* 100 msec */
+       MARK(10000000ULL        , '*'), /* 10 msec */
        MARK(1000000ULL         , '#'), /* 1000 usecs */
        MARK(100000ULL          , '!'), /* 100 usecs */
        MARK(10000ULL           , '+'), /* 10 usecs */
@@ -522,7 +480,7 @@ char trace_find_mark(unsigned long long d)
        int size = ARRAY_SIZE(mark);
 
        for (i = 0; i < size; i++) {
-               if (d >= mark[i].val)
+               if (d > mark[i].val)
                        break;
        }
 
@@ -532,7 +490,8 @@ char trace_find_mark(unsigned long long d)
 static int
 lat_print_timestamp(struct trace_iterator *iter, u64 next_ts)
 {
-       unsigned long verbose = trace_flags & TRACE_ITER_VERBOSE;
+       struct trace_array *tr = iter->tr;
+       unsigned long verbose = tr->trace_flags & TRACE_ITER_VERBOSE;
        unsigned long in_ns = iter->iter_flags & TRACE_FILE_TIME_IN_NS;
        unsigned long long abs_ts = iter->ts - iter->trace_buffer->time_start;
        unsigned long long rel_ts = next_ts - iter->ts;
@@ -575,6 +534,7 @@ lat_print_timestamp(struct trace_iterator *iter, u64 next_ts)
 
 int trace_print_context(struct trace_iterator *iter)
 {
+       struct trace_array *tr = iter->tr;
        struct trace_seq *s = &iter->seq;
        struct trace_entry *entry = iter->ent;
        unsigned long long t;
@@ -586,7 +546,7 @@ int trace_print_context(struct trace_iterator *iter)
        trace_seq_printf(s, "%16s-%-5d [%03d] ",
                               comm, entry->pid, iter->cpu);
 
-       if (trace_flags & TRACE_ITER_IRQ_INFO)
+       if (tr->trace_flags & TRACE_ITER_IRQ_INFO)
                trace_print_lat_fmt(s, entry);
 
        if (iter->iter_flags & TRACE_FILE_TIME_IN_NS) {
@@ -602,14 +562,15 @@ int trace_print_context(struct trace_iterator *iter)
 
 int trace_print_lat_context(struct trace_iterator *iter)
 {
-       u64 next_ts;
+       struct trace_array *tr = iter->tr;
        /* trace_find_next_entry will reset ent_size */
        int ent_size = iter->ent_size;
        struct trace_seq *s = &iter->seq;
+       u64 next_ts;
        struct trace_entry *entry = iter->ent,
                           *next_entry = trace_find_next_entry(iter, NULL,
                                                               &next_ts);
-       unsigned long verbose = (trace_flags & TRACE_ITER_VERBOSE);
+       unsigned long verbose = (tr->trace_flags & TRACE_ITER_VERBOSE);
 
        /* Restore the original ent_size */
        iter->ent_size = ent_size;
@@ -689,7 +650,7 @@ static int trace_search_list(struct list_head **list)
        }
 
        /* Did we used up all 65 thousand events??? */
-       if ((last + 1) > FTRACE_MAX_EVENT)
+       if ((last + 1) > TRACE_EVENT_TYPE_MAX)
                return 0;
 
        *list = &e->list;
@@ -707,7 +668,7 @@ void trace_event_read_unlock(void)
 }
 
 /**
- * register_ftrace_event - register output for an event type
+ * register_trace_event - register output for an event type
  * @event: the event type to register
  *
  * Event types are stored in a hash and this hash is used to
@@ -721,7 +682,7 @@ void trace_event_read_unlock(void)
  *
  * Returns the event type number or zero on error.
  */
-int register_ftrace_event(struct trace_event *event)
+int register_trace_event(struct trace_event *event)
 {
        unsigned key;
        int ret = 0;
@@ -739,7 +700,7 @@ int register_ftrace_event(struct trace_event *event)
        if (!event->type) {
                struct list_head *list = NULL;
 
-               if (next_event_type > FTRACE_MAX_EVENT) {
+               if (next_event_type > TRACE_EVENT_TYPE_MAX) {
 
                        event->type = trace_search_list(&list);
                        if (!event->type)
@@ -785,12 +746,12 @@ int register_ftrace_event(struct trace_event *event)
 
        return ret;
 }
-EXPORT_SYMBOL_GPL(register_ftrace_event);
+EXPORT_SYMBOL_GPL(register_trace_event);
 
 /*
  * Used by module code with the trace_event_sem held for write.
  */
-int __unregister_ftrace_event(struct trace_event *event)
+int __unregister_trace_event(struct trace_event *event)
 {
        hlist_del(&event->node);
        list_del(&event->list);
@@ -798,18 +759,18 @@ int __unregister_ftrace_event(struct trace_event *event)
 }
 
 /**
- * unregister_ftrace_event - remove a no longer used event
+ * unregister_trace_event - remove a no longer used event
  * @event: the event to remove
  */
-int unregister_ftrace_event(struct trace_event *event)
+int unregister_trace_event(struct trace_event *event)
 {
        down_write(&trace_event_sem);
-       __unregister_ftrace_event(event);
+       __unregister_trace_event(event);
        up_write(&trace_event_sem);
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(unregister_ftrace_event);
+EXPORT_SYMBOL_GPL(unregister_trace_event);
 
 /*
  * Standard events
@@ -1091,13 +1052,49 @@ static struct trace_event trace_stack_event = {
 static enum print_line_t trace_user_stack_print(struct trace_iterator *iter,
                                                int flags, struct trace_event *event)
 {
+       struct trace_array *tr = iter->tr;
        struct userstack_entry *field;
        struct trace_seq *s = &iter->seq;
+       struct mm_struct *mm = NULL;
+       unsigned int i;
 
        trace_assign_type(field, iter->ent);
 
        trace_seq_puts(s, "<user stack trace>\n");
-       seq_print_userip_objs(field, s, flags);
+
+       if (tr->trace_flags & TRACE_ITER_SYM_USEROBJ) {
+               struct task_struct *task;
+               /*
+                * we do the lookup on the thread group leader,
+                * since individual threads might have already quit!
+                */
+               rcu_read_lock();
+               task = find_task_by_vpid(field->tgid);
+               if (task)
+                       mm = get_task_mm(task);
+               rcu_read_unlock();
+       }
+
+       for (i = 0; i < FTRACE_STACK_ENTRIES; i++) {
+               unsigned long ip = field->caller[i];
+
+               if (ip == ULONG_MAX || trace_seq_has_overflowed(s))
+                       break;
+
+               trace_seq_puts(s, " => ");
+
+               if (!ip) {
+                       trace_seq_puts(s, "??");
+                       trace_seq_putc(s, '\n');
+                       continue;
+               }
+
+               seq_print_user_ip(s, mm, ip, flags);
+               trace_seq_putc(s, '\n');
+       }
+
+       if (mm)
+               mmput(mm);
 
        return trace_handle_return(s);
 }
@@ -1257,7 +1254,7 @@ __init static int init_events(void)
        for (i = 0; events[i]; i++) {
                event = events[i];
 
-               ret = register_ftrace_event(event);
+               ret = register_trace_event(event);
                if (!ret) {
                        printk(KERN_WARNING "event %d failed to register\n",
                               event->type);