Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 160905
b: refs/heads/master
c: 0d928b0
h: refs/heads/master
i:
  160903: 7adad5f
v: v3
  • Loading branch information
Uwe Kleine-König committed Aug 13, 2009
1 parent 830f70d commit 7fd5822
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 181f817eaaca4c1f8a9c265d339d2b96de8b245d
refs/heads/master: 0d928b0b616d1c5c5fe76019a87cba171ca91633
49 changes: 44 additions & 5 deletions trunk/arch/arm/include/asm/assembler.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,23 +74,56 @@
* Enable and disable interrupts
*/
#if __LINUX_ARM_ARCH__ >= 6
.macro disable_irq
.macro disable_irq_notrace
cpsid i
.endm

.macro enable_irq
.macro enable_irq_notrace
cpsie i
.endm
#else
.macro disable_irq
.macro disable_irq_notrace
msr cpsr_c, #PSR_I_BIT | SVC_MODE
.endm

.macro enable_irq
.macro enable_irq_notrace
msr cpsr_c, #SVC_MODE
.endm
#endif

.macro asm_trace_hardirqs_off
#if defined(CONFIG_TRACE_IRQFLAGS)
stmdb sp!, {r0-r3, ip, lr}
bl trace_hardirqs_off
ldmia sp!, {r0-r3, ip, lr}
#endif
.endm

.macro asm_trace_hardirqs_on_cond, cond
#if defined(CONFIG_TRACE_IRQFLAGS)
/*
* actually the registers should be pushed and pop'd conditionally, but
* after bl the flags are certainly clobbered
*/
stmdb sp!, {r0-r3, ip, lr}
bl\cond trace_hardirqs_on
ldmia sp!, {r0-r3, ip, lr}
#endif
.endm

.macro asm_trace_hardirqs_on
asm_trace_hardirqs_on_cond al
.endm

.macro disable_irq
disable_irq_notrace
asm_trace_hardirqs_off
.endm

.macro enable_irq
asm_trace_hardirqs_on
enable_irq_notrace
.endm
/*
* Save the current IRQ state and disable IRQs. Note that this macro
* assumes FIQs are enabled, and that the processor is in SVC mode.
Expand All @@ -104,10 +137,16 @@
* Restore interrupt state previously stored in a register. We don't
* guarantee that this will preserve the flags.
*/
.macro restore_irqs, oldcpsr
.macro restore_irqs_notrace, oldcpsr
msr cpsr_c, \oldcpsr
.endm

.macro restore_irqs, oldcpsr
tst \oldcpsr, #PSR_I_BIT
asm_trace_hardirqs_on_cond eq
restore_irqs_notrace \oldcpsr
.endm

#define USER(x...) \
9999: x; \
.section __ex_table,"a"; \
Expand Down
10 changes: 4 additions & 6 deletions trunk/arch/arm/kernel/entry-armv.S
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ ENDPROC(__und_invalid)
@ r4 - orig_r0 (see pt_regs definition in ptrace.h)
@
stmia r5, {r0 - r4}

asm_trace_hardirqs_off
.endm

.align 5
Expand Down Expand Up @@ -206,9 +208,6 @@ ENDPROC(__dabt_svc)
__irq_svc:
svc_entry

#ifdef CONFIG_TRACE_IRQFLAGS
bl trace_hardirqs_off
#endif
#ifdef CONFIG_PREEMPT
get_thread_info tsk
ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
Expand Down Expand Up @@ -383,6 +382,8 @@ ENDPROC(__pabt_svc)
@ Clear FP to mark the first stack frame
@
zero_fp

asm_trace_hardirqs_off
.endm

.macro kuser_cmpxchg_check
Expand Down Expand Up @@ -437,9 +438,6 @@ __irq_usr:
usr_entry
kuser_cmpxchg_check

#ifdef CONFIG_TRACE_IRQFLAGS
bl trace_hardirqs_off
#endif
get_thread_info tsk
#ifdef CONFIG_PREEMPT
ldr r8, [tsk, #TI_PREEMPT] @ get preempt count
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/arm/lib/bitops.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@
tst r2, r0, lsl r3
\instr r2, r2, r0, lsl r3
\store r2, [r1]
restore_irqs ip
moveq r0, #0
restore_irqs ip
mov pc, lr
.endm
#endif

0 comments on commit 7fd5822

Please sign in to comment.