Home Home > GIT Browse
summaryrefslogtreecommitdiff
authorThomas Gleixner <tglx@linutronix.de>2010-04-02 08:51:09 (GMT)
committer Thomas Gleixner <tglx@linutronix.de>2010-04-02 09:15:06 (GMT)
commit35b5256e0c4f29f334cc85aaf501ecbc8159c51f (patch) (unidiff)
treece0264b81e64ba0d24ff521aedd0b79d31943fd2
parent6e331ac4aa62c2d8a27898b9bf8976f0554b9e52 (diff)
x86: Fix irq off tracing for 32 bit
John reported a irq off tracing splat with the following debug info: irq event stamp: 5988 hardirqs last enabled at (5987): [<c13e4696>] _raw_spin_unlock_irqrestore+0x49/0x8f hardirqs last disabled at (5988): [<c13e4ce3>] call_function_interrupt+0x2f/0x3c softirqs last enabled at (0): [<c10470a6>] copy_process+0x3b6/0x15ad softirqs last disabled at (0): [<(null)>] (null) 8139too Fast Ethernet driver 0.9.28 irq event stamp: 10638 hardirqs last enabled at (10637): [<c13e4696>] _raw_spin_unlock_irqrestore+0x49/0x8f hardirqs last disabled at (10638): [<c13e4feb>] apic_timer_interrupt+0x2f/0x3c softirqs last enabled at (0): [<c10470a6>] copy_process+0x3b6/0x15ad softirqs last disabled at (0): [<(null)>] (null) irq event stamp: 2914 hardirqs last enabled at (2913): [<c13e4696>] _raw_spin_unlock_irqrestore+0x49/0x8f hardirqs last disabled at (2914): [<c13e4feb>] apic_timer_interrupt+0x2f/0x3c softirqs last enabled at (0): [<c10470a6>] copy_process+0x3b6/0x15ad softirqs last disabled at (0): [<(null)>] (null) There is a TRACE_IRQ_IRET annotation missing in the preempt code path. Reported-by: John Kacur <jkacur@redhat.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--arch/x86/kernel/entry_32.S9
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 57d3849..3dc8593 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -375,15 +375,18 @@ END(ret_from_exception)
375ENTRY(resume_kernel) 375ENTRY(resume_kernel)
376 DISABLE_INTERRUPTS(CLBR_ANY) 376 DISABLE_INTERRUPTS(CLBR_ANY)
377 cmpl $0,TI_preempt_count(%ebp)# non-zero preempt_count ? 377 cmpl $0,TI_preempt_count(%ebp)# non-zero preempt_count ?
378 jnz restore_nocheck 378 jnz restore_nocheck_trace
379need_resched: 379need_resched:
380 movl TI_flags(%ebp), %ecx# need_resched set ? 380 movl TI_flags(%ebp), %ecx# need_resched set ?
381 testb $_TIF_NEED_RESCHED, %cl 381 testb $_TIF_NEED_RESCHED, %cl
382 jz restore_nocheck 382 jz restore_nocheck_trace
383 testl $X86_EFLAGS_IF,PT_EFLAGS(%esp)# interrupts off (exception path) ? 383 testl $X86_EFLAGS_IF,PT_EFLAGS(%esp)# interrupts off (exception path) ?
384 jz restore_nocheck 384 jz restore_nocheck_trace
385 call preempt_schedule_irq 385 call preempt_schedule_irq
386 jmp need_resched 386 jmp need_resched
387restore_nocheck_trace:
388 TRACE_IRQS_IRET
389 jmp restore_nocheck
387END(resume_kernel) 390END(resume_kernel)
388#endif 391#endif
389 CFI_ENDPROC 392 CFI_ENDPROC