1
linux/arch/x86/kernel
Jack Steiner ac23d4ee3f x86: support for new UV apic
UV supports really big systems. So big, in fact, that the APICID register
does not contain enough bits to contain an APICID that is unique across all
cpus.

The UV BIOS supports 3 APICID modes:

	- legacy mode. This mode uses the old APIC mode where
	  APICID is in bits [31:24] of the APICID register.

	- x2apic mode. This mode is whitebox-compatible. APICIDs
	  are unique across all cpus. Standard x2apic APIC operations
	  (Intel-defined) can be used for IPIs. The node identifier
	  fits within the Intel-defined portion of the APICID register.

	- x2apic-uv mode. In this mode, the APICIDs on each node have
	  unique IDs, but IDs on different node are not unique. For example,
	  if each mode has 32 cpus, the APICIDs on each node might be
	  0 - 31. Every node has the same set of IDs.
	  The UV hub is used to route IPIs/interrupts to the correct node.
	  Traditional APIC operations WILL NOT WORK.

In x2apic-uv mode, the ACPI tables all contain a full unique ID (note:
exact bit layout still changing but the following is close):

	nnnnnnnnnnlc0cch
		n = unique node number
		l = socket number on board
		c = core
		h = hyperthread

Only the "lc0cch" bits are written to the APICID register. The remaining bits are
supplied by having the get_apic_id() function "OR" the extra bits into the value
read from the APICID register. (Hmmm.. why not keep the ENTIRE APICID register
in per-cpu data....)

