kernel-ark/arch/x86_64/kernel
Ingo Molnar f18d397e6a [PATCH] x86-64: optimize & fix APIC mode setup
Fix a couple of inconsistencies/problems I found while reviewing the x86_64
genapic code (when I was chasing mysterious eth0 timeouts that would only
trigger if CPU_HOTPLUG is enabled):

 - AMD systems defaulted to the slower flat-physical mode instead
   of the flat-logical mode. The only restriction on AMD systems
   is that they should not use clustered APIC mode.

 - removed the CPU hotplug hacks, switching the default for small
   systems back from phys-flat to logical-flat. The switching to logical
   flat mode on small systems fixed sporadic ethernet driver timeouts i
   was getting on a dual-core Athlon64 system:

    NETDEV WATCHDOG: eth0: transmit timed out
    eth0: Transmit timeout, status 0c 0005 c07f media 80.
    eth0: Tx queue start entry 32  dirty entry 28.
    eth0:  Tx descriptor 0 is 0008a04a. (queue head)
    eth0:  Tx descriptor 1 is 0008a04a.
    eth0:  Tx descriptor 2 is 0008a04a.
    eth0:  Tx descriptor 3 is 0008a04a.
    eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1

 - The use of '<= 8' was a bug by itself (the valid APIC ids
   for logical flat mode go from 0 to 7, not 0 to 8). The new logic
   is to use logical flat mode on both AMD and Intel systems, and
   to only switch to physical mode when logical mode cannot be used.
   If CPU hotplug is racy wrt. APIC shutdown then CPU hotplug needs
   fixing, not the whole IRQ system be made inconsistent and slowed
   down.

 - minor cleanups: simplified some code constructs

build & booted on a couple of AMD and Intel SMP systems.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Andi Kleen <ak@suse.de>
Cc: "Li, Shaohua" <shaohua.li@intel.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
2007-05-02 19:27:04 +02:00
..
acpi [PATCH] Revert "swsusp: disable nonboot CPUs before entering platform suspend" 2007-03-27 09:20:03 -07:00
cpufreq [PATCH] X86_P4_CLOCKMOD must select CPU_FREQ_TABLE 2007-03-18 11:35:07 -07:00
aperture.c
apic.c [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself 2007-03-23 20:21:45 -07:00
asm-offsets.c
audit.c
crash_dump.c
crash.c [PATCH] Kexec / Kdump: Unify elf note code 2006-12-07 08:39:46 -08:00
e820.c [PATCH] x86-64: fix section mismatch warnings 2007-03-16 21:07:36 +01:00
early_printk.c
early-quirks.c [PATCH] x86: revert x86_64-mm-fix-the-irqbalance-quirk-for-e7320-e7520-e7525 2007-05-02 19:27:04 +02:00
entry.S [PATCH] x86_64 irq: Safely cleanup an irq after moving it. 2007-02-26 10:34:08 -08:00
functionlist [NET]: Get rid of alloc_skb_from_cache 2007-04-17 13:13:16 -07:00
genapic_cluster.c
genapic_flat.c
genapic.c [PATCH] x86-64: optimize & fix APIC mode setup 2007-05-02 19:27:04 +02:00
head64.c [PATCH] Dynamic kernel command-line: fixups 2007-02-12 09:48:39 -08:00
head.S [PATCH] x86-64: x86_64 - Fix FS/GS registers for VT execution 2007-02-13 13:26:24 +01:00
hpet.c failsafe mechanism to HPET clock calibration 2007-04-14 21:44:03 -07:00
i387.c
i8259.c [PATCH] x86_64 irq: Fix comments after changing IRQ0_VECTOR from 0x20 to 0x30 2007-03-29 08:16:23 -07:00
init_task.c
io_apic.c [PATCH] x86_64: remove unusued 'flags' variable 2007-03-05 07:57:53 -08:00
ioport.c [PATCH] x86-64: Use constant instead of raw number in x86_64 ioperm.c 2007-02-13 13:26:22 +01:00
irq.c [PATCH] x86-64: survive having no irq mapping for a vector 2007-02-13 13:26:25 +01:00
k8.c cache_k8_northbridges() overflows beyond allocation 2007-04-16 18:09:18 -07:00
kprobes.c [PATCH] kprobes: enable booster on the preemptible kernel 2006-12-07 08:39:38 -08:00
ldt.c
machine_kexec.c
Makefile [PATCH] time: x86_64: split x86_64/kernel/time.c up 2007-02-16 08:14:00 -08:00
mce_amd.c [PATCH] x86-64: Allow to run a program when a machine check event is detected 2007-02-13 13:26:23 +01:00
mce_intel.c
mce.c [PATCH] x86-64: Allow to run a program when a machine check event is detected 2007-02-13 13:26:23 +01:00
module.c [PATCH] Generic BUG for x86-64 2006-12-08 08:28:39 -08:00
mpparse.c [PATCH] x86-64: fix section mismatch warnings 2007-03-16 21:07:36 +01:00
nmi.c [PATCH] x86: Fix potential overflow in perfctr reservation 2007-04-16 10:30:27 +02:00
pci-calgary.c [PATCH] x86-64: robustify bad_dma_address handling 2007-02-13 13:26:24 +01:00
pci-dma.c [PATCH] x86-64: improved iommu documentation 2007-02-13 13:26:21 +01:00
pci-gart.c [PATCH] x86-64: make GART PTEs uncacheable 2007-04-24 13:05:36 +02:00
pci-nommu.c
pci-swiotlb.c [IA64] swiotlb cleanup 2007-02-05 18:51:25 -08:00
pmtimer.c [PATCH] time: x86_64: convert x86_64 to use GENERIC_TIME 2007-02-16 08:14:00 -08:00
process.c [PATCH] Fix atomicity of TIF update in flush_thread() for x86_64 2007-03-18 11:35:08 -07:00
ptrace.c [PATCH] x86-64: Check return value of putreg in PTRACE_SETREGS 2007-02-13 13:26:24 +01:00
reboot.c
relocate_kernel.S
setup64.c [PATCH] x86-64: Unexport __supported_pte_mask 2007-02-13 13:26:24 +01:00
setup.c [PATCH] x86: Unify pcspeaker platform device code between i386/x86-64 2007-02-13 13:26:26 +01:00
signal.c
smp.c Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6 2006-12-07 08:59:11 -08:00
smpboot.c [PATCH] x86: revert x86_64-mm-fix-the-irqbalance-quirk-for-e7320-e7520-e7525 2007-05-02 19:27:04 +02:00
stacktrace.c [PATCH] x86-64: do not always end the stack trace with ULONG_MAX 2007-02-13 13:26:21 +01:00
suspend_asm.S
suspend.c
sys_x86_64.c
syscall.c
tce.c
time.c [PATCH] clocksource init adjustments (fix bug #7426) 2007-03-05 07:57:53 -08:00
trampoline.S
traps.c [PATCH] x86_64: Fix dump_trace() 2007-01-03 08:49:59 -08:00
tsc_sync.c [PATCH] x86: rewrite SMP TSC sync code 2007-02-16 08:13:57 -08:00
tsc.c [PATCH] clocksource init adjustments (fix bug #7426) 2007-03-05 07:57:53 -08:00
vmlinux.lds.S [PATCH] x86: Fix gcc 4.2 _proxy_pda workaround 2007-04-16 10:30:27 +02:00
vsmp.c
vsyscall.c [PATCH] misc NULL noise 2007-03-14 15:27:49 -07:00
x8664_ksyms.c [PATCH] x86: Export _proxy_pda for gcc 4.2 2007-03-16 21:07:36 +01:00