Loading arch/arm/Kconfig +2 −113 Original line number Diff line number Diff line Loading @@ -965,18 +965,7 @@ config LOCAL_TIMERS accounting to be spread across the timer interval, preventing a "thundering herd" at every timer tick. config PREEMPT bool "Preemptible Kernel (EXPERIMENTAL)" depends on EXPERIMENTAL help This option reduces the latency of the kernel when reacting to real-time or interactive events by allowing a low priority process to be preempted even if it is in kernel mode executing a system call. This allows applications to run more reliably even when the system is under load. Say Y here if you are building a kernel for a desktop, embedded or real-time system. Say N if you are unsure. source kernel/Kconfig.preempt config HZ int Loading Loading @@ -1395,107 +1384,7 @@ endmenu source "net/Kconfig" menu "Device Drivers" source "drivers/base/Kconfig" source "drivers/connector/Kconfig" if ALIGNMENT_TRAP || !CPU_CP15_MMU source "drivers/mtd/Kconfig" endif source "drivers/parport/Kconfig" source "drivers/pnp/Kconfig" source "drivers/block/Kconfig" # misc before ide - BLK_DEV_SGIIOC4 depends on SGI_IOC4 source "drivers/misc/Kconfig" source "drivers/ide/Kconfig" source "drivers/scsi/Kconfig" source "drivers/ata/Kconfig" source "drivers/md/Kconfig" source "drivers/message/fusion/Kconfig" source "drivers/ieee1394/Kconfig" source "drivers/message/i2o/Kconfig" source "drivers/net/Kconfig" source "drivers/isdn/Kconfig" # input before char - char/joystick depends on it. As does USB. source "drivers/input/Kconfig" source "drivers/char/Kconfig" source "drivers/i2c/Kconfig" source "drivers/spi/Kconfig" source "drivers/gpio/Kconfig" source "drivers/w1/Kconfig" source "drivers/power/Kconfig" source "drivers/hwmon/Kconfig" source "drivers/thermal/Kconfig" source "drivers/watchdog/Kconfig" source "drivers/ssb/Kconfig" #source "drivers/l3/Kconfig" source "drivers/mfd/Kconfig" source "drivers/media/Kconfig" source "drivers/video/Kconfig" source "sound/Kconfig" source "drivers/hid/Kconfig" source "drivers/usb/Kconfig" source "drivers/uwb/Kconfig" source "drivers/mmc/Kconfig" source "drivers/memstick/Kconfig" source "drivers/accessibility/Kconfig" source "drivers/leds/Kconfig" source "drivers/rtc/Kconfig" source "drivers/dma/Kconfig" source "drivers/dca/Kconfig" source "drivers/auxdisplay/Kconfig" source "drivers/regulator/Kconfig" source "drivers/uio/Kconfig" source "drivers/staging/Kconfig" endmenu source "drivers/Kconfig" source "fs/Kconfig" Loading arch/arm/include/asm/assembler.h +44 −5 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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"; \ Loading arch/arm/include/asm/ftrace.h +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #ifndef __ASSEMBLY__ extern void mcount(void); extern void __gnu_mcount_nc(void); #endif #endif Loading arch/arm/kernel/armksyms.c +1 −0 Original line number Diff line number Diff line Loading @@ -186,4 +186,5 @@ EXPORT_SYMBOL(_find_next_bit_be); #ifdef CONFIG_FUNCTION_TRACER EXPORT_SYMBOL(mcount); EXPORT_SYMBOL(__gnu_mcount_nc); #endif arch/arm/kernel/entry-armv.S +4 −6 Original line number Diff line number Diff line Loading @@ -161,6 +161,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 Loading Loading @@ -215,9 +217,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 Loading Loading @@ -391,6 +390,8 @@ ENDPROC(__pabt_svc) @ Clear FP to mark the first stack frame @ zero_fp asm_trace_hardirqs_off .endm .macro kuser_cmpxchg_check Loading Loading @@ -445,9 +446,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 Loading Loading
arch/arm/Kconfig +2 −113 Original line number Diff line number Diff line Loading @@ -965,18 +965,7 @@ config LOCAL_TIMERS accounting to be spread across the timer interval, preventing a "thundering herd" at every timer tick. config PREEMPT bool "Preemptible Kernel (EXPERIMENTAL)" depends on EXPERIMENTAL help This option reduces the latency of the kernel when reacting to real-time or interactive events by allowing a low priority process to be preempted even if it is in kernel mode executing a system call. This allows applications to run more reliably even when the system is under load. Say Y here if you are building a kernel for a desktop, embedded or real-time system. Say N if you are unsure. source kernel/Kconfig.preempt config HZ int Loading Loading @@ -1395,107 +1384,7 @@ endmenu source "net/Kconfig" menu "Device Drivers" source "drivers/base/Kconfig" source "drivers/connector/Kconfig" if ALIGNMENT_TRAP || !CPU_CP15_MMU source "drivers/mtd/Kconfig" endif source "drivers/parport/Kconfig" source "drivers/pnp/Kconfig" source "drivers/block/Kconfig" # misc before ide - BLK_DEV_SGIIOC4 depends on SGI_IOC4 source "drivers/misc/Kconfig" source "drivers/ide/Kconfig" source "drivers/scsi/Kconfig" source "drivers/ata/Kconfig" source "drivers/md/Kconfig" source "drivers/message/fusion/Kconfig" source "drivers/ieee1394/Kconfig" source "drivers/message/i2o/Kconfig" source "drivers/net/Kconfig" source "drivers/isdn/Kconfig" # input before char - char/joystick depends on it. As does USB. source "drivers/input/Kconfig" source "drivers/char/Kconfig" source "drivers/i2c/Kconfig" source "drivers/spi/Kconfig" source "drivers/gpio/Kconfig" source "drivers/w1/Kconfig" source "drivers/power/Kconfig" source "drivers/hwmon/Kconfig" source "drivers/thermal/Kconfig" source "drivers/watchdog/Kconfig" source "drivers/ssb/Kconfig" #source "drivers/l3/Kconfig" source "drivers/mfd/Kconfig" source "drivers/media/Kconfig" source "drivers/video/Kconfig" source "sound/Kconfig" source "drivers/hid/Kconfig" source "drivers/usb/Kconfig" source "drivers/uwb/Kconfig" source "drivers/mmc/Kconfig" source "drivers/memstick/Kconfig" source "drivers/accessibility/Kconfig" source "drivers/leds/Kconfig" source "drivers/rtc/Kconfig" source "drivers/dma/Kconfig" source "drivers/dca/Kconfig" source "drivers/auxdisplay/Kconfig" source "drivers/regulator/Kconfig" source "drivers/uio/Kconfig" source "drivers/staging/Kconfig" endmenu source "drivers/Kconfig" source "fs/Kconfig" Loading
arch/arm/include/asm/assembler.h +44 −5 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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"; \ Loading
arch/arm/include/asm/ftrace.h +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #ifndef __ASSEMBLY__ extern void mcount(void); extern void __gnu_mcount_nc(void); #endif #endif Loading
arch/arm/kernel/armksyms.c +1 −0 Original line number Diff line number Diff line Loading @@ -186,4 +186,5 @@ EXPORT_SYMBOL(_find_next_bit_be); #ifdef CONFIG_FUNCTION_TRACER EXPORT_SYMBOL(mcount); EXPORT_SYMBOL(__gnu_mcount_nc); #endif
arch/arm/kernel/entry-armv.S +4 −6 Original line number Diff line number Diff line Loading @@ -161,6 +161,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 Loading Loading @@ -215,9 +217,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 Loading Loading @@ -391,6 +390,8 @@ ENDPROC(__pabt_svc) @ Clear FP to mark the first stack frame @ zero_fp asm_trace_hardirqs_off .endm .macro kuser_cmpxchg_check Loading Loading @@ -445,9 +446,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 Loading