Changeset ae6021d in mainline
- Timestamp:
- 2016-09-02T15:44:09Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e755b3f
- Parents:
- c1f7a315
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
abi/include/abi/ipc/methods.h
rc1f7a315 rae6021d 121 121 * - ARG1 - page-aligned offset from the beginning of the memory object 122 122 * - ARG2 - page size 123 * - ARG3 - user defined memory object ID 124 * - ARG4 - user defined memory object ID 125 * - ARG5 - user defined memory object ID 123 126 * 124 127 * on answer, the recipient must set: -
abi/include/abi/mm/as.h
rc1f7a315 rae6021d 47 47 #define AS_MAP_FAILED ((void *) -1) 48 48 49 #define AS_AREA_UNPAGED -149 #define AS_AREA_UNPAGED NULL 50 50 51 51 /** Address space area info exported to uspace. */ … … 61 61 } as_area_info_t; 62 62 63 typedef struct { 64 int pager; 65 sysarg_t id1; 66 sysarg_t id2; 67 sysarg_t id3; 68 } as_area_pager_info_t; 69 63 70 #endif 64 71 -
kernel/generic/include/mm/as.h
rc1f7a315 rae6021d 188 188 /** user_backend members */ 189 189 struct { 190 int pager; /**< Phone to the pager. */190 as_area_pager_info_t pager_info; 191 191 }; 192 192 … … 310 310 /* Address space area related syscalls. */ 311 311 extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int, uintptr_t, 312 int);312 as_area_pager_info_t *); 313 313 extern sysarg_t sys_as_area_resize(uintptr_t, size_t, unsigned int); 314 314 extern sysarg_t sys_as_area_change_flags(uintptr_t, unsigned int); -
kernel/generic/src/mm/as.c
rc1f7a315 rae6021d 2187 2187 2188 2188 sysarg_t sys_as_area_create(uintptr_t base, size_t size, unsigned int flags, 2189 uintptr_t bound, int pager)2189 uintptr_t bound, as_area_pager_info_t *pager_info) 2190 2190 { 2191 2191 uintptr_t virt = base; … … 2193 2193 mem_backend_data_t backend_data; 2194 2194 2195 if (pager == AS_AREA_UNPAGED)2195 if (pager_info == AS_AREA_UNPAGED) 2196 2196 backend = &anon_backend; 2197 2197 else { 2198 2198 backend = &user_backend; 2199 backend_data.pager = pager; 2199 if (copy_from_uspace(&backend_data.pager_info, pager_info, 2200 sizeof(as_area_pager_info_t)) != EOK) { 2201 return (sysarg_t) AS_MAP_FAILED; 2202 } 2200 2203 } 2201 2204 as_area_t *area = as_area_create(AS, flags, size, -
kernel/generic/src/mm/backend_user.c
rc1f7a315 rae6021d 39 39 #include <mm/as.h> 40 40 #include <mm/page.h> 41 #include <abi/mm/as.h> 41 42 #include <abi/ipc/methods.h> 42 43 #include <ipc/sysipc.h> … … 132 133 return AS_PF_FAULT; 133 134 135 as_area_pager_info_t *pager_info = &area->backend_data.pager_info; 136 134 137 ipc_data_t data = {}; 135 138 IPC_SET_IMETHOD(data, IPC_M_PAGE_IN); 136 139 IPC_SET_ARG1(data, upage - area->base); 137 140 IPC_SET_ARG2(data, PAGE_SIZE); 141 IPC_SET_ARG3(data, pager_info->id1); 142 IPC_SET_ARG4(data, pager_info->id2); 143 IPC_SET_ARG5(data, pager_info->id3); 138 144 139 int rc = ipc_req_internal( area->backend_data.pager, &data);145 int rc = ipc_req_internal(pager_info->pager, &data); 140 146 141 147 if (rc != EOK) { … … 143 149 "Page-in request for page %#" PRIxn 144 150 " at pager %d failed with error %d.", 145 upage, area->backend_data.pager, rc);151 upage, pager_info->pager, rc); 146 152 return AS_PF_FAULT; 147 153 } -
uspace/app/tester/mm/pager1.c
rc1f7a315 rae6021d 51 51 52 52 void *result = async_as_area_create(AS_AREA_ANY, size, 53 AS_AREA_READ | AS_AREA_CACHEABLE, vfs_pager_sess );53 AS_AREA_READ | AS_AREA_CACHEABLE, vfs_pager_sess, 0, 0, 0); 54 54 if (result == AS_MAP_FAILED) 55 55 return NULL; -
uspace/lib/c/generic/as.c
rc1f7a315 rae6021d 45 45 /** Create address space area. 46 46 * 47 * @param base Starting virtual address of the area.48 * If set to AS_AREA_ANY ((void *) -1),49 * the kernel finds amappable area.50 * @param size Size of the area.51 * @param flags Flags describing type of the area.52 * @param pager If non-negative, phone to the external pager backing the area.53 * If AS_AREA_UNPAGED (-1), the area is anonymous.47 * @param base Starting virtual address of the area. 48 * If set to AS_AREA_ANY ((void *) -1), the kernel finds a 49 * mappable area. 50 * @param size Size of the area. 51 * @param flags Flags describing type of the area. 52 * @param pager_info Pager info structure or AS_AREA_UNPAGED (NULL) if the area 53 * is not paged (i.e. anonymous). 54 54 * 55 55 * @return Starting virtual address of the created area on success. … … 57 57 * 58 58 */ 59 void *as_area_create(void *base, size_t size, unsigned int flags, int pager) 59 void *as_area_create(void *base, size_t size, unsigned int flags, 60 as_area_pager_info_t *pager_info) 60 61 { 61 62 return (void *) __SYSCALL5(SYS_AS_AREA_CREATE, (sysarg_t) base, 62 63 (sysarg_t) size, (sysarg_t) flags, (sysarg_t) __entry, 63 (sysarg_t) pager );64 (sysarg_t) pager_info); 64 65 } 65 66 -
uspace/lib/c/generic/async.c
rc1f7a315 rae6021d 117 117 #include <macros.h> 118 118 #include <as.h> 119 #include <abi/mm/as.h> 119 120 #include "private/libc.h" 120 121 … … 3383 3384 3384 3385 void *async_as_area_create(void *base, size_t size, unsigned int flags, 3385 async_sess_t *pager) 3386 { 3387 return as_area_create(base, size, flags, pager->phone); 3386 async_sess_t *pager, sysarg_t id1, sysarg_t id2, sysarg_t id3) 3387 { 3388 as_area_pager_info_t pager_info = { 3389 .pager = pager->phone, 3390 .id1 = id1, 3391 .id2 = id2, 3392 .id3 = id3 3393 }; 3394 return as_area_create(base, size, flags, &pager_info); 3388 3395 } 3389 3396 -
uspace/lib/c/include/as.h
rc1f7a315 rae6021d 53 53 } 54 54 55 extern void *as_area_create(void *, size_t, unsigned int, int); 55 extern void *as_area_create(void *, size_t, unsigned int, 56 as_area_pager_info_t *); 56 57 extern int as_area_resize(void *, size_t, unsigned int); 57 58 extern int as_area_change_flags(void *, unsigned int); -
uspace/lib/c/include/async.h
rc1f7a315 rae6021d 488 488 extern void async_remote_state_release_exchange(async_exch_t *); 489 489 490 extern void *async_as_area_create(void *, size_t, unsigned int, async_sess_t *); 490 extern void *async_as_area_create(void *, size_t, unsigned int, async_sess_t *, 491 sysarg_t, sysarg_t, sysarg_t); 491 492 492 493 #endif
Note:
See TracChangeset
for help on using the changeset viewer.