freebsd-skq/sys/vm
Konstantin Belousov 6a97a3f756 Treat the addr argument for mmap(2) request without MAP_FIXED flag as
a hint.

Right now, for non-fixed mmap(2) calls, addr is de-facto interpreted
as the absolute minimal address of the range where the mapping is
created.  The VA allocator only allocates in the range [addr,
VM_MAXUSER_ADDRESS].  This is too restrictive, the mmap(2) call might
unduly fail if there is no free addresses above addr but a lot of
usable space below it.

Lift this implementation limitation by allocating VA in two passes.
First, try to allocate above addr, as before.  If that fails, do the
second pass with less restrictive constraints for the start of
allocation by specifying minimal allocation address at the max bss
end, if this limit is less than addr.

One important case where this change makes a difference is the
allocation of the stacks for new threads in libthr.  Under some
configuration conditions, libthr tries to hint kernel to reuse the
main thread stack grow area for the new stacks.  This cannot work by
design now after grow area is converted to stack, and there is no
unallocated VA above the main stack.  Interpreting requested stack
base address as the hint provides compatibility with old libthr and
with (mis-)configured current libthr.

Reviewed by:	alc
Tested by:	dim (previous version)
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2017-06-28 04:02:36 +00:00
..
_vm_radix.h During vm_page_cache()'s call to vm_radix_insert(), if vm_page_alloc() was 2016-12-01 17:26:37 +00:00
default_pager.c Provide introductory description of the default pager. 2016-12-14 23:36:32 +00:00
device_pager.c All these files need sys/vmmeter.h, but now they got it implicitly 2017-04-17 17:07:00 +00:00
memguard.c All these files need sys/vmmeter.h, but now they got it implicitly 2017-04-17 17:07:00 +00:00
memguard.h
phys_pager.c Implement the populate() pager method for phys pager. 2016-12-08 11:35:53 +00:00
pmap.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
redzone.c
redzone.h
sg_pager.c All these files need sys/vmmeter.h, but now they got it implicitly 2017-04-17 17:07:00 +00:00
swap_pager.c Increase the pageout cluster size to 32 pages. 2017-06-24 17:10:33 +00:00
swap_pager.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
uma_core.c When we are in UMA_STARTUP use startup_alloc() for any zone, not for 2017-06-08 21:33:19 +00:00
uma_dbg.c Fix memguard(9) in kernels with INVARIANTS enabled. 2016-06-01 22:31:35 +00:00
uma_dbg.h
uma_int.h uma: eliminate uk_slabsize field 2017-03-11 16:35:36 +00:00
uma.h Update a comment to reflect reality. 2017-03-13 18:45:25 +00:00
vm_domain.c Remove cpu_spinwait after seq_consistent. 2016-12-30 06:26:17 +00:00
vm_domain.h
vm_extern.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_fault.c Implement address space guards. 2017-06-24 17:01:11 +00:00
vm_glue.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_init.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_kern.c Use atop() instead of OFF_TO_IDX() for convertion of addresses or 2017-03-14 19:39:17 +00:00
vm_kern.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_map.c Treat the addr argument for mmap(2) request without MAP_FIXED flag as 2017-06-28 04:02:36 +00:00
vm_map.h Treat the addr argument for mmap(2) request without MAP_FIXED flag as 2017-06-28 04:02:36 +00:00
vm_meter.c Emulate pre-r317061 ABI. 2017-05-02 18:40:41 +00:00
vm_mmap.c Treat the addr argument for mmap(2) request without MAP_FIXED flag as 2017-06-28 04:02:36 +00:00
vm_object.c Commit the 64-bit inode project. 2017-05-23 09:29:05 +00:00
vm_object.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_page.c Fix an off-by-one error in the VM page array on some systems. 2017-06-08 16:18:41 +00:00
vm_page.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_pageout.c Increase the pageout cluster size to 32 pages. 2017-06-24 17:10:33 +00:00
vm_pageout.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_pager.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_pager.h Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm_param.h Commit the 64-bit inode project. 2017-05-23 09:29:05 +00:00
vm_phys.c Ifdef out the unused vm_rr_selectdomain(). 2017-02-02 17:44:55 +00:00
vm_phys.h Remove support for idle page zeroing. 2016-09-03 20:38:13 +00:00
vm_radix.c Previously, vm_radix_remove() would panic if the radix trie didn't 2016-12-08 04:29:29 +00:00
vm_radix.h Previously, vm_radix_remove() would panic if the radix trie didn't 2016-12-08 04:29:29 +00:00
vm_reserv.c All these files need sys/vmmeter.h, but now they got it implicitly 2017-04-17 17:07:00 +00:00
vm_reserv.h Relax the object type restrictions on vm_page_alloc_contig(). Specifically, 2016-12-28 18:32:13 +00:00
vm_unix.c Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
vm.h Implement address space guards. 2017-06-24 17:01:11 +00:00
vnode_pager.c Some minor improvements to vnode_pager_generic_putpages(). 2017-06-15 14:34:33 +00:00
vnode_pager.h Extract calculation of ioflags from the vm_pager_putpages flags into a 2017-04-05 16:56:04 +00:00