mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
ARM: entry: efficiency cleanups
Make the "fast" syscall return path fast again. The addition of IRQ tracing and context tracking has made this path grossly inefficient. We can do much better if these options are enabled if we save the syscall return code on the stack - we then don't need to save a bunch of registers around every single callout to C code. Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@@ -108,29 +108,37 @@
|
||||
.endm
|
||||
#endif
|
||||
|
||||
.macro asm_trace_hardirqs_off
|
||||
.macro asm_trace_hardirqs_off, save=1
|
||||
#if defined(CONFIG_TRACE_IRQFLAGS)
|
||||
.if \save
|
||||
stmdb sp!, {r0-r3, ip, lr}
|
||||
.endif
|
||||
bl trace_hardirqs_off
|
||||
.if \save
|
||||
ldmia sp!, {r0-r3, ip, lr}
|
||||
.endif
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro asm_trace_hardirqs_on, cond=al
|
||||
.macro asm_trace_hardirqs_on, cond=al, save=1
|
||||
#if defined(CONFIG_TRACE_IRQFLAGS)
|
||||
/*
|
||||
* actually the registers should be pushed and pop'd conditionally, but
|
||||
* after bl the flags are certainly clobbered
|
||||
*/
|
||||
.if \save
|
||||
stmdb sp!, {r0-r3, ip, lr}
|
||||
.endif
|
||||
bl\cond trace_hardirqs_on
|
||||
.if \save
|
||||
ldmia sp!, {r0-r3, ip, lr}
|
||||
.endif
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro disable_irq
|
||||
.macro disable_irq, save=1
|
||||
disable_irq_notrace
|
||||
asm_trace_hardirqs_off
|
||||
asm_trace_hardirqs_off \save
|
||||
.endm
|
||||
|
||||
.macro enable_irq
|
||||
|
||||
Reference in New Issue
Block a user