On Wed, Oct 21, 2020 at 04:53:11PM +0300, Nick Kostirya via freebsd-stable
wrote:> Hello.
> I have question about mmap.
>
> void *OSMem::AllocateDataArea(size_t &space)
> {
> // Round up to an integral number of pages.
> space = (space + pageSize-1) & ~(pageSize-1);
> int fd = -1; // This value is required by FreeBSD. Linux doesn't
care
> int flags = MAP_PRIVATE | MAP_ANON;
> #ifdef MAP_STACK
> if (memUsage == UsageStack) flags |= MAP_STACK; // OpenBSD seems to
require this
> #endif
> void *result = mmap(0, space, PROT_READ|PROT_WRITE, flags, fd, 0);
> // Convert MAP_FAILED (-1) into NULL
> if (result == MAP_FAILED)
> return 0;
> return result;
> }
>
>
> When MAP_STACK is used, "insufficient memory" error occurs.
> When MAP_STACK removed, it is all right.
>
> Please tell me why.
Show ktrace/kdump output of the mmap(2) without and with MAP_STACK.
Or provide a minimal self-contained C source that demonstrates your
issue.