]> git.baikalelectronics.ru Git - kernel.git/commit
MTRR: Fix race causing set_mtrr to go into infinite loop
authorLoic Prylli <loic@myri.com>
Fri, 6 Jul 2007 09:39:52 +0000 (02:39 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Fri, 6 Jul 2007 17:23:43 +0000 (10:23 -0700)
commit456897964fd26f5bc55e7e40288976f6c945c456
tree105a72189d2783bfbca1ffda4f5ebf968ac69496
parentdc1b7abb4c5c69e14cf16d4f39d8fa99af8adb46
MTRR: Fix race causing set_mtrr to go into infinite loop

Processors synchronization in set_mtrr requires the .gate field to be set
after .count field is properly initialized.  Without an explicit barrier,
the compiler was reordering those memory stores.  That was sometimes
causing a processor (in ipi_handler) to see the .gate change and decrement
.count before the latter is set by set_mtrr() (which then hangs in a
infinite loop with irqs disabled).

Signed-off-by: Loic Prylli <loic@myri.com>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/i386/kernel/cpu/mtrr/main.c