Commit 0c02006e authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Steven Rostedt (VMware)

tracing: Inline tracing_gen_ctx_flags()

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.deSuggested-by: default avatarSteven Rostedt <rostedt@goodmis.org>
Link: https://lkml.kernel.org/r/20210125140323.6b1ff20c@gandalf.local.homeSigned-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 36590c50
...@@ -160,9 +160,57 @@ static inline void tracing_generic_entry_update(struct trace_entry *entry, ...@@ -160,9 +160,57 @@ static inline void tracing_generic_entry_update(struct trace_entry *entry,
entry->flags = trace_ctx >> 16; entry->flags = trace_ctx >> 16;
} }
unsigned int tracing_gen_ctx_flags(unsigned long irqflags); unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status);
unsigned int tracing_gen_ctx(void);
unsigned int tracing_gen_ctx_dec(void); 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; struct trace_event_file;
......
...@@ -2579,20 +2579,13 @@ enum print_line_t trace_handle_return(struct trace_seq *s) ...@@ -2579,20 +2579,13 @@ enum print_line_t trace_handle_return(struct trace_seq *s)
} }
EXPORT_SYMBOL_GPL(trace_handle_return); 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; unsigned int pc;
pc = preempt_count(); 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) if (pc & NMI_MASK)
trace_flags |= TRACE_FLAG_NMI; trace_flags |= TRACE_FLAG_NMI;
if (pc & HARDIRQ_MASK) if (pc & HARDIRQ_MASK)
...@@ -2608,33 +2601,6 @@ unsigned int tracing_gen_ctx_flags(unsigned long irqflags) ...@@ -2608,33 +2601,6 @@ unsigned int tracing_gen_ctx_flags(unsigned long irqflags)
return (trace_flags << 16) | (pc & 0xff); 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 * struct ring_buffer_event *
trace_buffer_lock_reserve(struct trace_buffer *buffer, trace_buffer_lock_reserve(struct trace_buffer *buffer,
int type, int type,
......
...@@ -136,25 +136,6 @@ struct kretprobe_trace_entry_head { ...@@ -136,25 +136,6 @@ struct kretprobe_trace_entry_head {
unsigned long ret_ip; 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 #define TRACE_BUF_SIZE 1024
struct trace_array; struct trace_array;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment