Message ID | 20150124011311.GB9038@node.dhcp.inet.fi (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 03:13-20150124, Kirill A. Shutemov wrote: > > >> On 09:39-20150123, Tyler Baker wrote: [...] > > >> > I just reviewed the boot logs for next-20150123 and there still seems > > >> > to be a related issue. I've been boot testing > > >> > multi_v7_defconfig+CONFIG_ARM_LPAE=y kernel configurations which still > > >> > seem broken. [...] > Okay, proof of concept patch is below. It's going to break every other > architecture with FIRST_USER_ADDRESS != 0, but I think it's cleaner way to > go. Testing on my end: just ran through this set (+ logs similar to Tyler's from my side): next-20150123 (multi_v7_defconfig == !LPAE) 1: BeagleBoard-X15(am57xx-evm): BOOT: PASS: http://paste.ubuntu.org.cn/2219449 2: dra72x-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2219450 3: dra7xx-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2219451 4: omap5-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2219452 TOTAL = 4 boards, Booted Boards = 4, No Boot boards = 0 next-20150123-LPAE-Logging enabled[1] (multi_v7_defconfig +LPAE) 1: BeagleBoard-X15(am57xx-evm): BOOT: FAIL: http://paste.ubuntu.org.cn/2220938 2: dra72x-evm: BOOT: FAIL: http://paste.ubuntu.org.cn/2220943 3: dra7xx-evm: BOOT: FAIL: http://paste.ubuntu.org.cn/2220947 4: omap5-evm: BOOT: FAIL: http://paste.ubuntu.org.cn/2220955 TOTAL = 4 boards, Booted Boards = 0, No Boot boards = 4 next-20150123-LPAE-new-patch [2] (multi_v7_defconfig + LPAE) 1: BeagleBoard-X15(am57xx-evm): BOOT: PASS: http://paste.ubuntu.org.cn/2221047 2: dra72x-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221065 3: dra7xx-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221069 4: omap5-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221070 TOTAL = 4 boards, Booted Boards = 4, No Boot boards = 0 next-20150123-new-patch[2] (multi_v7_defconfig == !LPAE) 1: am335x-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221277 2: am335x-sk: BOOT: PASS: http://paste.ubuntu.org.cn/2221278 3: am437x-sk: BOOT: FAIL: http://paste.ubuntu.org.cn/2221279 (unrelated) 4: am43xx-epos: BOOT: PASS: http://paste.ubuntu.org.cn/2221280 5: am43xx-gpevm: BOOT: PASS: http://paste.ubuntu.org.cn/2221281 6: BeagleBoard-X15(am57xx-evm): BOOT: PASS: http://paste.ubuntu.org.cn/2221282 7: BeagleBoard-XM: BOOT: FAIL: http://paste.ubuntu.org.cn/2221283 (unrelated) 8: beagleboard-vanilla: BOOT: PASS: http://paste.ubuntu.org.cn/2221284 9: beaglebone-black: BOOT: PASS: http://paste.ubuntu.org.cn/2221285 10: beaglebone: BOOT: FAIL: http://paste.ubuntu.org.cn/2221286 (unrelated) 11: dra72x-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221287 12: dra7xx-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221288 13: omap5-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221289 14: pandaboard-es: BOOT: PASS: http://paste.ubuntu.org.cn/2221290 15: pandaboard-vanilla: BOOT: PASS: http://paste.ubuntu.org.cn/2221291 16: sdp4430: BOOT: PASS: http://paste.ubuntu.org.cn/2221292 TOTAL = 16 boards, Booted Boards = 13, No Boot boards = 3 next-20150123-new-patch[2] (omap2plus_defconfig) 1: am335x-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221653 2: am335x-sk: BOOT: PASS: http://paste.ubuntu.org.cn/2221654 3: am437x-sk: BOOT: PASS: http://paste.ubuntu.org.cn/2221656 4: am43xx-epos: BOOT: PASS: http://paste.ubuntu.org.cn/2221659 5: am43xx-gpevm: BOOT: PASS: http://paste.ubuntu.org.cn/2221660 6: BeagleBoard-X15(am57xx-evm): BOOT: PASS: http://paste.ubuntu.org.cn/2221661 7: BeagleBoard-XM: BOOT: PASS: http://paste.ubuntu.org.cn/2221670 8: beagleboard-vanilla: BOOT: PASS: http://paste.ubuntu.org.cn/2221676 9: beaglebone-black: BOOT: PASS: http://paste.ubuntu.org.cn/2221683 10: beaglebone: BOOT: PASS: http://paste.ubuntu.org.cn/2221690 11: dra72x-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221692 12: dra7xx-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221695 13: omap5-evm: BOOT: PASS: http://paste.ubuntu.org.cn/2221700 14: pandaboard-es: BOOT: PASS: http://paste.ubuntu.org.cn/2221704 15: pandaboard-vanilla: BOOT: PASS: http://paste.ubuntu.org.cn/2221707 16: sdp4430: BOOT: PASS: http://paste.ubuntu.org.cn/2221713 TOTAL = 16 boards, Booted Boards = 16, No Boot boards = 0 [1] http://paste.ubuntu.org.cn/2220994 (based on diff from Tyler B) [2] https://patchwork.kernel.org/patch/5698491/
diff --git a/arch/arm/mm/pgd.c b/arch/arm/mm/pgd.c index 249379535be2..c3ec18d9bbb9 100644 --- a/arch/arm/mm/pgd.c +++ b/arch/arm/mm/pgd.c @@ -130,9 +130,11 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd_base) pte = pmd_pgtable(*pmd); pmd_clear(pmd); pte_free(mm, pte); + atomic_long_dec(&mm->nr_ptes); no_pmd: pud_clear(pud); pmd_free(mm, pmd); + mm_dec_nr_pmds(mm); no_pud: pgd_clear(pgd); pud_free(mm, pud); @@ -152,6 +154,7 @@ no_pgd: pmd = pmd_offset(pud, 0); pud_clear(pud); pmd_free(mm, pmd); + mm_dec_nr_pmds(mm); pgd_clear(pgd); pud_free(mm, pud); } diff --git a/kernel/fork.c b/kernel/fork.c index c99098c52641..0a6f0a380335 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -599,6 +599,13 @@ static void check_mm(struct mm_struct *mm) { int i; + if (atomic_long_read(&mm->nr_ptes)) + pr_alert("BUG: non-zero nr_ptes on freeing mm: %ld", + atomic_long_read(&mm->nr_ptes)); + if (mm_nr_pmds(mm)) + pr_alert("BUG: non-zero nr_pmds on freeing mm: %ld", + mm_nr_pmds(mm)); + for (i = 0; i < NR_MM_COUNTERS; i++) { long x = atomic_long_read(&mm->rss_stat.count[i]); diff --git a/mm/mmap.c b/mm/mmap.c index 6a7d36d133fb..c5f44682c0d1 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2851,11 +2851,6 @@ void exit_mmap(struct mm_struct *mm) vma = remove_vma(vma); } vm_unacct_memory(nr_accounted); - - WARN_ON(atomic_long_read(&mm->nr_ptes) > - round_up(FIRST_USER_ADDRESS, PMD_SIZE) >> PMD_SHIFT); - WARN_ON(mm_nr_pmds(mm) > - round_up(FIRST_USER_ADDRESS, PUD_SIZE) >> PUD_SHIFT); } /* Insert vm structure into process list sorted by address