linux/arch/sparc/mm
Peter Zijlstra 20273941f2 mm: fix race in kunmap_atomic()
Christoph reported a nice splat which illustrated a race in the new stack
based kmap_atomic implementation.

The problem is that we pop our stack slot before we're completely done
resetting its state -- in particular clearing the PTE (sometimes that's
CONFIG_DEBUG_HIGHMEM).  If an interrupt happens before we actually clear
the PTE used for the last slot, that interrupt can reuse the slot in a
dirty state, which triggers a BUG in kmap_atomic().

Fix this by introducing kmap_atomic_idx() which reports the current slot
index without actually releasing it and use that to find the PTE and delay
the _pop() until after we're completely done.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Reported-by: Christoph Hellwig <hch@infradead.org>
Acked-by: Rik van Riel <riel@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-10-27 18:03:05 -07:00
..
btfixup.c sparc: remove CONFIG_SUN4 2008-08-31 20:59:37 -07:00
extable.c module: trim exception table on init free. 2009-06-12 21:47:04 +09:30
fault_32.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6 2010-03-02 07:56:44 -08:00
fault_64.c sparc: Support show_unhandled_signals. 2010-03-01 00:02:23 -08:00
generic_32.c sparc: move EXPORT_SYMBOL to the symbols definition 2009-01-08 16:58:05 -08:00
generic_64.c sparc64: move EXPORT_SYMBOL to the symbols definition 2009-01-08 16:58:20 -08:00
highmem.c mm: fix race in kunmap_atomic() 2010-10-27 18:03:05 -07:00
hugetlbpage.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
hypersparc.S sparc: remove CVS keywords 2008-05-20 00:33:44 -07:00
init_32.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
init_64.c Merge branch 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6 2010-10-25 08:19:14 -07:00
init_64.h sparc64: Fix definition of VMEMMAP_SIZE. 2009-11-23 16:38:56 -08:00
io-unit.c sparc: remove references to of_device and to_of_device 2010-07-24 09:58:22 -06:00
iommu.c Merge branch 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6 2010-08-05 15:57:35 -07:00
leon_mm.c sparc,leon: CONFIG_SPARC_LEON option and leon specific files. 2009-08-17 18:32:09 -07:00
loadmmu.c sparc,leon: Introduce the sparc-leon CPU type. 2009-08-17 18:32:10 -07:00
Makefile sparc,leon: Introduce the sparc-leon CPU type. 2009-08-17 18:32:10 -07:00
nosun4c.c MM: Pass a PTE pointer to update_mmu_cache() rather than the PTE itself 2010-02-20 16:41:46 +00:00
srmmu.c of/sparc: convert various prom_* functions to use phandle 2010-10-09 02:33:34 -06:00
sun4c.c of/sparc: convert various prom_* functions to use phandle 2010-10-09 02:33:34 -06:00
swift.S sparc: remove CVS keywords 2008-05-20 00:33:44 -07:00
tlb.c sparc,sparc64: unify mm/ 2008-12-04 09:16:59 -08:00
tsb.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
tsunami.S sparc/mm/: possible cleanups 2008-07-17 21:38:01 -07:00
ultra.S sparc64: Reschedule KGDB capture to a software interrupt. 2009-03-18 23:51:57 -07:00
viking.S sparc: remove CVS keywords 2008-05-20 00:33:44 -07:00