Changeset fbcdeb8 in mainline for kernel/generic/include/mm/as.h


Ignore:
Timestamp:
2011-12-19T17:30:39Z (12 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
58f6229
Parents:
24cf31f1
Message:

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
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/mm/as.h

    r24cf31f1 rfbcdeb8  
    242242extern int as_page_fault(uintptr_t, pf_access_t, istate_t *);
    243243
    244 extern as_area_t *as_area_create(as_t *, unsigned int, size_t, uintptr_t,
    245     unsigned int, mem_backend_t *, mem_backend_data_t *);
     244extern as_area_t *as_area_create(as_t *, unsigned int, size_t, unsigned int,
     245    mem_backend_t *, mem_backend_data_t *, uintptr_t *, uintptr_t);
    246246extern int as_area_destroy(as_t *, uintptr_t);
    247247extern int as_area_resize(as_t *, uintptr_t, size_t, unsigned int);
    248 extern int as_area_share(as_t *, uintptr_t, size_t, as_t *, uintptr_t,
    249     unsigned int);
     248extern int as_area_share(as_t *, uintptr_t, size_t, as_t *, unsigned int,
     249    uintptr_t *, uintptr_t);
    250250extern int as_area_change_flags(as_t *, unsigned int, uintptr_t);
    251251
     
    284284
    285285/* Address space area related syscalls. */
    286 extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int);
     286extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int, uintptr_t);
    287287extern sysarg_t sys_as_area_resize(uintptr_t, size_t, unsigned int);
    288288extern sysarg_t sys_as_area_change_flags(uintptr_t, unsigned int);
    289289extern sysarg_t sys_as_area_destroy(uintptr_t);
    290 extern sysarg_t sys_as_get_unmapped_area(uintptr_t, size_t);
    291290
    292291/* Introspection functions. */
Note: See TracChangeset for help on using the changeset viewer.