linux/arch/x86_64/kernel
Eric W. Biederman 3d483f4757 [PATCH] Fix sync_tsc hang
sync_tsc was using smp_call_function to ask the boot processor to report
it's tsc value.  smp_call_function performs an IPI_send_allbutself which is
a broadcast ipi.  There is a window during processor startup during which
the target cpu has started and before it has initialized it's interrupt
vectors so it can properly process an interrupt.  Receveing an interrupt
during that window will triple fault the cpu and do other nasty things.

Why cli does not protect us from that is beyond me.

The simple fix is to match ia64 and provide a smp_call_function_single.
Which avoids the broadcast and is more efficient.

This certainly fixes the problem of getting stuck on boot which was
very easy to trigger on my SMP Hyperthreaded Xeon, and I think
it fixes it for the right reasons.

Minor changes by AK

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-07-29 15:01:13 -07:00
..
acpi [PATCH] s-t-RAM: load gdt the right way 2005-06-25 16:24:32 -07:00
cpufreq Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
Makefile [PATCH] kexec: x86_64 kexec implementation 2005-06-25 16:24:50 -07:00
aperture.c [PATCH] remove direct ref to contig_page_data for x86-64 2005-06-23 09:45:06 -07:00
apic.c [PATCH] kexec: x86_64: restore apic virtual wire mode on shutdown 2005-06-25 16:24:47 -07:00
asm-offsets.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
crash.c [PATCH] kdump: Use real pt_regs from exception 2005-06-25 16:24:54 -07:00
e820.c [PATCH] crashdump: x86_64: crashkernel option 2005-06-25 16:24:50 -07:00
early_printk.c [PATCH] allow early printk to use more than 25 lines 2005-06-23 09:45:10 -07:00
entry.S [PATCH] x86_64: Switch to the interrupt stack when running a softirq in local_bh_enable() 2005-07-28 21:46:02 -07:00
genapic.c [PATCH] x86_64: Support more than 8 cores on AMD systems 2005-07-28 21:46:01 -07:00
genapic_cluster.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
genapic_flat.c [PATCH] x86_64: Support more than 8 cores on AMD systems 2005-07-28 21:46:01 -07:00
head.S [PATCH] x86_64: Small assembly improvements 2005-07-28 21:46:02 -07:00
head64.c [PATCH] reorganize x86-64 NUMA and DISCONTIGMEM config options 2005-06-23 09:45:06 -07:00
i387.c [PATCH] x86_64: Change init sections for CPU hotplug support 2005-06-25 16:24:30 -07:00
i8259.c [PATCH] kexec: x86_64: add i8259 shutdown method 2005-06-25 16:24:46 -07:00
init_task.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
io_apic.c [PATCH] x86: i8253/i8259A lock cleanup 2005-06-30 08:45:10 -07:00
ioport.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
irq.c [PATCH] x86_64: Switch to the interrupt stack when running a softirq in local_bh_enable() 2005-07-28 21:46:02 -07:00
kprobes.c [PATCH] kprobes: fix namespace problem and sparc64 build 2005-07-05 19:19:00 -07:00
ldt.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
machine_kexec.c [PATCH] x86_64 machine_kexec: Use standard pagetable helpers 2005-07-29 13:12:49 -07:00
mce.c [PATCH] x86_64: Create per CPU machine check sysfs directories 2005-07-28 21:46:00 -07:00
mce_intel.c [PATCH] x86_64: Change init sections for CPU hotplug support 2005-06-25 16:24:30 -07:00
module.c [PATCH] uml: kludgy compilation fixes for x86-64 subarch modules support 2005-05-05 16:36:33 -07:00
mpparse.c [PATCH] x86_64: Move cpu_present/possible_map parsing earlier 2005-07-28 21:45:58 -07:00
msr.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
nmi.c [PATCH] x86_64: Change init sections for CPU hotplug support 2005-06-25 16:24:30 -07:00
pci-dma.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pci-gart.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pci-nommu.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pmtimer.c [PATCH] x86_64: Add pmtimer support 2005-05-17 07:59:15 -07:00
process.c [PATCH] seccomp: tsc disable 2005-06-27 15:11:44 -07:00
ptrace.c [PATCH] x86_64: TASK_SIZE fixes for compatibility mode processes 2005-06-21 18:46:12 -07:00
reboot.c [PATCH] x86_64 sync machine_power_off with i386 2005-07-26 14:35:45 -07:00
relocate_kernel.S [PATCH] kexec: x86_64 kexec implementation 2005-06-25 16:24:50 -07:00
semaphore.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
setup.c [PATCH] x86_64: Fix SRAT handling on non dual core systems 2005-07-28 21:46:02 -07:00
setup64.c [PATCH] x86_64: Some cleanup in setup64.c 2005-07-28 21:45:58 -07:00
signal.c [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
smp.c [PATCH] Fix sync_tsc hang 2005-07-29 15:01:13 -07:00
smpboot.c [PATCH] Fix sync_tsc hang 2005-07-29 15:01:13 -07:00
suspend.c [PATCH] MTRR suspend/resume cleanup 2005-07-07 18:23:42 -07:00
suspend_asm.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sys_x86_64.c [PATCH] Avoiding mmap fragmentation 2005-06-21 18:46:16 -07:00
syscall.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
time.c [PATCH] x86_64: fix hpet for systems that don't support legacy replacement 2005-06-23 09:45:12 -07:00
trampoline.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
traps.c [PATCH] x86_64: cpu hotplug changes kills nmi watchdog 2005-07-28 21:45:57 -07:00
vmlinux.lds.S [PATCH] x86_64: section alignment fix 2005-07-12 16:00:59 -07:00
vsyscall.c [PATCH] x86_64: Make vsyscall.c compile without CONFIG_SYSCTL 2005-05-17 07:59:16 -07:00
x8664_ksyms.c [PATCH] x86_64: CONFIG_BUG=n fixes 2005-05-25 15:31:28 -07:00