89039b37be
The 64bit SMP bootup is slightly different to the 32bit one. It enables the boot CPU local APIC timer before all CPUs are brought up. Some AMD C1E systems have the C1E feature flag only set in the secondary CPU. Due to the early enable of the boot CPU local APIC timer the APIC timer is registered as a fully functional device. When we detect the wreckage during the bringup of the secondary CPU, we need to force the boot CPU into broadcast mode. Check the C1E caused APIC timer disable, when the secondary APIC timer is initialized. If the boot CPU APIC timer was registered as a functional clock event device, then fix this up and utilize the CLOCK_EVT_NOTIFY_BROADCAST_FORCE mechanism to force the already registered boot CPU APIC timer into broadcast mode. Tested by force injecting the failure mode. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
||
---|---|---|
.. | ||
acpi | ||
cpu | ||
cpufreq | ||
.gitignore | ||
alternative.c | ||
aperture_64.c | ||
apic_32.c | ||
apic_64.c | ||
apm_32.c | ||
asm-offsets_32.c | ||
asm-offsets_64.c | ||
asm-offsets.c | ||
audit_64.c | ||
bootflag.c | ||
bugs_64.c | ||
cpuid.c | ||
crash_32.c | ||
crash_64.c | ||
crash_dump_32.c | ||
crash_dump_64.c | ||
doublefault_32.c | ||
e820_32.c | ||
e820_64.c | ||
early_printk.c | ||
early-quirks_64.c | ||
efi_32.c | ||
efi_stub_32.S | ||
entry_32.S | ||
entry_64.S | ||
genapic_64.c | ||
genapic_flat_64.c | ||
geode_32.c | ||
head64.c | ||
head_32.S | ||
head_64.S | ||
hpet.c | ||
i386_ksyms_32.c | ||
i387_32.c | ||
i387_64.c | ||
i8237.c | ||
i8253.c | ||
i8259_32.c | ||
i8259_64.c | ||
init_task_32.c | ||
init_task_64.c | ||
io_apic_32.c | ||
io_apic_64.c | ||
ioport_32.c | ||
ioport_64.c | ||
irq_32.c | ||
irq_64.c | ||
k8.c | ||
kprobes_32.c | ||
kprobes_64.c | ||
ldt_32.c | ||
ldt_64.c | ||
machine_kexec_32.c | ||
machine_kexec_64.c | ||
Makefile | ||
Makefile_32 | ||
Makefile_64 | ||
mca_32.c | ||
mce_64.c | ||
mce_amd_64.c | ||
mce_intel_64.c | ||
mfgpt_32.c | ||
microcode.c | ||
module_32.c | ||
module_64.c | ||
mpparse_32.c | ||
mpparse_64.c | ||
msr.c | ||
nmi_32.c | ||
nmi_64.c | ||
numaq_32.c | ||
paravirt_32.c | ||
pci-calgary_64.c | ||
pci-dma_32.c | ||
pci-dma_64.c | ||
pci-gart_64.c | ||
pci-nommu_64.c | ||
pci-swiotlb_64.c | ||
pcspeaker.c | ||
pmtimer_64.c | ||
process_32.c | ||
process_64.c | ||
ptrace_32.c | ||
ptrace_64.c | ||
quirks.c | ||
reboot_32.c | ||
reboot_64.c | ||
reboot_fixups_32.c | ||
relocate_kernel_32.S | ||
relocate_kernel_64.S | ||
scx200_32.c | ||
setup64.c | ||
setup_32.c | ||
setup_64.c | ||
sigframe_32.h | ||
signal_32.c | ||
signal_64.c | ||
smp_32.c | ||
smp_64.c | ||
smpboot_32.c | ||
smpboot_64.c | ||
smpcommon_32.c | ||
srat_32.c | ||
stacktrace.c | ||
summit_32.c | ||
suspend_64.c | ||
suspend_asm_64.S | ||
sys_i386_32.c | ||
sys_x86_64.c | ||
syscall_64.c | ||
syscall_table_32.S | ||
sysenter_32.c | ||
tce_64.c | ||
time_32.c | ||
time_64.c | ||
topology.c | ||
trampoline_32.S | ||
trampoline_64.S | ||
traps_32.c | ||
traps_64.c | ||
tsc_32.c | ||
tsc_64.c | ||
tsc_sync.c | ||
verify_cpu_64.S | ||
vm86_32.c | ||
vmi_32.c | ||
vmiclock_32.c | ||
vmlinux_32.lds.S | ||
vmlinux_64.lds.S | ||
vmlinux.lds.S | ||
vsmp_64.c | ||
vsyscall_32.lds.S | ||
vsyscall_32.S | ||
vsyscall_64.c | ||
vsyscall-int80_32.S | ||
vsyscall-note_32.S | ||
vsyscall-sigreturn_32.S | ||
vsyscall-sysenter_32.S | ||
x8664_ksyms_64.c |