Changes in / [1d4024cf:33f9670] in mainline
- Files:
-
- 43 edited
Legend:
- Unmodified
- Added
- Removed
-
abi/include/proc/uarg.h
r1d4024cf r33f9670 40 40 void *uspace_entry; 41 41 void *uspace_stack; 42 size_t uspace_stack_size;43 42 44 43 void (* uspace_thread_function)(); -
kernel/arch/amd64/src/userspace.c
r1d4024cf r33f9670 55 55 asm volatile ( 56 56 "pushq %[udata_des]\n" 57 "pushq %[stack_ top]\n"57 "pushq %[stack_size]\n" 58 58 "pushq %[ipl]\n" 59 59 "pushq %[utext_des]\n" … … 65 65 "iretq\n" 66 66 :: [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER), 67 [stack_top] "r" ((uint8_t *) kernel_uarg->uspace_stack + 68 kernel_uarg->uspace_stack_size), 67 [stack_size] "r" (kernel_uarg->uspace_stack + STACK_SIZE), 69 68 [ipl] "r" (ipl), 70 69 [utext_des] "i" (GDT_SELECTOR(UTEXT_DES) | PL_USER), … … 75 74 76 75 /* Unreachable */ 77 while (1); 76 while (1) 77 ; 78 78 } 79 79 -
kernel/arch/arm32/src/userspace.c
r1d4024cf r33f9670 92 92 93 93 /* set user stack */ 94 ustate.sp = ((uint32_t) kernel_uarg->uspace_stack) + 95 kernel_uarg->uspace_stack_size; 94 ustate.sp = ((uint32_t)kernel_uarg->uspace_stack) + STACK_SIZE; 96 95 97 96 /* set where uspace execution starts */ -
kernel/arch/ia32/src/userspace.c
r1d4024cf r33f9670 63 63 64 64 "pushl %[udata_des]\n" 65 "pushl %[stack_ top]\n"65 "pushl %[stack_size]\n" 66 66 "pushl %[ipl]\n" 67 67 "pushl %[utext_des]\n" … … 75 75 : 76 76 : [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER), 77 [stack_top] "r" ((uint8_t *) kernel_uarg->uspace_stack + 78 kernel_uarg->uspace_stack_size), 77 [stack_size] "r" ((uint8_t *) kernel_uarg->uspace_stack + STACK_SIZE), 79 78 [ipl] "r" (ipl), 80 79 [utext_des] "i" (GDT_SELECTOR(UTEXT_DES) | PL_USER), -
kernel/arch/ia64/src/ia64.c
r1d4024cf r33f9670 232 232 * 233 233 * When calculating stack addresses, mind the stack split between the 234 * memory stack and the RSE stack. Each occuppies 235 * uspace_stack_size / 2 bytes. 234 * memory stack and the RSE stack. Each occuppies STACK_SIZE / 2 bytes. 236 235 */ 237 236 switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, 238 ((uintptr_t) kernel_uarg->uspace_stack) + 239 kernel_uarg->uspace_stack_size / 2 - 237 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE / 2 - 240 238 ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT), 241 ((uintptr_t) kernel_uarg->uspace_stack) + 242 kernel_uarg->uspace_stack_size / 2, 239 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE / 2, 243 240 (uintptr_t) kernel_uarg->uspace_uarg, psr.value, rsc.value); 244 245 while (1); 241 242 while (1) 243 ; 246 244 } 247 245 -
kernel/arch/mips32/src/mips32.c
r1d4024cf r33f9670 211 211 cp0_status_um_bit | cp0_status_ie_enabled_bit)); 212 212 cp0_epc_write((uintptr_t) kernel_uarg->uspace_entry); 213 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + 214 kernel_uarg->uspace_stack_size), 213 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + STACK_SIZE), 215 214 (uintptr_t) kernel_uarg->uspace_uarg, 216 215 (uintptr_t) kernel_uarg->uspace_entry); -
kernel/arch/mips64/src/mips64.c
r1d4024cf r33f9670 188 188 cp0_status_um_bit | cp0_status_ie_enabled_bit)); 189 189 cp0_epc_write((uintptr_t) kernel_uarg->uspace_entry); 190 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + 191 kernel_uarg->uspace_stack_size), 190 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + STACK_SIZE), 192 191 (uintptr_t) kernel_uarg->uspace_uarg, 193 192 (uintptr_t) kernel_uarg->uspace_entry); -
kernel/arch/ppc32/src/ppc32.c
r1d4024cf r33f9670 269 269 { 270 270 userspace_asm((uintptr_t) kernel_uarg->uspace_uarg, 271 (uintptr_t) kernel_uarg->uspace_stack + 272 kernel_uarg->uspace_stack_size - SP_DELTA, 271 (uintptr_t) kernel_uarg->uspace_stack + STACK_SIZE - SP_DELTA, 273 272 (uintptr_t) kernel_uarg->uspace_entry); 274 273 -
kernel/arch/sparc64/src/sun4u/sparc64.c
r1d4024cf r33f9670 156 156 (void) interrupts_disable(); 157 157 switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, 158 ((uintptr_t) kernel_uarg->uspace_stack) + 159 kernel_uarg->uspace_stack_size - 160 (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 158 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE 159 - (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 161 160 (uintptr_t) kernel_uarg->uspace_uarg); 162 163 /* Not reached */ 164 while (1); 161 162 for (;;) 163 ; 164 /* not reached */ 165 165 } 166 166 -
kernel/arch/sparc64/src/sun4v/sparc64.c
r1d4024cf r33f9670 154 154 (void) interrupts_disable(); 155 155 switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, 156 ((uintptr_t) kernel_uarg->uspace_stack) + 157 kernel_uarg->uspace_stack_size - 158 (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 156 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE 157 - (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 159 158 (uintptr_t) kernel_uarg->uspace_uarg); 160 161 /* Not reached */ 162 while (1); 159 160 for (;;) 161 ; 162 /* not reached */ 163 163 } 164 164 -
kernel/generic/src/main/uinit.c
r1d4024cf r33f9670 56 56 void uinit(void *arg) 57 57 { 58 uspace_arg_t uarg; 59 58 60 /* 59 61 * So far, we don't have a use for joining userspace threads so we … … 70 72 #endif 71 73 72 uspace_arg_t *uarg = (uspace_arg_t *) arg; 73 uspace_arg_t local_uarg; 74 uarg.uspace_entry = ((uspace_arg_t *) arg)->uspace_entry; 75 uarg.uspace_stack = ((uspace_arg_t *) arg)->uspace_stack; 76 uarg.uspace_uarg = ((uspace_arg_t *) arg)->uspace_uarg; 77 uarg.uspace_thread_function = NULL; 78 uarg.uspace_thread_arg = NULL; 74 79 75 local_uarg.uspace_entry = uarg->uspace_entry; 76 local_uarg.uspace_stack = uarg->uspace_stack; 77 local_uarg.uspace_stack_size = uarg->uspace_stack_size; 78 local_uarg.uspace_uarg = uarg->uspace_uarg; 79 local_uarg.uspace_thread_function = NULL; 80 local_uarg.uspace_thread_arg = NULL; 80 free((uspace_arg_t *) arg); 81 81 82 free(uarg); 83 84 userspace(&local_uarg); 82 userspace(&uarg); 85 83 } 86 84 -
kernel/generic/src/proc/program.c
r1d4024cf r33f9670 71 71 int program_create(as_t *as, uintptr_t entry_addr, char *name, program_t *prg) 72 72 { 73 uspace_arg_t *kernel_uarg; 74 75 kernel_uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0); 76 kernel_uarg->uspace_entry = (void *) entry_addr; 77 kernel_uarg->uspace_stack = (void *) USTACK_ADDRESS; 78 kernel_uarg->uspace_thread_function = NULL; 79 kernel_uarg->uspace_thread_arg = NULL; 80 kernel_uarg->uspace_uarg = NULL; 81 73 82 prg->loader_status = EE_OK; 74 83 prg->task = task_create(as, name); … … 83 92 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE, 84 93 STACK_SIZE, AS_AREA_ATTR_NONE, &anon_backend, NULL, &virt, 0); 85 if (!area) { 86 task_destroy(prg->task); 94 if (!area) 87 95 return ENOMEM; 88 }89 90 uspace_arg_t *kernel_uarg = (uspace_arg_t *)91 malloc(sizeof(uspace_arg_t), 0);92 93 kernel_uarg->uspace_entry = (void *) entry_addr;94 kernel_uarg->uspace_stack = (void *) virt;95 kernel_uarg->uspace_stack_size = STACK_SIZE;96 kernel_uarg->uspace_thread_function = NULL;97 kernel_uarg->uspace_thread_arg = NULL;98 kernel_uarg->uspace_uarg = NULL;99 96 100 97 /* … … 103 100 prg->main_thread = thread_create(uinit, kernel_uarg, prg->task, 104 101 THREAD_FLAG_USPACE, "uinit", false); 105 if (!prg->main_thread) { 106 free(kernel_uarg); 107 as_area_destroy(as, virt); 108 task_destroy(prg->task); 102 if (!prg->main_thread) 109 103 return ELIMIT; 110 }111 104 112 105 return EOK; -
kernel/generic/src/proc/thread.c
r1d4024cf r33f9670 854 854 * In case of failure, kernel_uarg will be deallocated in this function. 855 855 * In case of success, kernel_uarg will be freed in uinit(). 856 * 856 857 */ 857 858 uspace_arg_t *kernel_uarg = -
uspace/app/tester/mm/common.c
r1d4024cf r33f9670 342 342 link_initialize(&area->link); 343 343 344 area->addr = as_area_create( AS_AREA_ANY, size,344 area->addr = as_area_create((void *) -1, size, 345 345 AS_AREA_WRITE | AS_AREA_READ); 346 if (area->addr == AS_MAP_FAILED) {346 if (area->addr == (void *) -1) { 347 347 free(area); 348 348 check_consistency("map_area (a)"); -
uspace/app/tester/mm/mapping1.c
r1d4024cf r33f9670 42 42 TPRINTF("Creating AS area...\n"); 43 43 44 void *result = as_area_create( AS_AREA_ANY, size,44 void *result = as_area_create((void *) -1, size, 45 45 AS_AREA_READ | AS_AREA_WRITE); 46 if (result == AS_MAP_FAILED)46 if (result == (void *) -1) 47 47 return NULL; 48 48 -
uspace/drv/bus/usb/uhci/utils/malloc32.h
r1d4024cf r33f9670 99 99 static inline void * get_page(void) 100 100 { 101 void *address = as_area_create( AS_AREA_ANY, UHCI_REQUIRED_PAGE_SIZE,101 void *address = as_area_create((void *) -1, UHCI_REQUIRED_PAGE_SIZE, 102 102 AS_AREA_READ | AS_AREA_WRITE); 103 if (address == AS_MAP_FAILED)103 if (address == (void *) -1) 104 104 return NULL; 105 105 -
uspace/drv/bus/usb/usbmast/main.c
r1d4024cf r33f9670 302 302 303 303 (void) async_share_out_finalize(callid, &comm_buf); 304 if (comm_buf == AS_MAP_FAILED) {304 if (comm_buf == (void *) -1) { 305 305 async_answer_0(callid, EHANGUP); 306 306 return; -
uspace/lib/c/arch/ia64/include/fibril.h
r1d4024cf r33f9670 49 49 #define PFM_MASK (~0x3fffffffff) 50 50 51 #define PSTHREAD_INITIAL_STACK_PAGES_NO 2 52 51 53 /* Stack is divided into two equal parts (for memory stack and register stack). */ 52 #define FIBRIL_INITIAL_STACK_DIVISION 254 #define PSTHREAD_INITIAL_STACK_DIVISION 2 53 55 54 56 #define context_set(c, _pc, stack, size, tls) \ … … 56 58 (c)->pc = (uint64_t) _pc; \ 57 59 (c)->bsp = ((uint64_t) stack) + \ 58 size / FIBRIL_INITIAL_STACK_DIVISION; \60 size / PSTHREAD_INITIAL_STACK_DIVISION; \ 59 61 (c)->ar_pfs &= PFM_MASK; \ 60 62 (c)->sp = ((uint64_t) stack) + \ 61 ALIGN_UP((size / FIBRIL_INITIAL_STACK_DIVISION), STACK_ALIGNMENT) - \63 ALIGN_UP((size / PSTHREAD_INITIAL_STACK_DIVISION), STACK_ALIGNMENT) - \ 62 64 SP_DELTA; \ 63 65 (c)->tp = (uint64_t) tls; \ -
uspace/lib/c/arch/ia64/include/thread.h
r1d4024cf r33f9670 27 27 */ 28 28 29 /** @addtogroup libcia64 29 /** @addtogroup libcia64 30 30 * @{ 31 31 */ … … 36 36 #define LIBC_ia64_THREAD_H_ 37 37 38 #define THREAD_INITIAL_STACK_PAGES_NO 2 39 38 40 #endif 39 41 -
uspace/lib/c/generic/as.c
r1d4024cf r33f9670 46 46 * 47 47 * @param base Starting virtual address of the area. 48 * If set to AS_AREA_ANY ((void *) -1),49 * the kernel findsa mappable area.48 * If set to (void *) -1, the kernel finds 49 * a mappable area. 50 50 * @param size Size of the area. 51 51 * @param flags Flags describing type of the area. 52 52 * 53 53 * @return Starting virtual address of the created area on success. 54 * @return AS_MAP_FAILED ((void *) -1)otherwise.54 * @return (void *) -1 otherwise. 55 55 * 56 56 */ -
uspace/lib/c/generic/elf/elf_load.c
r1d4024cf r33f9670 366 366 a = as_area_create((uint8_t *) base + bias, mem_sz, 367 367 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 368 if (a == AS_MAP_FAILED) {368 if (a == (void *) -1) { 369 369 DPRINTF("memory mapping failed (0x%x, %d)\n", 370 370 base + bias, mem_sz); -
uspace/lib/c/generic/fibril.c
r1d4024cf r33f9670 286 286 } 287 287 288 /** Delete a fibril that has never run.289 *290 * Free resources of a fibril that has been created with fibril_create()291 * but never readied using fibril_add_ready().292 *293 * @param fid Pointer to the fibril structure of the fibril to be294 * added.295 */296 void fibril_destroy(fid_t fid)297 {298 fibril_t *fibril = (fibril_t *) fid;299 300 free(fibril->stack);301 fibril_teardown(fibril);302 }303 304 288 /** Add a fibril to the ready list. 305 289 * -
uspace/lib/c/generic/malloc.c
r1d4024cf r33f9670 285 285 /* Align the heap area size on page boundary */ 286 286 size_t asize = ALIGN_UP(size, PAGE_SIZE); 287 void *astart = as_area_create( AS_AREA_ANY, asize,287 void *astart = as_area_create((void *) -1, asize, 288 288 AS_AREA_WRITE | AS_AREA_READ); 289 if (astart == AS_MAP_FAILED)289 if (astart == (void *) -1) 290 290 return false; 291 291 -
uspace/lib/c/generic/mman.c
r1d4024cf r33f9670 42 42 { 43 43 if (!start) 44 start = AS_AREA_ANY;44 start = (void *) -1; 45 45 46 46 // if (!((flags & MAP_SHARED) ^ (flags & MAP_PRIVATE))) -
uspace/lib/c/generic/thread.c
r1d4024cf r33f9670 41 41 #include <str.h> 42 42 #include <async.h> 43 #include <errno.h>44 #include <as.h>45 43 #include "private/thread.h" 46 44 47 #ifndef THREAD_INITIAL_STACK_PAGES 48 #define THREAD_INITIAL_STACK_PAGES 2 45 #ifndef THREAD_INITIAL_STACK_PAGES_NO 46 #define THREAD_INITIAL_STACK_PAGES_NO 2 49 47 #endif 50 48 … … 67 65 68 66 uarg->uspace_thread_function(uarg->uspace_thread_arg); 69 /* 70 * XXX: we cannot free the userspace stack while running on it 71 * 72 * free(uarg->uspace_stack); 73 * free(uarg); 74 */ 67 /* XXX: we cannot free the userspace stack while running on it 68 free(uarg->uspace_stack); 69 free(uarg); 70 */ 75 71 76 72 /* If there is a manager, destroy it */ … … 96 92 thread_id_t *tid) 97 93 { 98 uspace_arg_t *uarg = 99 (uspace_arg_t *) malloc(sizeof(uspace_arg_t)); 100 if (!uarg) 101 return ENOMEM; 102 103 size_t stack_size = getpagesize() * THREAD_INITIAL_STACK_PAGES; 104 void *stack = as_area_create(AS_AREA_ANY, stack_size, 105 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 106 if (stack == AS_MAP_FAILED) { 107 free(uarg); 108 return ENOMEM; 94 char *stack; 95 uspace_arg_t *uarg; 96 int rc; 97 98 stack = (char *) malloc(getpagesize() * THREAD_INITIAL_STACK_PAGES_NO); 99 if (!stack) 100 return -1; 101 102 uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t)); 103 if (!uarg) { 104 free(stack); 105 return -1; 109 106 } 110 107 111 108 uarg->uspace_entry = (void *) FADDR(__thread_entry); 112 uarg->uspace_stack = stack; 113 uarg->uspace_stack_size = stack_size; 109 uarg->uspace_stack = (void *) stack; 114 110 uarg->uspace_thread_function = function; 115 111 uarg->uspace_thread_arg = arg; 116 112 uarg->uspace_uarg = uarg; 117 113 118 int rc = __SYSCALL4(SYS_THREAD_CREATE, (sysarg_t) uarg,119 (sysarg_t) name, (sysarg_t)str_size(name), (sysarg_t) tid);114 rc = __SYSCALL4(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name, 115 (sysarg_t) str_size(name), (sysarg_t) tid); 120 116 121 if (rc != EOK) {117 if (rc) { 122 118 /* 123 119 * Failed to create a new thread. 124 * Free up the allocated data.120 * Free up the allocated structures. 125 121 */ 126 as_area_destroy(stack);127 122 free(uarg); 123 free(stack); 128 124 } 129 125 130 126 return rc; 131 127 } -
uspace/lib/c/include/as.h
r1d4024cf r33f9670 41 41 #include <libarch/config.h> 42 42 43 #define AS_AREA_ANY ((void *) -1)44 #define AS_MAP_FAILED ((void *) -1)45 46 43 static inline size_t SIZE2PAGES(size_t size) 47 44 { -
uspace/lib/c/include/fibril.h
r1d4024cf r33f9670 87 87 88 88 extern fid_t fibril_create(int (*func)(void *), void *arg); 89 extern void fibril_destroy(fid_t fid);90 89 extern fibril_t *fibril_setup(void); 91 90 extern void fibril_teardown(fibril_t *f); -
uspace/lib/c/include/sys/mman.h
r1d4024cf r33f9670 39 39 #include <sys/types.h> 40 40 41 #define MAP_FAILED AS_MAP_FAILED41 #define MAP_FAILED ((void *) -1) 42 42 43 43 #define MAP_SHARED (1 << 0) -
uspace/lib/fb/imgmap.c
r1d4024cf r33f9670 420 420 421 421 if ((flags & IMGMAP_FLAG_SHARED) == IMGMAP_FLAG_SHARED) { 422 imgmap = (imgmap_t *) as_area_create( AS_AREA_ANY, size,422 imgmap = (imgmap_t *) as_area_create((void *) -1, size, 423 423 AS_AREA_READ | AS_AREA_WRITE); 424 if (imgmap == AS_MAP_FAILED)424 if (imgmap == (void *) -1) 425 425 return NULL; 426 426 } else { -
uspace/lib/fb/screenbuffer.c
r1d4024cf r33f9670 79 79 80 80 if ((flags & SCREENBUFFER_FLAG_SHARED) == SCREENBUFFER_FLAG_SHARED) { 81 scrbuf = (screenbuffer_t *) as_area_create( AS_AREA_ANY, size,81 scrbuf = (screenbuffer_t *) as_area_create((void *) -1, size, 82 82 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 83 if (scrbuf == AS_MAP_FAILED)83 if (scrbuf == (void *) -1) 84 84 return NULL; 85 85 } else { -
uspace/lib/fs/libfs.c
r1d4024cf r33f9670 339 339 */ 340 340 rc = async_share_in_start_0_0(exch, PLB_SIZE, (void *) ®.plb_ro); 341 if (reg.plb_ro == AS_MAP_FAILED) {341 if (reg.plb_ro == (void *) -1) { 342 342 async_exchange_end(exch); 343 343 async_forget(req); -
uspace/srv/bd/ata_bd/ata_bd.c
r1d4024cf r33f9670 308 308 309 309 (void) async_share_out_finalize(callid, &fs_va); 310 if (fs_va == AS_MAP_FAILED) {310 if (fs_va == (void *) -1) { 311 311 async_answer_0(callid, EHANGUP); 312 312 return; -
uspace/srv/bd/file_bd/file_bd.c
r1d4024cf r33f9670 189 189 190 190 (void) async_share_out_finalize(callid, &fs_va); 191 if (fs_va == AS_MAP_FAILED) {191 if (fs_va == (void *) -1) { 192 192 async_answer_0(callid, EHANGUP); 193 193 return; -
uspace/srv/bd/gxe_bd/gxe_bd.c
r1d4024cf r33f9670 196 196 197 197 (void) async_share_out_finalize(callid, &fs_va); 198 if (fs_va == AS_MAP_FAILED) {198 if (fs_va == (void *) -1) { 199 199 async_answer_0(callid, EHANGUP); 200 200 return; -
uspace/srv/bd/part/guid_part/guid_part.c
r1d4024cf r33f9670 350 350 351 351 (void) async_share_out_finalize(callid, &fs_va); 352 if (fs_va == AS_MAP_FAILED) {352 if (fs_va == (void *) -1) { 353 353 async_answer_0(callid, EHANGUP); 354 354 return; -
uspace/srv/bd/part/mbr_part/mbr_part.c
r1d4024cf r33f9670 427 427 428 428 (void) async_share_out_finalize(callid, &fs_va); 429 if (fs_va == AS_MAP_FAILED) {429 if (fs_va == (void *) -1) { 430 430 async_answer_0(callid, EHANGUP); 431 431 return; -
uspace/srv/bd/rd/rd.c
r1d4024cf r33f9670 106 106 if (async_share_out_receive(&callid, &comm_size, &flags)) { 107 107 (void) async_share_out_finalize(callid, &fs_va); 108 if (fs_va == AS_MAP_FAILED) {108 if (fs_va == (void *) -1) { 109 109 async_answer_0(callid, EHANGUP); 110 110 return; -
uspace/srv/hid/fb/fb.c
r1d4024cf r33f9670 305 305 306 306 int rc = async_share_out_finalize(callid, &frontbuf->data); 307 if ((rc != EOK) || (frontbuf->data == AS_MAP_FAILED)) {307 if ((rc != EOK) || (frontbuf->data == (void *) -1)) { 308 308 free(frontbuf); 309 309 async_answer_0(iid, ENOMEM); … … 348 348 349 349 int rc = async_share_out_finalize(callid, &imagemap->data); 350 if ((rc != EOK) || (imagemap->data == AS_MAP_FAILED)) {350 if ((rc != EOK) || (imagemap->data == (void *) -1)) { 351 351 free(imagemap); 352 352 async_answer_0(iid, ENOMEM); -
uspace/srv/net/tcp/sock.c
r1d4024cf r33f9670 151 151 sock, sock_id); 152 152 153 if (rc != EOK) { 154 fibril_destroy(sock->recv_fibril); 155 sock->recv_fibril = 0; 153 if (rc != EOK) 156 154 return rc; 157 }158 155 159 156 sock_core = socket_cores_find(&sock->client->sockets, *sock_id); -
uspace/srv/net/udp/sock.c
r1d4024cf r33f9670 51 51 #include "ucall.h" 52 52 53 #define FRAGMENT_SIZE 1024 54 53 55 /** Free ports pool start. */ 54 56 #define UDP_FREE_PORTS_START 1025 … … 61 63 62 64 static void udp_sock_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg); 63 static int udp_sock_recv_fibril(void *arg);64 65 65 66 int udp_sock_init(void) … … 81 82 82 83 socket = (udp_sockdata_t *)sock_core->specific_data; 83 (void)socket; 84 85 /* XXX We need to force the receive fibril to quit */ 84 assert(socket->assoc != NULL); 85 udp_uc_destroy(socket->assoc); 86 86 } 87 87 … … 91 91 async_exch_t *exch = async_exchange_begin(sock_core->sess); 92 92 async_msg_5(exch, NET_SOCKET_RECEIVED, (sysarg_t)sock_core->socket_id, 93 UDP_FRAGMENT_SIZE, 0, 0, 1);93 FRAGMENT_SIZE, 0, 0, 1); 94 94 async_exchange_end(exch); 95 95 } … … 113 113 sock->client = client; 114 114 115 sock->recv_buffer_used = 0;116 sock->recv_error = UDP_EOK;117 fibril_mutex_initialize(&sock->recv_buffer_lock);118 fibril_condvar_initialize(&sock->recv_buffer_cv);119 120 115 rc = udp_uc_create(&sock->assoc); 121 116 if (rc != EOK) { 117 udp_uc_destroy(sock->assoc); 122 118 free(sock); 123 119 async_answer_0(callid, rc); 124 return;125 }126 127 sock->recv_fibril = fibril_create(udp_sock_recv_fibril, sock);128 if (sock->recv_fibril == 0) {129 udp_uc_destroy(sock->assoc);130 free(sock);131 async_answer_0(callid, ENOMEM);132 120 return; 133 121 } … … 136 124 rc = socket_create(&client->sockets, client->sess, sock, &sock_id); 137 125 if (rc != EOK) { 138 fibril_destroy(sock->recv_fibril);139 udp_uc_destroy(sock->assoc);140 free(sock);141 126 async_answer_0(callid, rc); 142 127 return; 143 128 } 144 145 fibril_add_ready(sock->recv_fibril);146 129 147 130 sock_core = socket_cores_find(&client->sockets, sock_id); … … 151 134 SOCKET_SET_SOCKET_ID(answer, sock_id); 152 135 153 SOCKET_SET_DATA_FRAGMENT_SIZE(answer, UDP_FRAGMENT_SIZE);136 SOCKET_SET_DATA_FRAGMENT_SIZE(answer, FRAGMENT_SIZE); 154 137 SOCKET_SET_HEADER_SIZE(answer, sizeof(udp_header_t)); 155 138 async_answer_3(callid, EOK, IPC_GET_ARG1(answer), … … 222 205 } 223 206 207 udp_sock_notify_data(sock_core); 208 224 209 log_msg(LVL_DEBUG, " - success"); 225 210 async_answer_0(callid, rc); … … 260 245 ipc_callid_t wcallid; 261 246 size_t length; 262 uint8_t buffer[ UDP_FRAGMENT_SIZE];247 uint8_t buffer[FRAGMENT_SIZE]; 263 248 udp_error_t urc; 264 249 int rc; … … 307 292 goto out; 308 293 } 294 295 udp_sock_notify_data(sock_core); 309 296 } 310 297 … … 343 330 } 344 331 345 if (length > UDP_FRAGMENT_SIZE)346 length = UDP_FRAGMENT_SIZE;332 if (length > FRAGMENT_SIZE) 333 length = FRAGMENT_SIZE; 347 334 348 335 rc = async_data_write_finalize(wcallid, buffer, length); … … 380 367 381 368 IPC_SET_ARG1(answer, 0); 382 SOCKET_SET_DATA_FRAGMENT_SIZE(answer, UDP_FRAGMENT_SIZE);369 SOCKET_SET_DATA_FRAGMENT_SIZE(answer, FRAGMENT_SIZE); 383 370 async_answer_2(callid, EOK, IPC_GET_ARG1(answer), 384 371 IPC_GET_ARG2(answer)); … … 399 386 ipc_call_t answer; 400 387 ipc_callid_t rcallid; 388 uint8_t buffer[FRAGMENT_SIZE]; 401 389 size_t data_len; 390 xflags_t xflags; 402 391 udp_error_t urc; 392 struct sockaddr_in addr; 403 393 udp_sock_t rsock; 404 struct sockaddr_in addr;405 394 int rc; 406 395 … … 427 416 (void)flags; 428 417 429 log_msg(LVL_DEBUG, "udp_sock_recvfrom(): lock recv_buffer lock"); 430 fibril_mutex_lock(&socket->recv_buffer_lock); 431 while (socket->recv_buffer_used == 0 && socket->recv_error == UDP_EOK) { 432 log_msg(LVL_DEBUG, "udp_sock_recvfrom(): wait for cv"); 433 fibril_condvar_wait(&socket->recv_buffer_cv, 434 &socket->recv_buffer_lock); 435 } 436 437 log_msg(LVL_DEBUG, "Got data in sock recv_buffer"); 438 439 rsock = socket->recv_fsock; 440 data_len = socket->recv_buffer_used; 441 urc = socket->recv_error; 442 443 log_msg(LVL_DEBUG, "**** recv data_len=%zu", data_len); 418 urc = udp_uc_receive(socket->assoc, buffer, FRAGMENT_SIZE, &data_len, 419 &xflags, &rsock); 420 log_msg(LVL_DEBUG, "**** udp_uc_receive done, data_len=%zu", data_len); 444 421 445 422 switch (urc) { … … 460 437 log_msg(LVL_DEBUG, "**** udp_uc_receive -> %d", rc); 461 438 if (rc != EOK) { 462 fibril_mutex_unlock(&socket->recv_buffer_lock);463 439 fibril_mutex_unlock(&socket->lock); 464 440 async_answer_0(callid, rc); … … 474 450 log_msg(LVL_DEBUG, "addr read receive"); 475 451 if (!async_data_read_receive(&rcallid, &addr_length)) { 476 fibril_mutex_unlock(&socket->recv_buffer_lock);477 452 fibril_mutex_unlock(&socket->lock); 478 453 async_answer_0(callid, EINVAL); … … 486 461 rc = async_data_read_finalize(rcallid, &addr, addr_length); 487 462 if (rc != EOK) { 488 fibril_mutex_unlock(&socket->recv_buffer_lock);489 463 fibril_mutex_unlock(&socket->lock); 490 464 async_answer_0(callid, EINVAL); … … 495 469 log_msg(LVL_DEBUG, "data read receive"); 496 470 if (!async_data_read_receive(&rcallid, &length)) { 497 fibril_mutex_unlock(&socket->recv_buffer_lock);498 471 fibril_mutex_unlock(&socket->lock); 499 472 async_answer_0(callid, EINVAL); … … 505 478 506 479 log_msg(LVL_DEBUG, "data read finalize"); 507 rc = async_data_read_finalize(rcallid, socket->recv_buffer, length);480 rc = async_data_read_finalize(rcallid, buffer, length); 508 481 509 482 if (length < data_len && rc == EOK) … … 516 489 async_answer_3(callid, EOK, IPC_GET_ARG1(answer), 517 490 IPC_GET_ARG2(answer), IPC_GET_ARG3(answer)); 518 519 socket->recv_buffer_used = 0; 520 521 fibril_condvar_broadcast(&socket->recv_buffer_cv); 522 fibril_mutex_unlock(&socket->recv_buffer_lock); 491 492 /* Push one fragment notification to client's queue */ 493 udp_sock_notify_data(sock_core); 523 494 fibril_mutex_unlock(&socket->lock); 524 495 } … … 567 538 } 568 539 569 static int udp_sock_recv_fibril(void *arg)570 {571 udp_sockdata_t *sock = (udp_sockdata_t *)arg;572 udp_error_t urc;573 xflags_t xflags;574 size_t rcvd;575 576 log_msg(LVL_DEBUG, "udp_sock_recv_fibril()");577 578 while (true) {579 log_msg(LVL_DEBUG, "[] wait for rcv buffer empty()");580 fibril_mutex_lock(&sock->recv_buffer_lock);581 while (sock->recv_buffer_used != 0) {582 fibril_condvar_wait(&sock->recv_buffer_cv,583 &sock->recv_buffer_lock);584 }585 586 log_msg(LVL_DEBUG, "[] call udp_uc_receive()");587 urc = udp_uc_receive(sock->assoc, sock->recv_buffer,588 UDP_FRAGMENT_SIZE, &rcvd, &xflags, &sock->recv_fsock);589 sock->recv_error = urc;590 591 udp_sock_notify_data(sock->sock_core);592 593 if (urc != UDP_EOK) {594 fibril_condvar_broadcast(&sock->recv_buffer_cv);595 fibril_mutex_unlock(&sock->recv_buffer_lock);596 break;597 }598 599 log_msg(LVL_DEBUG, "[] got data - broadcast recv_buffer_cv");600 601 sock->recv_buffer_used = rcvd;602 fibril_mutex_unlock(&sock->recv_buffer_lock);603 fibril_condvar_broadcast(&sock->recv_buffer_cv);604 }605 606 udp_uc_destroy(sock->assoc);607 608 return 0;609 }610 611 540 static void udp_sock_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg) 612 541 { -
uspace/srv/net/udp/udp.c
r1d4024cf r33f9670 73 73 printf(NAME ": UDP (User Datagram Protocol) service\n"); 74 74 75 rc = log_init(NAME, LVL_ DEBUG);75 rc = log_init(NAME, LVL_WARN); 76 76 if (rc != EOK) { 77 77 printf(NAME ": Failed to initialize log.\n"); -
uspace/srv/net/udp/udp_type.h
r1d4024cf r33f9670 36 36 #define UDP_TYPE_H 37 37 38 #include <fibril.h>39 38 #include <fibril_synch.h> 40 39 #include <socket_core.h> 41 40 #include <sys/types.h> 42 43 #define UDP_FRAGMENT_SIZE 409644 45 41 46 42 typedef enum { … … 145 141 /** Connection */ 146 142 udp_assoc_t *assoc; 147 /** Receiving fibril */148 fid_t recv_fibril;149 uint8_t recv_buffer[UDP_FRAGMENT_SIZE];150 size_t recv_buffer_used;151 udp_sock_t recv_fsock;152 fibril_mutex_t recv_buffer_lock;153 fibril_condvar_t recv_buffer_cv;154 udp_error_t recv_error;155 143 } udp_sockdata_t; 156 144 -
uspace/srv/vfs/vfs.c
r1d4024cf r33f9670 173 173 * Allocate and initialize the Path Lookup Buffer. 174 174 */ 175 plb = as_area_create( AS_AREA_ANY, PLB_SIZE,175 plb = as_area_create((void *) -1, PLB_SIZE, 176 176 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 177 if (plb == AS_MAP_FAILED) {177 if (plb == (void *) -1) { 178 178 printf("%s: Cannot create address space area\n", NAME); 179 179 return ENOMEM;
Note:
See TracChangeset
for help on using the changeset viewer.