Merge tag 'fuse-update-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/mszered...
[linux-2.6-microblaze.git] / kernel / trace / trace_output.c
index d0368a5..a0bf446 100644 (file)
@@ -1202,7 +1202,6 @@ trace_hwlat_print(struct trace_iterator *iter, int flags,
        return trace_handle_return(s);
 }
 
-
 static enum print_line_t
 trace_hwlat_raw(struct trace_iterator *iter, int flags,
                struct trace_event *event)
@@ -1232,6 +1231,122 @@ static struct trace_event trace_hwlat_event = {
        .funcs          = &trace_hwlat_funcs,
 };
 
+/* TRACE_OSNOISE */
+static enum print_line_t
+trace_osnoise_print(struct trace_iterator *iter, int flags,
+                   struct trace_event *event)
+{
+       struct trace_entry *entry = iter->ent;
+       struct trace_seq *s = &iter->seq;
+       struct osnoise_entry *field;
+       u64 ratio, ratio_dec;
+       u64 net_runtime;
+
+       trace_assign_type(field, entry);
+
+       /*
+        * compute the available % of cpu time.
+        */
+       net_runtime = field->runtime - field->noise;
+       ratio = net_runtime * 10000000;
+       do_div(ratio, field->runtime);
+       ratio_dec = do_div(ratio, 100000);
+
+       trace_seq_printf(s, "%llu %10llu %3llu.%05llu %7llu",
+                        field->runtime,
+                        field->noise,
+                        ratio, ratio_dec,
+                        field->max_sample);
+
+       trace_seq_printf(s, " %6u", field->hw_count);
+       trace_seq_printf(s, " %6u", field->nmi_count);
+       trace_seq_printf(s, " %6u", field->irq_count);
+       trace_seq_printf(s, " %6u", field->softirq_count);
+       trace_seq_printf(s, " %6u", field->thread_count);
+
+       trace_seq_putc(s, '\n');
+
+       return trace_handle_return(s);
+}
+
+static enum print_line_t
+trace_osnoise_raw(struct trace_iterator *iter, int flags,
+                 struct trace_event *event)
+{
+       struct osnoise_entry *field;
+       struct trace_seq *s = &iter->seq;
+
+       trace_assign_type(field, iter->ent);
+
+       trace_seq_printf(s, "%lld %llu %llu %u %u %u %u %u\n",
+                        field->runtime,
+                        field->noise,
+                        field->max_sample,
+                        field->hw_count,
+                        field->nmi_count,
+                        field->irq_count,
+                        field->softirq_count,
+                        field->thread_count);
+
+       return trace_handle_return(s);
+}
+
+static struct trace_event_functions trace_osnoise_funcs = {
+       .trace          = trace_osnoise_print,
+       .raw            = trace_osnoise_raw,
+};
+
+static struct trace_event trace_osnoise_event = {
+       .type           = TRACE_OSNOISE,
+       .funcs          = &trace_osnoise_funcs,
+};
+
+/* TRACE_TIMERLAT */
+static enum print_line_t
+trace_timerlat_print(struct trace_iterator *iter, int flags,
+                    struct trace_event *event)
+{
+       struct trace_entry *entry = iter->ent;
+       struct trace_seq *s = &iter->seq;
+       struct timerlat_entry *field;
+
+       trace_assign_type(field, entry);
+
+       trace_seq_printf(s, "#%-5u context %6s timer_latency %9llu ns\n",
+                        field->seqnum,
+                        field->context ? "thread" : "irq",
+                        field->timer_latency);
+
+       return trace_handle_return(s);
+}
+
+static enum print_line_t
+trace_timerlat_raw(struct trace_iterator *iter, int flags,
+                  struct trace_event *event)
+{
+       struct timerlat_entry *field;
+       struct trace_seq *s = &iter->seq;
+
+       trace_assign_type(field, iter->ent);
+
+       trace_seq_printf(s, "%u %d %llu\n",
+                        field->seqnum,
+                        field->context,
+                        field->timer_latency);
+
+       return trace_handle_return(s);
+}
+
+static struct trace_event_functions trace_timerlat_funcs = {
+       .trace          = trace_timerlat_print,
+       .raw            = trace_timerlat_raw,
+};
+
+static struct trace_event trace_timerlat_event = {
+       .type           = TRACE_TIMERLAT,
+       .funcs          = &trace_timerlat_funcs,
+};
+
 /* TRACE_BPUTS */
 static enum print_line_t
 trace_bputs_print(struct trace_iterator *iter, int flags,
@@ -1442,6 +1557,8 @@ static struct trace_event *events[] __initdata = {
        &trace_bprint_event,
        &trace_print_event,
        &trace_hwlat_event,
+       &trace_osnoise_event,
+       &trace_timerlat_event,
        &trace_raw_data_event,
        &trace_func_repeats_event,
        NULL