linux/arch/x86/include/asm
Namhyung Kim e8e999cf3c x86, dumpstack: Correct stack dump info when frame pointer is available
Current stack dump code scans entire stack and check each entry
contains a pointer to kernel code. If CONFIG_FRAME_POINTER=y it
could mark whether the pointer is valid or not based on value of
the frame pointer. Invalid entries could be preceded by '?' sign.

However this was not going to happen because scan start point
was always higher than the frame pointer so that they could not
meet.

Commit 9c0729dc80 ("x86: Eliminate bp argument from the stack
tracing routines") delayed bp acquisition point, so the bp was
read in lower frame, thus all of the entries were marked
invalid.

This patch fixes this by reverting above commit while retaining
stack_frame() helper as suggested by Frederic Weisbecker.

End result looks like below:

before:

 [    3.508329] Call Trace:
 [    3.508551]  [<ffffffff814f35c9>] ? panic+0x91/0x199
 [    3.508662]  [<ffffffff814f3739>] ? printk+0x68/0x6a
 [    3.508770]  [<ffffffff81a981b2>] ? mount_block_root+0x257/0x26e
 [    3.508876]  [<ffffffff81a9821f>] ? mount_root+0x56/0x5a
 [    3.508975]  [<ffffffff81a98393>] ? prepare_namespace+0x170/0x1a9
 [    3.509216]  [<ffffffff81a9772b>] ? kernel_init+0x1d2/0x1e2
 [    3.509335]  [<ffffffff81003894>] ? kernel_thread_helper+0x4/0x10
 [    3.509442]  [<ffffffff814f6880>] ? restore_args+0x0/0x30
 [    3.509542]  [<ffffffff81a97559>] ? kernel_init+0x0/0x1e2
 [    3.509641]  [<ffffffff81003890>] ? kernel_thread_helper+0x0/0x10

after:

 [    3.522991] Call Trace:
 [    3.523351]  [<ffffffff814f35b9>] panic+0x91/0x199
 [    3.523468]  [<ffffffff814f3729>] ? printk+0x68/0x6a
 [    3.523576]  [<ffffffff81a981b2>] mount_block_root+0x257/0x26e
 [    3.523681]  [<ffffffff81a9821f>] mount_root+0x56/0x5a
 [    3.523780]  [<ffffffff81a98393>] prepare_namespace+0x170/0x1a9
 [    3.523885]  [<ffffffff81a9772b>] kernel_init+0x1d2/0x1e2
 [    3.523987]  [<ffffffff81003894>] kernel_thread_helper+0x4/0x10
 [    3.524228]  [<ffffffff814f6880>] ? restore_args+0x0/0x30
 [    3.524345]  [<ffffffff81a97559>] ? kernel_init+0x0/0x1e2
 [    3.524445]  [<ffffffff81003890>] ? kernel_thread_helper+0x0/0x10

 -v5:
   * fix build breakage with oprofile

 -v4:
   * use 0 instead of regs->bp
   * separate out printk changes

 -v3:
   * apply comment from Frederic
   * add a couple of printk fixes

Signed-off-by: Namhyung Kim <namhyung@gmail.com>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Soren Sandmann <ssp@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Robert Richter <robert.richter@amd.com>
LKML-Reference: <1300416006-3163-1-git-send-email-namhyung@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2011-03-18 10:51:42 +01:00
..
uv x86, UV: Initialize the broadcast assist unit base destination node id properly 2011-03-09 16:36:16 +01:00
visws
xen x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
a.out-core.h
a.out.h
acpi.h Merge commit 'v2.6.38' into x86/mm 2011-03-15 08:29:44 +01:00
aes.h
agp.h
alternative-asm.h
alternative.h Merge branches 'x86-alternatives-for-linus', 'x86-fpu-for-linus', 'x86-hwmon-for-linus', 'x86-paravirt-for-linus', 'core-locking-for-linus' and 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-01-06 11:11:50 -08:00
amd_iommu_proto.h x86/amd-iommu: Update copyright headers 2010-10-13 11:13:21 +02:00
amd_iommu_types.h x86/amd-iommu: Update copyright headers 2010-10-13 11:13:21 +02:00
amd_iommu.h Merge branch 'x86-iommu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-10-21 14:23:48 -07:00
amd_nb.h Merge branch 'linus' into x86/urgent 2011-03-18 10:39:00 +01:00
apb_timer.h x86, cleanup: Remove obsolete boot_cpu_id variable 2010-08-12 14:01:38 -07:00
apic.h Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-15 20:01:36 -07:00
apicdef.h x86: Move ioapic_irq_destination_types to apicdef.h 2011-02-23 11:38:44 +01:00
apm.h
arch_hweight.h
asm-offsets.h
asm.h
atomic64_32.h
atomic64_64.h
atomic.h
auxvec.h
bios_ebda.h
bitops.h bitops: make asm-generic/bitops/find.h more generic 2010-10-09 21:51:44 +02:00
bitsperlong.h
boot.h x86: support XZ-compressed kernel 2011-01-13 08:03:25 -08:00
bootparam.h x86: Add device tree support 2011-02-23 22:27:52 +01:00
bug.h
bugs.h
byteorder.h
cache.h
cacheflush.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
calgary.h x86, iommu: Make all IOMMU's detection routines return a value. 2010-08-26 15:13:13 -07:00
calling.h x86, asm: Fix CFI macro invocations to deal with shortcomings in gas 2010-10-19 14:28:02 -07:00
ce4100.h x86: ce4100: Set pci ops via callback instead of module init 2011-03-14 15:13:23 +01:00
checksum_32.h
checksum_64.h
checksum.h
cmpxchg_32.h x86, asm: Merge cmpxchg_486_u64() and cmpxchg8b_emu() 2010-07-28 17:05:11 -07:00
cmpxchg_64.h x86, asm: Clean up and simplify <asm/cmpxchg.h> 2010-07-28 15:24:09 -07:00
cmpxchg.h
compat.h compat: Make compat_alloc_user_space() incorporate the access_ok() 2010-09-14 16:08:45 -07:00
cpu.h x86: Fix mwait_usable section mismatch 2011-02-14 12:08:28 +01:00
cpufeature.h perf, x86: Add support for AMD family 15h core counters 2011-02-16 13:30:53 +01:00
cpumask.h
cputime.h
current.h
debugreg.h x86: Use this_cpu_ops to optimize code 2010-12-30 12:20:28 +01:00
delay.h
desc_defs.h
desc.h
device.h
div64.h
dma-mapping.h dma-mapping: remove dma_is_consistent API 2010-08-11 08:59:21 -07:00
dma.h
dmi.h
dwarf2.h x86: Use {push,pop}{l,q}_cfi in more places 2010-09-03 08:14:11 +02:00
e820.h x86: e820: Remove conditional early mapping in parse_e820_ext 2011-02-23 22:27:52 +01:00
edac.h
efi.h x86, memblock: Replace e820_/_early string with memblock_ 2010-08-27 11:13:47 -07:00
elf.h
emergency-restart.h
entry_arch.h x86: Allocate 32 tlb_invalidate_interrupt handler stubs 2011-02-14 13:03:08 +01:00
errno.h
fb.h
fcntl.h
fixmap.h x86: Fix Moorestown VRTC fixmap placement 2011-01-11 12:46:16 +01:00
floppy.h
frame.h x86: Use {push,pop}_cfi in more places 2011-02-28 18:06:22 +01:00
ftrace.h
futex.h futex: Sanitize futex ops argument types 2011-03-11 12:23:31 +01:00
gart.h Merge branch 'x86-iommu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-10-21 14:23:48 -07:00
genapic.h
geode.h
gpio.h x86/gpio: Implement x86 gpio_to_irq convert function 2011-01-11 12:46:15 +01:00
hardirq.h irq_work: Add generic hardirq context callbacks 2010-10-18 19:58:50 +02:00
highmem.h mm: stack based kmap_atomic() 2010-10-26 16:52:08 -07:00
hpet.h x86: ioapic/hpet: Convert to new chip functions 2010-10-12 16:53:37 +02:00
hugetlb.h
hw_breakpoint.h x86: Fix instruction breakpoint encoding 2010-09-17 03:24:13 +02:00
hw_irq.h x86: Allocate 32 tlb_invalidate_interrupt handler stubs 2011-02-14 13:03:08 +01:00
hypertransport.h
hyperv.h
hypervisor.h xen: HVM X2APIC support 2011-01-07 10:03:50 -05:00
i387.h x86-64, asm: Use fxsaveq/fxrestorq in more places 2010-10-22 15:33:38 -07:00
i8253.h
i8259.h x86: i8259: Convert to new irq_chip functions 2010-10-12 16:53:36 +02:00
ia32_unistd.h
ia32.h
idle.h
inat_types.h
inat.h
init.h x86: Rename e820_table_* to pgt_buf_* 2011-02-24 14:52:18 +01:00
insn.h
inst.h
intel_scu_ipc.h Remove indirect read write api support. 2010-08-03 09:50:30 -04:00
io_apic.h x86: ioapic: Move trigger defines to io_apic.h 2011-02-23 19:58:09 +01:00
io.h Merge branch 'stable/xen-pcifront-0.8.2' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen 2010-10-28 17:11:17 -07:00
ioctl.h
ioctls.h
iomap.h mm: stack based kmap_atomic() 2010-10-26 16:52:08 -07:00
iommu_table.h x86, iommu: Update header comments with appropriate naming 2010-10-08 13:11:21 -07:00
iommu.h
ipcbuf.h
ipi.h x86: Make default_send_IPI_mask_sequence/allbutself_logical() 32bit only 2011-01-28 14:54:05 +01:00
irq_controller.h x86: dtb: Add irq domain abstraction 2011-02-23 22:27:53 +01:00
irq_regs.h
irq_remapping.h x86: Speed up the irq_remapped check in hot pathes 2010-10-12 16:53:42 +02:00
irq_vectors.h x86: Work around old gas bug 2011-03-03 12:47:08 +01:00
irq.h x86: Add device tree support 2011-02-23 22:27:52 +01:00
irqflags.h Fix IRQ flag handling naming 2010-10-07 14:08:55 +01:00
ist.h
jump_label.h x86: Fix jump label with RO/NX module protection crash 2011-01-23 16:12:45 +01:00
Kbuild archs: replace unifdef-y with header-y 2010-08-14 22:26:51 +02:00
kdebug.h x86, dumpstack: Correct stack dump info when frame pointer is available 2011-03-18 10:51:42 +01:00
kexec.h
kgdb.h kgdb,x86: Individual register get/set for x86 2010-08-05 09:22:20 -05:00
kmap_types.h
kmemcheck.h
kprobes.h
kvm_emulate.h KVM: SVM: copy instruction bytes from VMCB 2011-01-12 11:31:07 +02:00
kvm_host.h thp: mmu_notifier_test_young 2011-01-13 17:32:46 -08:00
kvm_para.h KVM: x86: Add missing inline tag to kvm_read_and_reset_pf_reason 2011-01-12 11:23:27 +02:00
kvm.h KVM: x86: XSAVE/XRSTOR live migration support 2010-08-01 10:46:37 +03:00
ldt.h
lguest_hcall.h
lguest.h
linkage.h
local64.h arch: Implement local64_t 2010-06-09 11:12:36 +02:00
local.h
mach_timer.h
mach_traps.h x86, NMI: Add NMI symbol constants and rename memory parity to PCI SERR 2011-01-07 15:08:51 +01:00
math_emu.h
mc146818rtc.h
mca_dma.h
mca.h
mce.h x86, hwmon: Add core threshold notification to therm_throt.c 2011-01-03 08:30:30 -08:00
memblock.h x86-32, memblock: Make add_highpages honor early reserved ranges 2010-10-05 21:44:35 -07:00
microcode.h x86, microcode, AMD: Cleanup code a bit 2010-11-10 14:54:54 +01:00
mman.h
mmconfig.h
mmu_context.h x86, mm: avoid possible bogus tlb entries by clearing prev mm_cpumask after switching mm 2011-02-03 13:32:39 -08:00
mmu.h
mmx.h
mmzone_32.h
mmzone_64.h
mmzone.h
module.h x86: Remove CONFIG_4KSTACKS 2010-06-29 12:12:59 +02:00
mpspec_def.h x86: Fix APIC ID sizing bug on larger systems, clean up MAX_APICS confusion 2011-01-05 14:09:23 +01:00
mpspec.h x86: Unify cpu/apicid <-> NUMA node mapping between 32 and 64bit 2011-01-28 14:54:09 +01:00
mrst-vrtc.h x86: mrst: Add vrtc driver which serves as a wall clock device 2010-11-11 11:34:27 +01:00
mrst.h x86: mrst: Add vrtc driver which serves as a wall clock device 2010-11-11 11:34:27 +01:00
msgbuf.h
mshyperv.h
msidef.h
msr-index.h Merge commit 'v2.6.38-rc8' into perf/core 2011-03-08 17:21:52 +01:00
msr.h x86, gcc-4.6: Avoid unused by set variables in rdmsr 2010-07-20 15:38:18 -07:00
mtrr.h
mutex_32.h
mutex_64.h
mutex.h
mwait.h x86, mwait: Move mwait constants to a common header file 2010-09-17 15:36:40 -07:00
nmi.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
nops.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
numa_32.h x86: Rename incorrectly named parameter of numa_cpu_node() 2011-01-31 18:22:25 +01:00
numa_64.h x86-64, NUMA: Unify emulated distance mapping 2011-02-16 17:11:10 +01:00
numa.h x86-64, NUMA: Factor out memblk handling into numa_{add|register}_memblk() 2011-02-16 17:11:07 +01:00
numaq.h
olpc_ofw.h x86: OLPC: Make OLPC=n build again 2011-02-23 11:54:02 +01:00
olpc.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
page_32_types.h x86: Remove CONFIG_4KSTACKS 2010-06-29 12:12:59 +02:00
page_32.h
page_64_types.h
page_64.h
page_types.h x86-64, NUMA: Revert NUMA affine page table allocation 2011-03-04 10:26:36 +01:00
page.h x86: Document __phys_reloc_hide() usage in __pa_symbol() 2010-08-11 08:43:49 +02:00
param.h
paravirt_types.h thp: add pmd paravirt ops 2011-01-13 17:32:39 -08:00
paravirt.h thp: fix PARAVIRT x86 32bit noPAE 2011-01-26 10:49:57 +10:00
parport.h
pat.h
pci_64.h
pci_x86.h x86/PCI: Clean up pci_cache_line_size 2010-10-18 10:49:30 -04:00
pci-direct.h
pci-functions.h
pci.h x86: Add NX protection for kernel data 2010-11-18 12:52:04 +01:00
percpu.h percpu, x86: Fix percpu_xchg_op() 2011-01-26 08:10:49 +01:00
perf_event_p4.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
perf_event.h perf, arch: Cleanup perf-pmu init vs lockup-detector 2010-11-26 15:14:56 +01:00
pgalloc.h tree-wide: fix comment/printk typos 2010-11-01 15:38:34 -04:00
pgtable_32_types.h x86: use __ASSEMBLY__ rather than __ASSEMBLER__ 2010-06-07 17:27:11 -07:00
pgtable_32.h mm: remove pte_*map_nested() 2010-10-26 16:52:08 -07:00
pgtable_64_types.h
pgtable_64.h thp: add x86 32bit support 2011-01-13 17:32:44 -08:00
pgtable_types.h thp: add pmd_modify 2011-01-13 17:32:44 -08:00
pgtable-2level_types.h
pgtable-2level.h thp: add x86 32bit support 2011-01-13 17:32:44 -08:00
pgtable-3level_types.h
pgtable-3level.h thp: add x86 32bit support 2011-01-13 17:32:44 -08:00
pgtable.h thp: don't allow transparent hugepage support without PSE 2011-01-13 17:32:45 -08:00
poll.h
posix_types_32.h
posix_types_64.h
posix_types.h
prctl.h
processor-cyrix.h
processor-flags.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
processor.h x86: Move llc_shared_map out of cpu_info 2011-01-26 08:44:49 +01:00
prom.h x86: dt: Cleanup local apic setup 2011-02-25 16:18:52 +01:00
proto.h
ptrace-abi.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
ptrace.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
pvclock-abi.h x86, paravirt: don't compute pvclock adjustments if we trust the tsc 2010-05-19 11:41:05 +03:00
pvclock.h x86/pvclock: Zero last_value on resume 2010-11-28 09:33:20 +01:00
reboot_fixups.h
reboot.h
required-features.h x86, cpu: Support the features flags in new CPUID leaf 7 2010-07-07 17:29:18 -07:00
resource.h
resume-trace.h
rio.h
rtc.h
rwlock.h
rwsem.h rwsem: Move duplicate function prototypes to linux/rwsem.h 2011-01-27 12:30:39 +01:00
scatterlist.h remove needless ISA_DMA_THRESHOLD 2010-08-07 18:15:50 +02:00
seccomp_32.h
seccomp_64.h
seccomp.h
sections.h
segment.h x86, asm: Fix CFI macro invocations to deal with shortcomings in gas 2010-10-19 14:28:02 -07:00
sembuf.h
serial.h
setup_arch.h
setup.h x86: Add CE4100 platform support 2010-11-12 00:45:41 +01:00
shmbuf.h
shmparam.h
sigcontext32.h
sigcontext.h
sigframe.h
siginfo.h
signal.h
smp.h Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-15 19:49:10 -07:00
smpboot_hooks.h x86: Use u32 instead of long to set reset vector back to 0 2011-02-28 16:22:18 +01:00
socket.h
sockios.h
sparsemem.h
spinlock_types.h
spinlock.h
srat.h
stackprotector.h
stacktrace.h x86, dumpstack: Correct stack dump info when frame pointer is available 2011-03-18 10:51:42 +01:00
stat.h
statfs.h
string_32.h
string_64.h
string.h
suspend_32.h PM / x86: Save/restore MISC_ENABLE register 2010-06-08 00:32:49 +02:00
suspend_64.h PM / x86: Save/restore MISC_ENABLE register 2010-06-08 00:32:49 +02:00
suspend.h
svm.h KVM: SVM: copy instruction bytes from VMCB 2011-01-12 11:31:07 +02:00
swab.h
swiotlb.h x86, swiotlb: Simplify SWIOTLB pci_swiotlb_detect routine. 2010-08-26 15:13:29 -07:00
sync_bitops.h
sys_ia32.h Mark arguments to certain syscalls as being const 2010-08-13 16:53:13 -07:00
syscall.h
syscalls.h Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
system.h x86, system.h: Drop unused __SAVE/__RESTORE macros 2011-02-20 13:38:47 +01:00
tce.h
termbits.h
termios.h
thread_info.h Merge branch 'idle-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6 2010-05-28 16:14:17 -07:00
time.h
timer.h x86, nmi_watchdog: Remove all stub function calls from old nmi_watchdog 2010-11-18 09:08:23 +01:00
timex.h
tlb.h
tlbflush.h x86-32, mm: Add an initial page table for core bootstrapping 2010-10-20 14:23:55 -07:00
topology.h x86-64, NUMA: Implement generic node distance handling 2011-02-16 17:11:09 +01:00
trampoline.h x86-32, mm: Add an initial page table for core bootstrapping 2010-10-20 14:23:55 -07:00
traps.h KVM: Handle async PF in a guest. 2011-01-12 11:23:16 +02:00
tsc.h x86: Fix common misspellings 2011-03-18 10:39:30 +01:00
types.h
uaccess_32.h
uaccess_64.h
uaccess.h
ucontext.h
unaligned.h
unistd_32.h Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-15 18:53:35 -07:00
unistd_64.h Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-15 18:53:35 -07:00
unistd.h
user32.h
user_32.h
user_64.h
user.h
vdso.h
vga.h
vgtod.h
virtext.h
vm86.h
vmx.h KVM: VMX: Add definitions for more vm entry/exit control bits 2011-01-12 11:31:08 +02:00
vsyscall.h
x86_init.h x86/platform: Add a wallclock_init func to x86_init.timers ops 2011-02-14 18:20:43 +01:00
xcr.h
xor_32.h
xor_64.h
xor.h
xsave.h Merge branch 'x86-xsave-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-08-06 16:25:13 -07:00