Losing pages from a mmap in threaded app vs. non-threaded
Sean McNeil
sean at mcneil.com
Wed Nov 19 13:26:27 PST 2003
OK, would this happen to be 8 pages typically?
On Wed, 2003-11-19 at 13:24, Daniel Eischen wrote:
> On Wed, 19 Nov 2003, Sean McNeil wrote:
>
> > Hello all,
> >
> > I have an interesting problem. I've ported a device driver to FreeBSD
> > from Linux and all works just fine with the non-threaded application.
> > When I use threads, the first 8 pages of the map get removed from the
> > process vmspace.
> >
> > A trick is used to mmap different memory pools of the driver. There are
> > 3 of them and an offset is given to mmap to identify which one:
> >
> > 0x10000000
> > 0x20000000
> > 0x40000000
> >
> > The buffer I see losing the first 8 pages is the one mmap'd with
> >
> > 0x40000000
> >
> > I haven't looked into the other mmaps, as the above one is the most
> > important. mmap is called correctly and each page is returned
> > appropriately. Again, this works without threads.
> >
> > Is there some mmap region that threads uses that is conflicting with my
> > choice? Is there any known issue with mmap and threads? This problem
> > happens with libc_r.so, libkse.so, and libthr.so.
> >
> > The work I'm doing is split into driver/application and turnaround is
> > high to get the application people to recompile with different values
> > (in progress), so I thought asking here might answer my question sooner
> > than experimentation.
> >
> > All comments/replies are greatly appreciated,
> > Sean
>
> The thread libraries use mmap to map kern.usrstack as
> thread stacks and guard pages. I don't know how this
> would affect your driver.
More information about the freebsd-threads
mailing list