diff options
author | Kirill A. Shutemov <[email protected]> | 2015-02-11 15:26:53 -0800 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2015-02-11 17:06:04 -0800 |
commit | b30fe6c7ced70f62862c3d09357e7e8084e98d9f (patch) | |
tree | 317c0298b2111b342e1ff031b5da5aad2b894c00 /net/lapb/lapb_subr.c | |
parent | dc6c9a35b66b520cf67e05d8ca60ebecad3b0479 (diff) |
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 <[email protected]>
Reported-by: Tyler Baker <[email protected]>
Tested-by: Tyler Baker <[email protected]>
Tested-by: Nishanth Menon <[email protected]>
Cc: Russell King <[email protected]>
Cc: James Hogan <[email protected]>
Cc: Guan Xuetao <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'net/lapb/lapb_subr.c')
0 files changed, 0 insertions, 0 deletions