:> :MAXALLOCSAVE = 2 pages) when there is a lot of fork() activity.
:
:>     Ahh.  I presume you will commit this patch now that Bjoern has
:>     confirmed that it works?
:
:Not until the reason that it works is understood.
:
:>     I don't know why an unconditional invltlb() didn't work either,
:>     it should have.  Maybe the __asm macro is being optimized out.
:
:I verified that the unconditional invtlb() doesn't work.  Better yet,
:replacing the invltlb_1pg() in the loop doesn't work.  I think this
:means that we've changed the page tables too early for a page elsewhere.
:
:Bruce

    Ok, lets narrow it down - if we can panic the kernel with a dup2()
    then the problem should reside in the fdalloc() chain somewhere.

    fdalloc() uses MALLOC(), bcopy, and bzero to reallocate the 
    chain.

    Due to the way fdalloc() works, we are multiplying nfiles by 2
    and reallocating the array in a loop until we reach the file
    descriptor number we want.  (BTW, this will seriously fragment
    the MALLOC pool!).

    We also are MALLOC()ing space that is oddly sized, due to
    OFILESDIZE being (sizeof(struct file *) + sizeof(char)).

    Well, this tells me there is a fairly good chance that we are
    hitting a bug in the kernel MALLOC somewhere related to the kernel
    pmap, or a bug in fdalloc().  I'll take a close look at both.  That
    is where I recommend we start.

                                        -Matt
                                        Matthew Dillon 
                                        <[EMAIL PROTECTED]>



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to