|
@@ -45,7 +45,7 @@
|
|
|
*/
|
|
|
|
|
|
#if defined(CONFIG_PREEMPT)
|
|
|
-# define preempt_stop() cli
|
|
|
+# define preempt_stop() cli ; TRACE_IRQS_OFF
|
|
|
#else
|
|
|
# define preempt_stop()
|
|
|
# define resume_kernel __restore_all
|
|
@@ -55,11 +55,7 @@
|
|
|
.align 2
|
|
|
ENTRY(exception_error)
|
|
|
!
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- mov.l 2f, r0
|
|
|
- jsr @r0
|
|
|
- nop
|
|
|
-#endif
|
|
|
+ TRACE_IRQS_ON
|
|
|
sti
|
|
|
mov.l 1f, r0
|
|
|
jmp @r0
|
|
@@ -67,22 +63,23 @@ ENTRY(exception_error)
|
|
|
|
|
|
.align 2
|
|
|
1: .long do_exception_error
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
-2: .long trace_hardirqs_on
|
|
|
-#endif
|
|
|
|
|
|
.align 2
|
|
|
ret_from_exception:
|
|
|
preempt_stop()
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- mov.l 4f, r0
|
|
|
- jsr @r0
|
|
|
- nop
|
|
|
-#endif
|
|
|
ENTRY(ret_from_irq)
|
|
|
!
|
|
|
mov #OFF_SR, r0
|
|
|
mov.l @(r0,r15), r0 ! get status register
|
|
|
+
|
|
|
+ shlr2 r0
|
|
|
+ and #0x3c, r0
|
|
|
+ cmp/eq #0x3c, r0
|
|
|
+ bt 9f
|
|
|
+ TRACE_IRQS_ON
|
|
|
+9:
|
|
|
+ mov #OFF_SR, r0
|
|
|
+ mov.l @(r0,r15), r0 ! get status register
|
|
|
shll r0
|
|
|
shll r0 ! kernel space?
|
|
|
get_current_thread_info r8, r0
|
|
@@ -125,11 +122,7 @@ noresched:
|
|
|
ENTRY(resume_userspace)
|
|
|
! r8: current_thread_info
|
|
|
cli
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- mov.l 5f, r0
|
|
|
- jsr @r0
|
|
|
- nop
|
|
|
-#endif
|
|
|
+ TRACE_IRQS_OfF
|
|
|
mov.l @(TI_FLAGS,r8), r0 ! current_thread_info->flags
|
|
|
tst #(_TIF_WORK_MASK & 0xff), r0
|
|
|
bt/s __restore_all
|
|
@@ -156,11 +149,7 @@ work_resched:
|
|
|
jsr @r1 ! schedule
|
|
|
nop
|
|
|
cli
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- mov.l 5f, r0
|
|
|
- jsr @r0
|
|
|
- nop
|
|
|
-#endif
|
|
|
+ TRACE_IRQS_OFF
|
|
|
!
|
|
|
mov.l @(TI_FLAGS,r8), r0 ! current_thread_info->flags
|
|
|
tst #(_TIF_WORK_MASK & 0xff), r0
|
|
@@ -172,10 +161,6 @@ work_resched:
|
|
|
1: .long schedule
|
|
|
2: .long do_notify_resume
|
|
|
3: .long resume_userspace
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
-4: .long trace_hardirqs_on
|
|
|
-5: .long trace_hardirqs_off
|
|
|
-#endif
|
|
|
|
|
|
.align 2
|
|
|
syscall_exit_work:
|
|
@@ -184,11 +169,7 @@ syscall_exit_work:
|
|
|
tst #(_TIF_WORK_SYSCALL_MASK & 0xff), r0
|
|
|
bt/s work_pending
|
|
|
tst #_TIF_NEED_RESCHED, r0
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- mov.l 5f, r0
|
|
|
- jsr @r0
|
|
|
- nop
|
|
|
-#endif
|
|
|
+ TRACE_IRQS_ON
|
|
|
sti
|
|
|
mov r15, r4
|
|
|
mov.l 8f, r0 ! do_syscall_trace_leave
|
|
@@ -321,11 +302,7 @@ ENTRY(system_call)
|
|
|
bt/s debug_trap ! it's a debug trap..
|
|
|
nop
|
|
|
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- mov.l 5f, r10
|
|
|
- jsr @r10
|
|
|
- nop
|
|
|
-#endif
|
|
|
+ TRACE_IRQS_ON
|
|
|
sti
|
|
|
|
|
|
!
|
|
@@ -355,11 +332,7 @@ syscall_call:
|
|
|
!
|
|
|
syscall_exit:
|
|
|
cli
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
- mov.l 6f, r0
|
|
|
- jsr @r0
|
|
|
- nop
|
|
|
-#endif
|
|
|
+ TRACE_IRQS_OFF
|
|
|
!
|
|
|
get_current_thread_info r8, r0
|
|
|
mov.l @(TI_FLAGS,r8), r0 ! current_thread_info->flags
|
|
@@ -377,9 +350,5 @@ syscall_exit:
|
|
|
#endif
|
|
|
2: .long NR_syscalls
|
|
|
3: .long sys_call_table
|
|
|
-#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
-5: .long trace_hardirqs_on
|
|
|
-6: .long trace_hardirqs_off
|
|
|
-#endif
|
|
|
7: .long do_syscall_trace_enter
|
|
|
8: .long do_syscall_trace_leave
|