:> :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