Remove the two-phase way of creating virtual memory areas (first asking for a mappable address and then mapping it) which was prone to race conditions when two or more calls to as_get_mappable_page() and as_area_create() were interleaved. This for example caused the e1k driver to randomly fail.
The memory area related syscalls and IPC calls have all been altered to accept a special value (void *) -1, representing a demand to atomically search for a mappable address space "hole" and map to it.
Individual changes:
- IPC_M_SHARE_OUT: the destination address space area is supplied by the kernel, the callee only specifies the lower bound
(the address is returned to the callee via a pointer in an IPC reply argument)
- IPC_M_SHARE_IN: the destination address space ares is supplied by the kernel, the callee only specifies the lower bound
(the address is returned to the caller as usual via an IPC argument)
- SYS_AS_GET_UNMAPPED_AREA was removed
- dummy implementations of SYS_PHYSMEM_UNMAP and SYS_IOSPACE_DISABLE were added for the sake of symmetry (they do nothing yet)
- SYS_PHYSMEM_MAP and SYS_DMAMEM_MAP were altered to accept (void *) -1 as address space area base and a lower bound
- kernel as_area_create() and as_area_share() were altered to accept (void *) -1 as address space area base and a lower bound
- uspace libraries and programs were altered to reflect the new API