Losing pages from a mmap in threaded app vs. non-threaded
Daniel Eischen
eischen at vigrid.com
Wed Nov 19 13:24:48 PST 2003
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.
--
Dan Eischen
More information about the freebsd-threads
mailing list