linux/arch/mips/mm
Kevin Cernekee 0f334a3e8c 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>
2009-11-02 12:00:04 +01:00
..
Makefile MIPS: Add support files for hugetlbfs. 2009-06-17 11:06:30 +01:00
c-octeon.c cpumask: use mm_cpumask() wrapper: mips 2009-09-24 09:34:51 +09:30
c-r3k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
c-r4k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
c-tx39.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
cache.c MIPS: CVE-2009-0029: Enable syscall wrappers. 2009-02-27 17:56:35 +00:00
cerr-sb1.c [MIPS] Sibyte: Replace use of removed IO_SPACE_BASE with IOADDR. 2007-11-15 23:21:49 +00:00
cex-gen.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cex-oct.S MIPS: Add Cavium OCTEON processor support files to arch/mips/cavium-octeon. 2009-01-11 09:57:21 +00:00
cex-sb1.S [MIPS] Fix loads of section missmatches 2008-03-12 14:14:41 +00:00
dma-default.c MIPS: Pass struct device to plat_dma_addr_to_phys() 2009-06-17 11:06:24 +01:00
extable.c MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
fault.c MIPS: Don't corrupt page tables on vmalloc fault. 2009-09-17 20:07:52 +02:00
highmem.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
hugetlbpage.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
init.c MIPS: Fix machine check exception in kmap_coherent() 2009-11-02 12:00:04 +01:00
ioremap.c MIPS: Use BUG_ON() where possible. 2009-03-30 14:49:44 +02:00
page.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
pgtable-32.c [MIPS] Add external declaration of pagetable_init() to pgalloc.h 2007-02-18 21:31:36 +00:00
pgtable-64.c MIPS: Shrink the size of tlb handler 2009-09-17 20:07:51 +02:00
sc-ip22.c MIPS: IP22: Make indy_sc_ops variable static 2008-11-20 19:42:33 +00:00
sc-mips.c MIPS: MIPSxx SC: Avoid destructive invalidation on partial L2 cachelines. 2009-09-30 21:47:00 +02:00
sc-r5k.c [MIPS] Fix loads of section missmatches 2008-03-12 14:14:41 +00:00
sc-rm7k.c MIPS: IP32: Two symbols can become static 2009-05-14 13:50:24 +01:00
tlb-r3k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
tlb-r4k.c MIPS: Remove useless zero initializations. 2009-09-17 20:07:51 +02:00
tlb-r8k.c MIPS: Build fix - include <linux/smp.h> into all smp_processor_id() users. 2009-06-24 18:34:39 +01:00
tlbex-fault.S [MIPS] Stacktrace build-fix and improvement 2006-10-01 23:16:58 +01:00
tlbex.c MIPS: BCM63xx: Add Broadcom 63xx CPU definitions. 2009-09-17 20:07:52 +02:00
uasm.c [MIPS] Make two functions static 2008-07-15 18:44:29 +01:00
uasm.h [MIPS] Make two functions static 2008-07-15 18:44:29 +01:00