linux/arch
Suresh Siddha 84ac7cdbdd x86, mtrr, pat: Fix one cpu getting out of sync during resume
On laptops with core i5/i7, there were reports that after resume
graphics workloads were performing poorly on a specific AP, while
the other cpu's were ok. This was observed on a 32bit kernel
specifically.

Debug showed that the PAT init was not happening on that AP
during resume and hence it contributing to the poor workload
performance on that cpu.

On this system, resume flow looked like this:

1. BP starts the resume sequence and we reinit BP's MTRR's/PAT
   early on using mtrr_bp_restore()

2. Resume sequence brings all AP's online

3. Resume sequence now kicks off the MTRR reinit on all the AP's.

4. For some reason, between point 2 and 3, we moved from BP
   to one of the AP's. My guess is that printk() during resume
   sequence is contributing to this. We don't see similar
   behavior with the 64bit kernel but there is no guarantee that
   at this point the remaining resume sequence (after AP's bringup)
   has to happen on BP.

5. set_mtrr() was assuming that we are still on BP and skipped the
   MTRR/PAT init on that cpu (because of 1 above)

6. But we were on an AP and this led to not reprogramming PAT
   on this cpu leading to bad performance.

Fix this by doing unconditional mtrr_if->set_all() in set_mtrr()
during MTRR/PAT init. This might be unnecessary if we are still
running on BP. But it is of no harm and will guarantee that after
resume, all the cpu's will be in sync with respect to the
MTRR/PAT registers.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <1301438292-28370-1-git-send-email-eric@anholt.net>
Signed-off-by: Eric Anholt <eric@anholt.net>
Tested-by: Keith Packard <keithp@keithp.com>
Cc: stable@kernel.org	[v2.6.32+]
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2011-03-29 16:17:42 -07:00
..
alpha remove dma64_addr_t 2011-03-23 19:47:18 -07:00
arm ARM: mx51_efika: fix build error due to new mfd changes 2011-03-28 17:51:17 -07:00
avr32 Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-25 20:24:05 -07:00
blackfin Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin 2011-03-24 08:24:28 -07:00
cris Merge branch 'for-linus' of git://www.jni.nu/cris 2011-03-28 15:44:06 -07:00
frv bitops: remove minix bitops from asm/bitops.h 2011-03-23 19:46:22 -07:00
h8300 Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-25 20:24:05 -07:00
ia64 lib, arch: add filter argument to show_mem and fix private implementations 2011-03-24 17:49:37 -07:00
m32r Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-25 20:24:05 -07:00
m68k m68k: merge m68k and m68knommu arch directories 2011-03-25 14:05:13 +10:00
microblaze bitops: introduce CONFIG_GENERIC_FIND_BIT_LE 2011-03-23 19:46:14 -07:00
mips MIPS: JZ4740: Set nand ecc offsets for the qi_lb60 board 2011-03-25 18:45:21 +01:00
mn10300 Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-mn10300 2011-03-24 10:07:50 -07:00
parisc lib, arch: add filter argument to show_mem and fix private implementations 2011-03-24 17:49:37 -07:00
powerpc powerpc: cell: Use the core flow handler 2011-03-28 16:55:11 +02:00
s390 Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6 2011-03-25 17:47:04 -07:00
score score: Use generic show_interrupts() 2011-03-28 12:03:35 +08:00
sh Merge branch 'rmobile-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2011-03-24 10:04:59 -07:00
sparc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6 2011-03-25 17:47:38 -07:00
tile Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-27 20:58:56 -07:00
um um: Use generic show_interrupts() 2011-03-24 20:35:57 +01:00
unicore32 lib, arch: add filter argument to show_mem and fix private implementations 2011-03-24 17:49:37 -07:00
x86 x86, mtrr, pat: Fix one cpu getting out of sync during resume 2011-03-29 16:17:42 -07:00
xtensa Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-03-25 20:24:05 -07:00
.gitignore
Kconfig oprofile, s390: Cleanups 2011-03-16 14:30:40 +01:00