The x2apic-uv mode is recognized by the MADT table containing:
	  oem_id = "SGI"
	  oem_table_id = "UV-X"

Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-04-17 17:41:33 +02:00
..
acpi x86: parsing for ACPI "SAPIC" table 2008-04-17 17:41:33 +02:00
cpu x86: move apic declarations to mach_apic.h 2008-04-17 17:41:30 +02:00
.gitignore
alternative.c x86: fix test_poke for vmalloced pages 2008-04-17 17:41:29 +02:00
aperture_64.c x86: clean up aperture_64.c 2008-04-17 17:41:19 +02:00
apic_32.c x86: change GET_APIC_ID() from an inline function to an out-of-line function 2008-04-17 17:41:33 +02:00
apic_64.c x86: support for new UV apic 2008-04-17 17:41:33 +02:00
apm_32.c x86: switch to proc_create() 2008-04-17 17:40:51 +02:00
asm-offsets_32.c x86: move struct definitions to unifed sigframe.h 2008-04-17 17:40:46 +02:00
asm-offsets_64.c
asm-offsets.c
audit_64.c
bootflag.c
bugs_64.c x86: don't use large pages to map the first 2/4MB of memory 2008-04-17 17:41:30 +02:00
cpuid.c
crash_dump_32.c
crash_dump_64.c
crash.c x86: move ipi definitions to mach_ipi.h 2008-04-17 17:41:30 +02:00
doublefault_32.c
ds.c
e820_32.c x86: reserve end-of-conventional-memory to 1MB on 32-bit 2008-04-17 17:40:51 +02:00
e820_64.c x86: replace the now useless max_pfn_mapped define 2008-04-17 17:41:30 +02:00
early_printk.c x86: coding style fixes to x86/kernel/early_printk.c 2008-04-17 17:40:51 +02:00
early-quirks.c
efi_32.c x86: sparse error in efi_32.c 2008-02-19 16:18:28 +01:00
efi_64.c
efi_stub_32.S
efi_stub_64.S
efi.c x86: sparse warning in efi.c 2008-02-19 16:18:28 +01:00
entry_32.S x86: entry_32.S - use flags from processor-flags.h 2008-04-17 17:41:30 +02:00
entry_64.S x86: ptrace vs -ENOSYS 2008-04-17 17:41:13 +02:00
genapic_64.c x86: support for new UV apic 2008-04-17 17:41:33 +02:00
genapic_flat_64.c x86: change GET_APIC_ID() from an inline function to an out-of-line function 2008-04-17 17:41:33 +02:00
genx2apic_uv_x.c x86: support for new UV apic 2008-04-17 17:41:33 +02:00
geode_32.c
head32.c x86: introduce kernel/head32.c 2008-04-17 17:40:49 +02:00
head64.c x86: don't set up early exception handlers for external interrupts 2008-04-17 17:41:29 +02:00
head_32.S x86: introduce kernel/head32.c 2008-04-17 17:40:49 +02:00
head_64.S x86: move early exception handlers into init.text 2008-04-17 17:41:29 +02:00
hpet.c x86: revert assign IRQs to hpet timer 2008-04-04 18:36:49 +02:00
i386_ksyms_32.c
i387.c x86: clean up i387.c 2008-04-17 17:40:57 +02:00
i8237.c
i8253.c x86: pit_clockevent can be static 2008-02-13 16:20:35 +01:00
i8259_32.c x86: i8259A: remove redundant irq_descinitialization 2008-02-19 16:18:34 +01:00
i8259_64.c
init_task.c x86: delay the export removal of init_mm 2008-02-29 18:55:42 +01:00
io_apic_32.c x86: change GET_APIC_ID() from an inline function to an out-of-line function 2008-04-17 17:41:33 +02:00
io_apic_64.c x86: change GET_APIC_ID() from an inline function to an out-of-line function 2008-04-17 17:41:33 +02:00
io_delay.c x86: add dmi quirk for io_delay 2008-03-26 22:23:40 +01:00
ioport.c
ipi.c x86: create ipi.c 2008-04-17 17:40:56 +02:00
irq_32.c x86: replace remaining __FUNCTION__ occurances 2008-04-17 17:40:57 +02:00
irq_64.c
k8.c
kdebugfs.c
kprobes.c x86: replace most VM86 flags with flags from processor-flags.h 2008-04-17 17:41:33 +02:00
ldt.c
machine_kexec_32.c
machine_kexec_64.c vmcoreinfo: add the symbol "phys_base" 2008-04-02 15:28:19 -07:00
Makefile x86: support for new UV apic 2008-04-17 17:41:33 +02:00
mca_32.c x86: coding style fixes to arch/x86/kernel/mca_32.c 2008-04-17 17:40:49 +02:00
mfgpt_32.c x86: GEODE: add missing module.h include 2008-03-26 22:23:40 +01:00
microcode.c x86: microcode: show results on success too 2008-04-17 17:41:32 +02:00
module_32.c
module_64.c
mpparse_32.c x86: increase size of APICID 2008-04-17 17:41:33 +02:00
mpparse_64.c x86: increase size of APICID 2008-04-17 17:41:33 +02:00
msr.c x86: coding style fixes to arch/x86/kernel/msr.c 2008-04-17 17:40:50 +02:00
nmi_32.c x86: fix ioapic bug again 2008-04-17 17:41:21 +02:00
nmi_64.c x86: wipe get_nmi_reason out of nmi_64.h 2008-04-17 17:41:01 +02:00
numaq_32.c
paravirt_patch_32.c
paravirt_patch_64.c
paravirt.c x86: paravirt_ops: don't steal memory resources in paravirt_disable_iospace 2008-04-17 17:41:33 +02:00
pci-calgary_64.c
pci-dma_32.c
pci-dma_64.c x86 iommu: add more documentation 2008-04-17 17:40:59 +02:00
pci-gart_64.c x86, agpgart: scary messages are fortunately obsolete 2008-04-04 18:36:46 +02:00
pci-nommu_64.c
pci-swiotlb_64.c
pcspeaker.c
pmtimer_64.c
process_32.c x86: always enable irqs when entering idle 2008-04-17 17:41:00 +02:00
process_64.c x86: prevent unconditional writes to DebugCtl MSR 2008-04-17 17:40:58 +02:00
ptrace.c x86: regparm(3) is mandatory, no need to annotate 2008-04-17 17:40:45 +02:00
quirks.c x86: hpet clock enable quirk on nVidia nForce 430 2008-03-21 17:06:15 +01:00
reboot_fixups_32.c
reboot.c x86: cleanup duplicate includes 2008-04-17 17:40:58 +02:00
relocate_kernel_32.S x86: relocate_kernel - use predefined macroses for page attributes 2008-04-17 17:41:29 +02:00
relocate_kernel_64.S x86: relocate_kernel - use predefined macroses for page attributes 2008-04-17 17:41:29 +02:00
rtc.c x86: fix cmos read and write to not use inb_p and outb_p 2008-04-17 17:40:47 +02:00
scx200_32.c
setup64.c x86: support for new UV apic 2008-04-17 17:41:33 +02:00
setup_32.c x86: move def_to_bigsmp to setup_32.c 2008-04-17 17:41:31 +02:00
setup_64.c x86: Centaur Isaiah processor to use sysenter in 64-bit compatibility mode rather than syscall 2008-04-17 17:41:31 +02:00
setup.c x86: use specialized routine for setup per-cpu area 2008-04-17 17:41:01 +02:00
sigframe.h x86: move struct definitions to unifed sigframe.h 2008-04-17 17:40:46 +02:00
signal_32.c x86: replace most VM86 flags with flags from processor-flags.h 2008-04-17 17:41:33 +02:00
signal_64.c x86: remove DEBUG_SIG 2008-04-17 17:40:57 +02:00
smp.c x86: move ipi definitions to mach_ipi.h 2008-04-17 17:41:30 +02:00
smpboot.c x86: support for new UV apic 2008-04-17 17:41:33 +02:00
smpcommon_32.c x86: create smpcommon.c 2008-04-17 17:40:55 +02:00
smpcommon.c x86: create smpcommon.c 2008-04-17 17:40:55 +02:00
srat_32.c x86: replace remaining __FUNCTION__ occurances 2008-04-17 17:40:57 +02:00
stacktrace.c x86: don't save unreliable stack trace entries 2008-02-26 12:55:58 +01:00
step.c x86: prevent unconditional writes to DebugCtl MSR 2008-04-17 17:40:58 +02:00
summit_32.c x86: move mp_bus_id_to_node to numa.c 2008-04-17 17:40:59 +02:00
sys_i386_32.c
sys_x86_64.c
syscall_64.c x86: coding style fixes to arch/x86/kernel/syscall_64.c 2008-04-17 17:40:48 +02:00
syscall_table_32.S
tce_64.c
test_nx.c x86: Explicitly include required header files. 2008-04-17 17:41:15 +02:00
test_rodata.c x86: include proper prototypes for rodata_test 2008-02-14 23:30:20 +01:00
time_32.c
time_64.c
tlb_32.c x86: create tlb files 2008-04-17 17:40:56 +02:00
tlb_64.c x86: move ipi definitions to mach_ipi.h 2008-04-17 17:41:30 +02:00
tls.c asmlinkage_protect replaces prevent_tail_call 2008-04-10 17:28:26 -07:00
tls.h
topology.c x86: fix section mismatch warning in topology.c:arch_register_cpu 2008-02-19 16:18:30 +01:00
trampoline_32.S
trampoline_64.S
traps_32.c x86: cleanup - rename VM_MASK to X86_VM_MASK 2008-04-17 17:41:33 +02:00
traps_64.c x86: wipe get_nmi_reason out of nmi_64.h 2008-04-17 17:41:01 +02:00
tsc_32.c x86: if we cannot calibrate the TSC, we panic. 2008-04-17 17:40:52 +02:00
tsc_64.c x86: fix call to set_cyc2ns_scale() from time_cpufreq_notifier() 2008-04-07 21:09:14 +02:00
tsc_sync.c
verify_cpu_64.S
vm86_32.c x86: replace most VM86 flags with flags from processor-flags.h 2008-04-17 17:41:33 +02:00
vmi_32.c
vmiclock_32.c
vmlinux_32.lds.S x86: use ELF section to list CPU vendor specific code 2008-04-17 17:40:47 +02:00
vmlinux_64.lds.S x86: use ELF section to list CPU vendor specific code 2008-04-17 17:40:47 +02:00
vmlinux.lds.S
vsmp_64.c x86: clean up vSMP detection 2008-04-17 17:41:29 +02:00
vsyscall_64.c x86: restore vsyscall64 prochandler 2008-02-29 18:55:39 +01:00
x8664_ksyms_64.c x86: coding style fixes to arch/x86/kernel/x8664_ksyms_64.c 2008-04-17 17:40:48 +02:00