ftrace: stacktrace fix
Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
5b82a1b08a
commit
74f4e369fc
|
@ -120,4 +120,12 @@ static inline void tracer_disable(void)
|
||||||
# define trace_preempt_off(a0, a1) do { } while (0)
|
# define trace_preempt_off(a0, a1) do { } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_CONTEXT_SWITCH_TRACER
|
||||||
|
extern void
|
||||||
|
ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3);
|
||||||
|
#else
|
||||||
|
static inline void
|
||||||
|
ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { }
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _LINUX_FTRACE_H */
|
#endif /* _LINUX_FTRACE_H */
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/semaphore.h>
|
#include <linux/semaphore.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
#include <linux/ftrace.h>
|
||||||
|
|
||||||
static noinline void __down(struct semaphore *sem);
|
static noinline void __down(struct semaphore *sem);
|
||||||
static noinline int __down_interruptible(struct semaphore *sem);
|
static noinline int __down_interruptible(struct semaphore *sem);
|
||||||
|
@ -53,6 +54,7 @@ void down(struct semaphore *sem)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
ftrace_special(sem->count, 0, __LINE__);
|
||||||
spin_lock_irqsave(&sem->lock, flags);
|
spin_lock_irqsave(&sem->lock, flags);
|
||||||
if (likely(sem->count > 0))
|
if (likely(sem->count > 0))
|
||||||
sem->count--;
|
sem->count--;
|
||||||
|
|
|
@ -901,7 +901,7 @@ tracing_sched_switch_trace(struct trace_array *tr,
|
||||||
entry->ctx.next_pid = next->pid;
|
entry->ctx.next_pid = next->pid;
|
||||||
entry->ctx.next_prio = next->prio;
|
entry->ctx.next_prio = next->prio;
|
||||||
entry->ctx.next_state = next->state;
|
entry->ctx.next_state = next->state;
|
||||||
__trace_stack(tr, data, flags, 4);
|
__trace_stack(tr, data, flags, 5);
|
||||||
__raw_spin_unlock(&data->lock);
|
__raw_spin_unlock(&data->lock);
|
||||||
raw_local_irq_restore(irq_flags);
|
raw_local_irq_restore(irq_flags);
|
||||||
}
|
}
|
||||||
|
@ -927,7 +927,7 @@ tracing_sched_wakeup_trace(struct trace_array *tr,
|
||||||
entry->ctx.next_pid = wakee->pid;
|
entry->ctx.next_pid = wakee->pid;
|
||||||
entry->ctx.next_prio = wakee->prio;
|
entry->ctx.next_prio = wakee->prio;
|
||||||
entry->ctx.next_state = wakee->state;
|
entry->ctx.next_state = wakee->state;
|
||||||
__trace_stack(tr, data, flags, 5);
|
__trace_stack(tr, data, flags, 6);
|
||||||
__raw_spin_unlock(&data->lock);
|
__raw_spin_unlock(&data->lock);
|
||||||
raw_local_irq_restore(irq_flags);
|
raw_local_irq_restore(irq_flags);
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ struct special_entry {
|
||||||
* Stack-trace entry:
|
* Stack-trace entry:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define FTRACE_STACK_ENTRIES 5
|
#define FTRACE_STACK_ENTRIES 8
|
||||||
|
|
||||||
struct stack_entry {
|
struct stack_entry {
|
||||||
unsigned long caller[FTRACE_STACK_ENTRIES];
|
unsigned long caller[FTRACE_STACK_ENTRIES];
|
||||||
|
|
Loading…
Reference in New Issue