kernel_optimize_test/arch/x86/kernel
Steven Rostedt 8a4d0a687a ftrace: Use breakpoint method to update ftrace caller
On boot up and module load, it is fine to modify the code directly,
without the use of breakpoints. This is because boot up modification
is done before SMP is initialized, thus the modification is serial,
and module load is done before the module executes.

But after that we must use a SMP safe method to modify running code.
Otherwise, if we are running the function tracer and update its
function (by starting off the stack tracer, or perf tracing)
the change of the function called by the ftrace trampoline is done
directly. If this is being executed on another CPU, that CPU may
take a GPF and crash the kernel.

The breakpoint method is used to change the nops at all the functions, but
the change of the ftrace callback handler itself was still using a
direct modification. If tracing was enabled and the function callback
was changed then another CPU could fault if it was currently calling
the original callback. This modification must use the breakpoint method
too.

Note, the direct method is still used for boot up and module load.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2012-05-31 23:12:19 -04:00
..
acpi Merge branch 'delete-mca' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2012-05-23 17:12:06 -07:00
apic Merge branch 'delete-mca' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2012-05-23 17:12:06 -07:00
cpu Merge branches 'perf-urgent-for-linus' and 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 12:12:49 -07:00
.gitignore
alternative.c
amd_gart_64.c X86 & IA64: adapt for dma_map_ops changes 2012-03-28 16:36:31 +02:00
amd_nb.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
apb_timer.c
aperture_64.c
apm_32.c x86: Use kick_all_cpus_sync() 2012-05-08 12:35:06 +02:00
asm-offsets_32.c
asm-offsets_64.c x32: If configured, add x32 system calls to system call tables 2012-02-20 12:52:06 -08:00
asm-offsets.c
audit_64.c
bootflag.c
check.c x86: kernel/check.c simple_strtoul cleanup 2012-05-15 15:36:41 -07:00
cpuid.c Disintegrate asm/system.h for X86 2012-03-28 18:11:12 +01:00
crash_dump_32.c x86: remove the second argument of k[un]map_atomic() 2012-03-20 21:48:15 +08:00
crash_dump_64.c
crash.c
devicetree.c irq_domain/x86: Convert x86 (embedded) to use common irq_domain 2012-02-23 14:37:47 -07:00
doublefault_32.c
dumpstack_32.c x86: Avoid double stack traces with show_regs() 2012-05-09 11:44:42 +02:00
dumpstack_64.c x86: Avoid double stack traces with show_regs() 2012-05-09 11:44:42 +02:00
dumpstack.c Merge branches 'x86-asm-for-linus', 'x86-cleanups-for-linus', 'x86-cpu-for-linus', 'x86-debug-for-linus' and 'x86-microcode-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 10:09:50 -07:00
e820.c Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2012-01-18 15:51:48 -08:00
early_printk.c Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-01-11 19:13:40 -08:00
early-quirks.c
entry_32.S x86, extable: Remove open-coded exception table entries in arch/x86/kernel/entry_32.S 2012-04-20 13:51:38 -07:00
entry_64.S x86, extable: Remove open-coded exception table entries in arch/x86/kernel/entry_64.S 2012-04-20 13:51:38 -07:00
ftrace.c ftrace: Use breakpoint method to update ftrace caller 2012-05-31 23:12:19 -04:00
head32.c
head64.c
head_32.S x86-32: Handle exception table entries during early boot 2012-04-19 16:45:02 -07:00
head_64.S x86-64: Handle exception table entries during early boot 2012-04-19 15:42:45 -07:00
head.c
hpet.c Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
hw_breakpoint.c
i386_ksyms_32.c
i387.c x86: replace percpu_xxx funcs with this_cpu_xxx 2012-05-14 14:15:31 -07:00
i8237.c
i8253.c
i8259.c Disintegrate asm/system.h for X86 2012-03-28 18:11:12 +01:00
io_delay.c
ioport.c
irq_32.c x86: Use common threadinfo allocator 2012-05-08 14:08:44 +02:00
irq_64.c
irq_work.c
irq.c x86: Preserve lazy irq disable semantics in fixup_irqs() 2012-03-29 15:28:47 +02:00
irqinit.c Merge branch 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-03-29 18:21:35 -07:00
jump_label.c
kdebugfs.c simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
kgdb.c KGDB/KDB regression fixes 2012-04-04 17:26:08 -07:00
kprobes-common.h x86/kprobes: Split out optprobe related code to kprobes-opt.c 2012-03-06 09:49:49 +01:00
kprobes-opt.c x86/kprobes: Split out optprobe related code to kprobes-opt.c 2012-03-06 09:49:49 +01:00
kprobes.c x86: Avoid double stack traces with show_regs() 2012-05-09 11:44:42 +02:00
kvm.c KVM: Do not take reference to mm during async #PF 2012-05-06 15:00:02 +03:00
kvmclock.c x86: kvmclock: abstract save/restore sched_clock_state 2012-03-20 12:37:45 +02:00
ldt.c Disintegrate asm/system.h for X86 2012-03-28 18:11:12 +01:00
machine_kexec_32.c Disintegrate asm/system.h for X86 2012-03-28 18:11:12 +01:00
machine_kexec_64.c
Makefile Merge branch 'delete-mca' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2012-05-23 17:12:06 -07:00
microcode_amd.c x86, microcode: Ensure that module is only loaded on supported AMD CPUs 2012-04-13 11:51:05 +02:00
microcode_core.c x86, microcode: microcode_core.c simple_strtoul cleanup 2012-05-07 11:36:49 -07:00
microcode_intel.c x86/microcode: Ensure that module is only loaded on supported Intel CPUs 2012-05-07 14:37:14 +02:00
mmconf-fam10h_64.c
module.c Disintegrate asm/system.h for X86 2012-03-28 18:11:12 +01:00
mpparse.c MCA: delete all remaining traces of microchannel bus support. 2012-05-17 19:06:13 -04:00
msr.c Disintegrate asm/system.h for X86 2012-03-28 18:11:12 +01:00
nmi_selftest.c Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 10:21:19 -07:00
nmi.c Merge branch 'delete-mca' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2012-05-23 17:12:06 -07:00
paravirt_patch_32.c
paravirt_patch_64.c
paravirt-spinlocks.c
paravirt.c x86: replace percpu_xxx funcs with this_cpu_xxx 2012-05-14 14:15:31 -07:00
pci-calgary_64.c Merge branches 'x86-asm-for-linus', 'x86-cleanups-for-linus', 'x86-cpu-for-linus', 'x86-debug-for-linus' and 'x86-microcode-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 10:09:50 -07:00
pci-dma.c Merge branch 'for-linus' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping 2012-04-04 17:13:43 -07:00
pci-iommu_table.c
pci-nommu.c X86 & IA64: adapt for dma_map_ops changes 2012-03-28 16:36:31 +02:00
pci-swiotlb.c X86 & IA64: adapt for dma_map_ops changes 2012-03-28 16:36:31 +02:00
pcspeaker.c
probe_roms.c x86: Include probe_roms.h in probe_roms.c 2012-03-08 10:57:35 +01:00
process_32.c Merge branch 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 10:59:07 -07:00
process_64.c Merge branch 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 10:59:07 -07:00
process.c Merge branch 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 10:59:07 -07:00
ptrace.c x86: Enable HAVE_ARCH_SECCOMP_FILTER 2012-04-14 11:13:21 +10:00
pvclock.c
quirks.c
reboot_32.S
reboot_fixups_32.c
reboot.c x86/reboot: Clean up coding style 2012-02-07 11:34:12 +01:00
relocate_kernel_32.S
relocate_kernel_64.S
resource.c
rtc.c
setup_percpu.c percpu, x86: don't use PMD_SIZE as embedded atom_size on 32bit 2012-05-08 09:42:18 -07:00
setup.c Merge branch 'delete-mca' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2012-05-23 17:12:06 -07:00
signal.c new helper: sigsuspend() 2012-05-21 23:52:30 -04:00
smp.c x86/reboot: Update nonmi_ipi parameter 2012-05-14 11:49:38 +02:00
smpboot.c Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-22 18:27:32 -07:00
stacktrace.c
step.c
sys_i386_32.c
sys_x86_64.c Merge branch 'x86-x32-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-03-29 18:12:23 -07:00
syscall_32.c
syscall_64.c x32: If configured, add x32 system calls to system call tables 2012-02-20 12:52:06 -08:00
tboot.c tboot: Add return values for tboot_sleep 2012-03-13 14:06:55 -04:00
tce_64.c Disintegrate asm/system.h for X86 2012-03-28 18:11:12 +01:00
test_nx.c
test_rodata.c x86, extable: Remove open-coded exception table entries in arch/x86/kernel/test_rodata.c 2012-04-20 13:51:38 -07:00
time.c MCA: delete all remaining traces of microchannel bus support. 2012-05-17 19:06:13 -04:00
tls.c Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-03-29 14:28:26 -07:00
tls.h
topology.c
trampoline_32.S
trampoline_64.S
trampoline.c
traps.c ftrace: Synchronize variable setting with breakpoints 2012-05-31 23:12:17 -04:00
tsc_sync.c x86/tsc: Reduce the TSC sync check time for core-siblings 2012-02-22 11:49:40 +01:00
tsc.c Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-03-29 14:16:48 -07:00
verify_cpu.S
vm86_32.c Merge branch 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-03-29 18:21:35 -07:00
vmlinux.lds.S
vsmp_64.c x86/vsmp: Fix number of CPUs when vsmp is disabled 2012-05-14 14:42:33 +02:00
vsyscall_64.c x86: vsyscall: Use NULL instead 0 for a pointer argument 2012-04-06 11:49:59 +02:00
vsyscall_emu_64.S
vsyscall_trace.h
x86_init.c x86/apic: Replace io_apic_ops with x86_io_apic_ops. 2012-05-01 14:50:09 -04:00
x8664_ksyms_64.c
xsave.c x86, xsave: remove thread_has_fpu() bug check in __sanitize_i387_state() 2012-05-16 15:17:17 -07:00