summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-ks8695/include/mach
diff options
context:
space:
mode:
authorKevin Cernekee <cernekee@gmail.com>2009-09-07 20:11:31 +0200
committerRalf Baechle <ralf@linux-mips.org>2009-11-02 12:00:04 +0100
commit0f334a3e8c3586f81286345eb077ed32b375e8d6 (patch)
tree02278a0f6ef99b43c56af12ba44d964f099c70c3 /arch/arm/mach-ks8695/include/mach
parentMIPS: MTX-1: Fix build if CONFIG_PCI is disabled. (diff)
downloadlinux-0f334a3e8c3586f81286345eb077ed32b375e8d6.tar.xz
linux-0f334a3e8c3586f81286345eb077ed32b375e8d6.zip
MIPS: Fix machine check exception in kmap_coherent()
On an SMP system with cache aliases, the following sequence of events may happen: 1) copy_user_highpage() runs on CPU0, invoking kmap_coherent() to create a temporary mapping in the fixmap region 2) copy_page() starts on CPU0 3) CPU1 sends CPU0 an IPI asking CPU0 to run local_r4k_flush_cache_page() 4) CPU0 takes the interrupt, interrupting copy_page() 5) local_r4k_flush_cache_page() on CPU0 calls kmap_coherent() again 6) The second invocation of kmap_coherent() on CPU0 tries to use the same fixmap virtual address that was being used by copy_user_highpage() 7) CPU0 throws a machine check exception for the TLB address conflict Fixed by creating an extra set of fixmap entries for use in interrupt handlers. This prevents fixmap VA conflicts between copy_user_highpage() running in user context, and local_r4k_flush_cache_page() invoked from an SMP IPI. Signed-off-by: Kevin Cernekee <cernekee@gmail.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/arm/mach-ks8695/include/mach')
0 files changed, 0 insertions, 0 deletions