linux/arch
Suresh Siddha d0af9eed5a x86, pat/mtrr: Rendezvous all the cpus for MTRR/PAT init
SDM Vol 3a section titled "MTRR considerations in MP systems" specifies
the need for synchronizing the logical cpu's while initializing/updating
MTRR.

Currently Linux kernel does the synchronization of all cpu's only when
a single MTRR register is programmed/updated. During an AP online
(during boot/cpu-online/resume)  where we initialize all the MTRR/PAT registers,
we don't follow this synchronization algorithm.

This can lead to scenarios where during a dynamic cpu online, that logical cpu
is initializing MTRR/PAT with cache disabled (cr0.cd=1) etc while other logical
HT sibling continue to run (also with cache disabled because of cr0.cd=1
on its sibling).

Starting from Westmere, VMX transitions with cr0.cd=1 don't work properly
(because of some VMX performance optimizations) and the above scenario
(with one logical cpu doing VMX activity and another logical cpu coming online)
can result in system crash.

Fix the MTRR initialization by doing rendezvous of all the cpus. During
boot and resume, we delay the MTRR/PAT init for APs till all the
logical cpu's come online and the rendezvous process at the end of AP's bringup,
will initialize the MTRR/PAT for all AP's.

For dynamic single cpu online, we synchronize all the logical cpus and
do the MTRR/PAT init on the AP that is coming online.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2009-08-21 16:25:55 -07:00
..
alpha alpha: fix percpu build breakage 2009-06-30 18:55:59 -07:00
arm [ARM] 5562/2: at91: add gpio button support for at91sam9g20ek 2009-06-29 11:19:27 +01:00
avr32 Move FAULT_FLAG_xyz into handle_mm_fault() callers 2009-06-21 13:08:22 -07:00
blackfin Blackfin: fix dma-mapping build errors 2009-06-22 22:31:00 -04:00
cris Merge branch 'for-linus' of git://www.jni.nu/cris 2009-06-23 10:47:01 -07:00
frv FRV: Add basic performance counter support 2009-07-01 19:38:31 -07:00
h8300 h8/300: fix incorrect "select" directives in arch/h8300/Kconfig.cpu. 2009-06-23 12:50:05 -07:00
ia64 [IA64] address compiler warnings perfmon.c/salinfo.c 2009-06-30 14:26:34 -07:00
m32r Move FAULT_FLAG_xyz into handle_mm_fault() callers 2009-06-21 13:08:22 -07:00
m68k Move FAULT_FLAG_xyz into handle_mm_fault() callers 2009-06-21 13:08:22 -07:00
m68knommu ptrace: remove PT_DTRACE from m68k, m68knommu 2009-06-18 13:03:48 -07:00
microblaze Move FAULT_FLAG_xyz into handle_mm_fault() callers 2009-06-21 13:08:22 -07:00
mips MIPS: Cavium: Add CPU hotplugging code. 2009-06-24 18:34:40 +01:00
mn10300 MN10300: Wire up new syscalls 2009-06-30 18:58:37 -07:00
parisc Move FAULT_FLAG_xyz into handle_mm_fault() callers 2009-06-21 13:08:22 -07:00
powerpc Merge branch 'perfcounters-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-06-30 19:02:59 -07:00
s390 KVM: s390: Allow stfle instruction in the guest 2009-06-28 14:10:30 +03:00
sh sh: Fix compiler error and include the definition of IS_ERR_VALUE 2009-07-02 03:32:48 +09:00
sparc sparc32: Fix makefile not generating required files 2009-06-25 19:56:02 -07:00
um UML: Fix some apparent bitrot 2009-06-25 11:22:13 -07:00
x86 x86, pat/mtrr: Rendezvous all the cpus for MTRR/PAT init 2009-08-21 16:25:55 -07:00
xtensa xtensa: enable m41t80 driver in s6105_defconfig 2009-06-22 02:38:11 -07:00
.gitignore
Kconfig gcov: add gcov profiling infrastructure 2009-06-18 13:03:57 -07:00