lkml.org 
[lkml]   [2005]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 1/5] freepgt: free_pgtables use vma list
    On Tue, 22 Mar 2005, Andrew Morton wrote:
    >
    > With these six patches the ppc64 is hitting the BUG in exit_mmap():
    >
    > BUG_ON(mm->nr_ptes); /* This is just debugging */
    >
    > fairly early in boot.

    So ppc64 is in the same boat as sparc64 (yet ia64 okay so far).

    Sorry, I'm still clueless.

    I cannot see those arches doing pte_allocs outside their vmas,
    that of course could cause it. And nr_ptes is initialized to 0
    once by memset and again by assignment, so it should be starting
    out even zeroer than most fields.

    I should probably be paying more attention to the repellent
    notion that my code is broken.

    If you and David could try the lame patch below,
    it'll at least give us a slight clue of where to be looking -
    every mm exiting with nr_ptes 1 means something different from
    every mm exiting with nr_ptes -1 means something different from
    occasional mms exiting with nr_ptes something positive.

    I'm not sure whether the patch would ever get to show a more
    interesting proc name than "?".

    And does memory leak away into lost pagetables if you continue
    running, or does it actually carry on running fine, and the
    problem appear to be with the BUG_ON itself?

    Thanks,
    Hugh

    --- freepgt6/mm/mmap.c 2005-03-22 04:28:40.000000000 +0000
    +++ testing/mm/mmap.c 2005-03-22 15:45:00.000000000 +0000
    @@ -1896,6 +1896,7 @@ EXPORT_SYMBOL(do_brk);
    /* Release all mmaps. */
    void exit_mmap(struct mm_struct *mm)
    {
    + static unsigned long good_mms, bad_mms;
    struct mmu_gather *tlb;
    struct vm_area_struct *vma = mm->mmap;
    unsigned long nr_accounted = 0;
    @@ -1931,7 +1932,14 @@ void exit_mmap(struct mm_struct *mm)
    vma = next;
    }

    - BUG_ON(mm->nr_ptes); /* This is just debugging */
    + if (mm->nr_ptes && bad_mms < 250) {
    + printk(KERN_ERR "exit_mmap: %s nr_ptes %ld good_mms %lu\n",
    + current->mm == mm? current->comm: "?",
    + (long)mm->nr_ptes, good_mms);
    + good_mms = 0;
    + bad_mms++;
    + } else
    + good_mms++;
    }

    /* Insert vm structure into process list sorted by address
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-04-06 13:30    [W:0.026 / U:59.936 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site