Upgrade to 4.4.50-rt62
[kvmfornfv.git] / kernel / kernel / trace / trace.c
index f1ee84b..cad1a28 100644 (file)
@@ -2559,17 +2559,17 @@ get_total_entries(struct trace_buffer *buf,
 
 static void print_lat_help_header(struct seq_file *m)
 {
-       seq_puts(m, "#                   _--------=> CPU#              \n"
-                   "#                  / _-------=> irqs-off          \n"
-                   "#                 | / _------=> need-resched      \n"
-                   "#                 || / _-----=> need-resched_lazy \n"
-                   "#                 ||| / _----=> hardirq/softirq   \n"
-                   "#                 |||| / _---=> preempt-depth     \n"
-                   "#                 ||||| / _--=> preempt-lazy-depth\n"
-                   "#                 |||||| / _-=> migrate-disable   \n"
-                   "#                 ||||||| /     delay             \n"
-                   "#  cmd     pid    |||||||| time  |   caller       \n"
-                   "#     \\   /      ||||||||  \\   |   /            \n");
+       seq_puts(m, "#                  _--------=> CPU#              \n"
+                   "#                 / _-------=> irqs-off          \n"
+                   "#                | / _------=> need-resched      \n"
+                   "#                || / _-----=> need-resched_lazy \n"
+                   "#                ||| / _----=> hardirq/softirq   \n"
+                   "#                |||| / _---=> preempt-depth     \n"
+                   "#                ||||| / _--=> preempt-lazy-depth\n"
+                   "#                |||||| / _-=> migrate-disable   \n"
+                   "#                ||||||| /     delay             \n"
+                   "# cmd     pid    |||||||| time   |  caller       \n"
+                   "#     \\   /      ||||||||   \\    |  /            \n");
 }
 
 static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
@@ -2598,11 +2598,11 @@ static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file
                    "#                            |/  _-----=> need-resched_lazy\n"
                    "#                            || / _---=> hardirq/softirq\n"
                    "#                            ||| / _--=> preempt-depth\n"
-                   "#                            |||| /_--=> preempt-lazy-depth\n"
-                   "#                            |||||  _-=> migrate-disable   \n"
-                   "#                            ||||| /    delay\n"
-                   "#           TASK-PID   CPU#  ||||||    TIMESTAMP  FUNCTION\n"
-                   "#              | |       |   ||||||       |         |\n");
+                   "#                            |||| / _-=> preempt-lazy-depth\n"
+                   "#                            ||||| / _-=> migrate-disable   \n"
+                   "#                            |||||| /    delay\n"
+                   "#           TASK-PID   CPU#  |||||||   TIMESTAMP  FUNCTION\n"
+                   "#              | |       |   |||||||      |         |\n");
 }
 
 void
@@ -4737,19 +4737,20 @@ tracing_read_pipe(struct file *filp, char __user *ubuf,
        struct trace_iterator *iter = filp->private_data;
        ssize_t sret;
 
-       /* return any leftover data */
-       sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
-       if (sret != -EBUSY)
-               return sret;
-
-       trace_seq_init(&iter->seq);
-
        /*
         * Avoid more than one consumer on a single file descriptor
         * This is just a matter of traces coherency, the ring buffer itself
         * is protected.
         */
        mutex_lock(&iter->mutex);
+
+       /* return any leftover data */
+       sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
+       if (sret != -EBUSY)
+               goto out;
+
+       trace_seq_init(&iter->seq);
+
        if (iter->trace->read) {
                sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
                if (sret)
@@ -4959,7 +4960,10 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,
 
        spd.nr_pages = i;
 
-       ret = splice_to_pipe(pipe, &spd);
+       if (i)
+               ret = splice_to_pipe(pipe, &spd);
+       else
+               ret = 0;
 out:
        splice_shrink_spd(&spd);
        return ret;
@@ -5773,9 +5777,6 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
                return -EBUSY;
 #endif
 
-       if (splice_grow_spd(pipe, &spd))
-               return -ENOMEM;
-
        if (*ppos & (PAGE_SIZE - 1))
                return -EINVAL;
 
@@ -5785,6 +5786,9 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
                len &= PAGE_MASK;
        }
 
+       if (splice_grow_spd(pipe, &spd))
+               return -ENOMEM;
+
  again:
        trace_access_lock(iter->cpu_file);
        entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
@@ -5842,19 +5846,21 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
        /* did we read anything? */
        if (!spd.nr_pages) {
                if (ret)
-                       return ret;
+                       goto out;
 
+               ret = -EAGAIN;
                if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
-                       return -EAGAIN;
+                       goto out;
 
                ret = wait_on_pipe(iter, true);
                if (ret)
-                       return ret;
+                       goto out;
 
                goto again;
        }
 
        ret = splice_to_pipe(pipe, &spd);
+out:
        splice_shrink_spd(&spd);
 
        return ret;