mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 19:43:40 +02:00
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.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>
This commit is contained in:
parent
36590c50b2
commit
0c02006e6f
|
|
@ -160,9 +160,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;
|
||||
|
||||
|
|
|
|||
|
|
@ -2579,20 +2579,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)
|
||||
|
|
@ -2608,33 +2601,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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user