summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0077-tracing-Inline-tracing_gen_ctx_flags.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0077-tracing-Inline-tracing_gen_ctx_flags.patch')
-rw-r--r--debian/patches-rt/0077-tracing-Inline-tracing_gen_ctx_flags.patch184
1 files changed, 184 insertions, 0 deletions
diff --git a/debian/patches-rt/0077-tracing-Inline-tracing_gen_ctx_flags.patch b/debian/patches-rt/0077-tracing-Inline-tracing_gen_ctx_flags.patch
new file mode 100644
index 000000000..38993b6b8
--- /dev/null
+++ b/debian/patches-rt/0077-tracing-Inline-tracing_gen_ctx_flags.patch
@@ -0,0 +1,184 @@
+From 49d76ea7e195eb08b5c73a3a11dba066afd40070 Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 3 Feb 2021 11:05:24 -0500
+Subject: [PATCH 077/323] tracing: Inline tracing_gen_ctx_flags()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.204-rt100.tar.xz
+
+Inline tracing_gen_ctx_flags(). This allows to have one ifdef
+CONFIG_TRACE_IRQFLAGS_SUPPORT.
+
+This requires to move `trace_flag_type' so tracing_gen_ctx_flags() can
+use it.
+
+Link: https://lkml.kernel.org/r/20210125194511.3924915-3-bigeasy@linutronix.de
+
+Suggested-by: Steven Rostedt <rostedt@goodmis.org>
+Link: https://lkml.kernel.org/r/20210125140323.6b1ff20c@gandalf.local.home
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ include/linux/trace_events.h | 54 ++++++++++++++++++++++++++++++++++--
+ kernel/trace/trace.c | 38 ++-----------------------
+ kernel/trace/trace.h | 19 -------------
+ 3 files changed, 53 insertions(+), 58 deletions(-)
+
+diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
+index 2a98c40526a0..c4b0524582d8 100644
+--- a/include/linux/trace_events.h
++++ b/include/linux/trace_events.h
+@@ -164,9 +164,57 @@ static inline void tracing_generic_entry_update(struct trace_entry *entry,
+ entry->flags = trace_ctx >> 16;
+ }
+
+-unsigned int tracing_gen_ctx_flags(unsigned long irqflags);
+-unsigned int tracing_gen_ctx(void);
+-unsigned int tracing_gen_ctx_dec(void);
++unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status);
++
++enum trace_flag_type {
++ TRACE_FLAG_IRQS_OFF = 0x01,
++ TRACE_FLAG_IRQS_NOSUPPORT = 0x02,
++ TRACE_FLAG_NEED_RESCHED = 0x04,
++ TRACE_FLAG_HARDIRQ = 0x08,
++ TRACE_FLAG_SOFTIRQ = 0x10,
++ TRACE_FLAG_PREEMPT_RESCHED = 0x20,
++ TRACE_FLAG_NMI = 0x40,
++};
++
++#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
++static inline unsigned int tracing_gen_ctx_flags(unsigned long irqflags)
++{
++ unsigned int irq_status = irqs_disabled_flags(irqflags) ?
++ TRACE_FLAG_IRQS_OFF : 0;
++ return tracing_gen_ctx_irq_test(irq_status);
++}
++static inline unsigned int tracing_gen_ctx(void)
++{
++ unsigned long irqflags;
++
++ local_save_flags(irqflags);
++ return tracing_gen_ctx_flags(irqflags);
++}
++#else
++
++static inline unsigned int tracing_gen_ctx_flags(unsigned long irqflags)
++{
++ return tracing_gen_ctx_irq_test(TRACE_FLAG_IRQS_NOSUPPORT);
++}
++static inline unsigned int tracing_gen_ctx(void)
++{
++ return tracing_gen_ctx_irq_test(TRACE_FLAG_IRQS_NOSUPPORT);
++}
++#endif
++
++static inline unsigned int tracing_gen_ctx_dec(void)
++{
++ unsigned int trace_ctx;
++
++ trace_ctx = tracing_gen_ctx();
++ /*
++ * Subtract one from the preeption counter if preemption is enabled,
++ * see trace_event_buffer_reserve()for details.
++ */
++ if (IS_ENABLED(CONFIG_PREEMPTION))
++ trace_ctx--;
++ return trace_ctx;
++}
+
+ struct trace_event_file;
+
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 376eb8a1c913..733ef9230c73 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -2575,20 +2575,13 @@ enum print_line_t trace_handle_return(struct trace_seq *s)
+ }
+ EXPORT_SYMBOL_GPL(trace_handle_return);
+
+-unsigned int tracing_gen_ctx_flags(unsigned long irqflags)
++unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status)
+ {
+- unsigned int trace_flags = 0;
++ unsigned int trace_flags = irqs_status;
+ unsigned int pc;
+
+ pc = preempt_count();
+
+-#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
+- if (irqs_disabled_flags(irqflags))
+- trace_flags |= TRACE_FLAG_IRQS_OFF;
+-#else
+- trace_flags |= TRACE_FLAG_IRQS_NOSUPPORT;
+-#endif
+-
+ if (pc & NMI_MASK)
+ trace_flags |= TRACE_FLAG_NMI;
+ if (pc & HARDIRQ_MASK)
+@@ -2604,33 +2597,6 @@ unsigned int tracing_gen_ctx_flags(unsigned long irqflags)
+ return (trace_flags << 16) | (pc & 0xff);
+ }
+
+-unsigned int tracing_gen_ctx(void)
+-{
+- unsigned long irqflags;
+-
+-#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
+- local_save_flags(irqflags);
+-#else
+- irqflags = 0;
+-#endif
+- return tracing_gen_ctx_flags(irqflags);
+-}
+-
+-unsigned int tracing_gen_ctx_dec(void)
+-{
+- unsigned int trace_ctx;
+-
+- trace_ctx = tracing_gen_ctx();
+-
+- /*
+- * Subtract one from the preeption counter if preemption is enabled,
+- * see trace_event_buffer_reserve()for details.
+- */
+- if (IS_ENABLED(CONFIG_PREEMPTION))
+- trace_ctx--;
+- return trace_ctx;
+-}
+-
+ struct ring_buffer_event *
+ trace_buffer_lock_reserve(struct trace_buffer *buffer,
+ int type,
+diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
+index 27ed42bccd7f..40e5ee987578 100644
+--- a/kernel/trace/trace.h
++++ b/kernel/trace/trace.h
+@@ -136,25 +136,6 @@ struct kretprobe_trace_entry_head {
+ unsigned long ret_ip;
+ };
+
+-/*
+- * trace_flag_type is an enumeration that holds different
+- * states when a trace occurs. These are:
+- * IRQS_OFF - interrupts were disabled
+- * IRQS_NOSUPPORT - arch does not support irqs_disabled_flags
+- * NEED_RESCHED - reschedule is requested
+- * HARDIRQ - inside an interrupt handler
+- * SOFTIRQ - inside a softirq handler
+- */
+-enum trace_flag_type {
+- TRACE_FLAG_IRQS_OFF = 0x01,
+- TRACE_FLAG_IRQS_NOSUPPORT = 0x02,
+- TRACE_FLAG_NEED_RESCHED = 0x04,
+- TRACE_FLAG_HARDIRQ = 0x08,
+- TRACE_FLAG_SOFTIRQ = 0x10,
+- TRACE_FLAG_PREEMPT_RESCHED = 0x20,
+- TRACE_FLAG_NMI = 0x40,
+-};
+-
+ #define TRACE_BUF_SIZE 1024
+
+ struct trace_array;
+--
+2.43.0
+