linux/arch/unicore32/mm
Kirill A. Shutemov b30fe6c7ce mm: fix false-positive warning on exit due mm_nr_pmds(mm)
The problem is that we check nr_ptes/nr_pmds in exit_mmap() which happens
*before* pgd_free().  And if an arch does pte/pmd allocation in
pgd_alloc() and frees them in pgd_free() we see offset in counters by the
time of the checks.

We tried to workaround this by offsetting expected counter value according
to FIRST_USER_ADDRESS for both nr_pte and nr_pmd in exit_mmap().  But it
doesn't work in some cases:

1. ARM with LPAE enabled also has non-zero USER_PGTABLES_CEILING, but
   upper addresses occupied with huge pmd entries, so the trick with
   offsetting expected counter value will get really ugly: we will have
   to apply it nr_pmds, but not nr_ptes.

2. Metag has non-zero FIRST_USER_ADDRESS, but doesn't do allocation
   pte/pmd page tables allocation in pgd_alloc(), just setup a pgd entry
   which is allocated at boot and shared accross all processes.

The proposal is to move the check to check_mm() which happens *after*
pgd_free() and do proper accounting during pgd_alloc() and pgd_free()
which would bring counters to zero if nothing leaked.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Reported-by: Tyler Baker <tyler.baker@linaro.org>
Tested-by: Tyler Baker <tyler.baker@linaro.org>
Tested-by: Nishanth Menon <nm@ti.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-02-11 17:06:04 -08:00
..
alignment.c arch/unicore32/mm/alignment.c: include "asm/pgtable.h" to avoid compiling error 2014-06-20 08:22:38 +08:00
cache-ucv2.S unicore32 core architecture: mm related: consistent device DMA handling 2011-03-17 09:19:09 +08:00
dma-swiotlb.c Unicore32: adapt for dma_map_ops changes 2012-03-28 16:36:39 +02:00
extable.c unicore32 core architecture: mm related: fault handling 2011-03-17 09:19:09 +08:00
fault.c arch: mm: pass userspace fault flag to generic fault handler 2013-09-12 15:38:01 -07:00
flush.c Disintegrate asm/system.h for Unicore32 [based on ver #3, changed by gxt] 2012-03-28 18:30:03 +01:00
init.c mm, show_mem: remove SHOW_MEM_FILTER_PAGE_COUNT 2014-01-21 16:19:44 -08:00
ioremap.c arch/unicore32/mm/ioremap.c: return NULL on invalid pfn 2014-06-04 16:53:53 -07:00
Kconfig unicore32 core architecture: mm related: generic codes 2011-03-17 09:19:08 +08:00
Makefile unicore32: replace unicore32-specific iomap functions with generic lib implementation 2011-03-17 09:19:21 +08:00
mm.h Disintegrate asm/system.h for Unicore32 [based on ver #3, changed by gxt] 2012-03-28 18:30:03 +01:00
mmu.c reboot: unicore32: prepare reboot_mode for moving to generic kernel code 2013-07-09 10:33:29 -07:00
pgd.c mm: fix false-positive warning on exit due mm_nr_pmds(mm) 2015-02-11 17:06:04 -08:00
proc-macros.S unicore32 core architecture: processor and system headers 2011-03-17 09:19:06 +08:00
proc-syms.c arch: unicore32: ksyms: export '__cpuc_coherent_kern_range' to avoid compiling failure 2014-06-20 08:22:41 +08:00
proc-ucv2.S unicore32 core architecture: processor and system headers 2011-03-17 09:19:06 +08:00
tlb-ucv2.S unicore32 core architecture: mm related: consistent device DMA handling 2011-03-17 09:19:09 +08:00