Many thanks. I verified the patch you provided and it works fine. Sushanth
> Oh, I see. The problem is the VM_MAP_WIRE_NOHOLES flag. > Since we > map only the initial stack fragment even for the > MCL_WIREFUTURE maps, > there is a hole in the stack region. > > In fact, for MCL_WIREFUTURE, we probably should map the > whole > stack at once, prefaulting all pages. > > Below are two patches. The change for vm_mmap.c would fix > your immediate > problem by allowing holes in wired region. > > The change for vm_map.c prefaults the whole stack instead of > the > initial fragment. The single-threaded programs still get a > fault > on stack growth. > > diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c > index 6198629..2fd18d1 100644 > --- a/sys/vm/vm_map.c > +++ b/sys/vm/vm_map.c > @@ -3259,7 +3259,10 @@ vm_map_stack(vm_map_t map, > vm_offset_t addrbos, vm_size_t max_ssize, > addrbos + max_ssize < > addrbos) > return > (KERN_NO_SPACE); > > - init_ssize = (max_ssize < sgrowsiz) ? > max_ssize : sgrowsiz; > + if (map->flags & MAP_WIREFUTURE) > + init_ssize = > max_ssize; > + else > + init_ssize = > (max_ssize < sgrowsiz) ? max_ssize : sgrowsiz; > > PROC_LOCK(curthread->td_proc); > vmemlim = lim_cur(curthread->td_proc, > RLIMIT_VMEM); > diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c > index 2588c85..3fccd9e 100644 > --- a/sys/vm/vm_mmap.c > +++ b/sys/vm/vm_mmap.c > @@ -1561,9 +1561,11 @@ vm_mmap(vm_map_t map, vm_offset_t > *addr, vm_size_t size, vm_prot_t prot, > * If the > process has requested that all future mappings > * be > wired, then heed this. > */ > - if (map->flags > & MAP_WIREFUTURE) > + if (map->flags > & MAP_WIREFUTURE) { > > vm_map_wire(map, *addr, *addr + size, > - > VM_MAP_WIRE_USER | VM_MAP_WIRE_NOHOLES); > + > VM_MAP_WIRE_USER | ((flags & MAP_STACK) ? > + > VM_MAP_WIRE_HOLESOK : VM_MAP_WIRE_NOHOLES)); > + } > } else { > /* > * If this > mapping was accounted for in the vnode's > _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"