>The attached program sometimes causes a lockmgr panic. I do not think is always
>did. I am running 4.0-CURRENT form Feb 19.
>
>The trace is:
>        panic lockmgr: locking against self
>        lockmgr
>        mv_map_growstack
>        grow_stack
>        trap_pfault
>        trap
>        calltrap
>        subyte
>        syscall
>        ...
>        
>A command on a running image such as this usually does it, though I do not 
>know what
>conditions are neccessary:
>
>        fincore /usr/local/netscape-4.5/communicator-4.5.bin

Here is a simpler example.

---
#include <sys/param.h>
#include <sys/mman.h>

#include <err.h>
#include <stdlib.h>

#define SIZE            (32 * 1024 * 1024)

int
main(void)
{
        void *p;
        char vec[SIZE / PAGE_SIZE];

        p = malloc(SIZE);
        if (mincore(p, SIZE, vec) != 0)
                err(1, "mincore");
        return (0);
}
---

mincore() locks the vmspace map, and initialises vec[] a byte at a time
using subyte().  When vec[] is sufficiently large, it is not all in core
initially and a page fault occurs in subyte().  The new stack growing
code locks the vmspace map early and panics.

Bruce


To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-current" in the body of the message

Reply via email to