Changes in / [88e43bc:436a0a5] in mainline
- Location:
- kernel
- Files:
-
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/abs32le/src/proc/thread.c
r88e43bc r436a0a5 35 35 #include <proc/thread.h> 36 36 37 void thread_create_arch(thread_t *t)37 errno_t thread_create_arch(thread_t *t, thread_flags_t flags) 38 38 { 39 return EOK; 39 40 } 40 41 -
kernel/arch/amd64/src/proc/thread.c
r88e43bc r436a0a5 42 42 * 43 43 */ 44 void thread_create_arch(thread_t *thread)44 errno_t thread_create_arch(thread_t *thread, thread_flags_t flags) 45 45 { 46 46 /* … … 49 49 thread->arch.kstack_rsp = 50 50 (uintptr_t) &thread->kstack[PAGE_SIZE - sizeof(istate_t)]; 51 return EOK; 51 52 } 52 53 -
kernel/arch/arm32/include/arch/proc/thread.h
r88e43bc r436a0a5 42 42 #define thr_constructor_arch(t) 43 43 #define thr_destructor_arch(t) 44 #define thread_create_arch(t )44 #define thread_create_arch(t, flags) (EOK) 45 45 46 46 #endif -
kernel/arch/ia32/src/proc/thread.c
r88e43bc r436a0a5 39 39 * @param t Thread to be initialized. 40 40 */ 41 void thread_create_arch(thread_t *t)41 errno_t thread_create_arch(thread_t *t, thread_flags_t flags) 42 42 { 43 return EOK; 43 44 } 44 45 -
kernel/arch/ia64/include/arch/proc/thread.h
r88e43bc r436a0a5 41 41 #define thr_constructor_arch(t) 42 42 #define thr_destructor_arch(t) 43 #define thread_create_arch(t )43 #define thread_create_arch(t, flags) (EOK) 44 44 45 45 #endif -
kernel/arch/mips32/include/arch/proc/thread.h
r88e43bc r436a0a5 41 41 #define thr_constructor_arch(t) 42 42 #define thr_destructor_arch(t) 43 #define thread_create_arch(t )43 #define thread_create_arch(t, flags) (EOK) 44 44 45 45 #endif -
kernel/arch/ppc32/include/arch/proc/thread.h
r88e43bc r436a0a5 41 41 #define thr_constructor_arch(t) 42 42 #define thr_destructor_arch(t) 43 #define thread_create_arch(t )43 #define thread_create_arch(t, flags) (EOK) 44 44 45 45 #endif -
kernel/arch/riscv64/src/proc/thread.c
r88e43bc r436a0a5 35 35 #include <proc/thread.h> 36 36 37 void thread_create_arch(thread_t *t)37 errno_t thread_create_arch(thread_t *t, thread_flags_t flags) 38 38 { 39 return EOK; 39 40 } 40 41 -
kernel/arch/sparc64/src/proc/thread.c
r88e43bc r436a0a5 62 62 } 63 63 64 void thread_create_arch(thread_t *t)64 errno_t thread_create_arch(thread_t *t, thread_flags_t flags) 65 65 { 66 if (( t->uspace) && (!t->arch.uspace_window_buffer)) {66 if ((flags & THREAD_FLAG_USPACE) && (!t->arch.uspace_window_buffer)) { 67 67 /* 68 68 * The thread needs userspace window buffer and the object 69 69 * returned from the slab allocator doesn't have any. 70 70 */ 71 t->arch.uspace_window_buffer = slab_alloc(uwb_cache, 0); 71 t->arch.uspace_window_buffer = slab_alloc(uwb_cache, FRAME_ATOMIC); 72 if (!t->arch.uspace_window_buffer) 73 return ENOMEM; 72 74 } else { 73 75 uintptr_t uw_buf = (uintptr_t) t->arch.uspace_window_buffer; … … 80 82 UWB_ALIGNMENT); 81 83 } 84 return EOK; 82 85 } 83 86 -
kernel/genarch/src/mm/asid_fifo.c
r88e43bc r436a0a5 65 65 #if (!FIFO_STATIC) 66 66 fifo_create(free_asids); 67 if (!free_asids.fifo) 68 panic("Not enough memory to allocate ASID FIFO"); 69 // TODO: There really is no reason not to statically allocate it 70 // except to keep binary size low. Once kernel is a regular ELF 71 // binary supporting .bss section (wip as of the late 2018), 72 // the dynamic option should be removed. 67 73 #endif 68 74 -
kernel/genarch/src/ofw/ofw_tree.c
r88e43bc r436a0a5 386 386 static void ofw_tree_node_sysinfo(ofw_tree_node_t *node, const char *path) 387 387 { 388 char *cur_path = (char *) nfmalloc(PATH_MAX_LEN); 388 char *cur_path = malloc(PATH_MAX_LEN); 389 if (!cur_path) 390 panic("Not enough memory to process OFW tree."); 389 391 390 392 for (ofw_tree_node_t *cur = node; cur; cur = cur->peer) { -
kernel/generic/include/adt/fifo.h
r88e43bc r436a0a5 115 115 */ 116 116 #define fifo_create(name) \ 117 name.fifo = nfmalloc(sizeof(*name.fifo) * name.items)117 name.fifo = malloc(sizeof(*name.fifo) * name.items) 118 118 119 119 #endif -
kernel/generic/include/ipc/ipc.h
r88e43bc r436a0a5 47 47 struct answerbox; 48 48 struct task; 49 struct call; 49 50 50 51 typedef enum { … … 67 68 struct task *caller; 68 69 struct answerbox *callee; 70 /* A call prepared for hangup ahead of time, so that it cannot fail. */ 71 struct call *hangup_call; 69 72 ipc_phone_state_t state; 70 73 atomic_t active_calls; … … 171 174 extern void ipc_init(void); 172 175 173 extern call_t *ipc_call_alloc(unsigned int); 174 extern void ipc_call_free(call_t *); 175 extern void ipc_call_hold(call_t *); 176 extern void ipc_call_release(call_t *); 176 extern call_t *ipc_call_alloc(void); 177 177 178 178 extern errno_t ipc_call_sync(phone_t *, call_t *); -
kernel/generic/include/mm/as.h
r88e43bc r436a0a5 325 325 326 326 /* Introspection functions. */ 327 extern void as_get_area_info(as_t *, as_area_info_t **, size_t *);327 extern as_area_info_t *as_get_area_info(as_t *, size_t *); 328 328 extern void as_print(as_t *); 329 329 -
kernel/generic/include/mm/slab.h
r88e43bc r436a0a5 146 146 extern void free(void *); 147 147 148 extern void *nfmalloc(size_t)149 __attribute__((malloc, returns_nonnull));150 151 148 #endif 152 149 -
kernel/generic/include/proc/thread.h
r88e43bc r436a0a5 225 225 226 226 #ifndef thread_create_arch 227 extern void thread_create_arch(thread_t *);227 extern errno_t thread_create_arch(thread_t *, thread_flags_t); 228 228 #endif 229 229 -
kernel/generic/src/console/kconsole.c
r88e43bc r436a0a5 219 219 const char *hint; 220 220 const char *help; 221 char *output = nfmalloc(MAX_CMDLINE);222 221 size_t hints_to_show = MAX_TAB_HINTS - 1; 223 222 size_t total_hints_shown = 0; 224 223 bool continue_showing_hints = true; 224 225 char *output = malloc(MAX_CMDLINE); 226 if (!output) { 227 // TODO: fix the function so that it does not need allocation 228 printf("Can't complete command, out of memory.\n"); 229 return 0; 230 } 225 231 226 232 output[0] = 0; … … 325 331 } 326 332 327 NO_TRACE static wchar_t *clever_readline(const char *prompt, indev_t *indev) 333 NO_TRACE static wchar_t *clever_readline(const char *prompt, indev_t *indev, 334 char *tmp) 328 335 { 329 336 printf("%s> ", prompt); … … 332 339 wchar_t *current = history[history_pos]; 333 340 current[0] = 0; 334 char *tmp = nfmalloc(STR_BOUNDS(MAX_CMDLINE));335 341 336 342 while (true) { … … 534 540 } 535 541 536 free(tmp);537 542 return current; 538 543 } … … 809 814 printf("Type \"exit\" to leave the console.\n"); 810 815 811 char *cmdline = nfmalloc(STR_BOUNDS(MAX_CMDLINE)); 816 char *buffer = malloc(STR_BOUNDS(MAX_CMDLINE)); 817 char *cmdline = malloc(STR_BOUNDS(MAX_CMDLINE)); 818 if (!buffer || !cmdline) { 819 // TODO: fix the function so that it does not need allocations 820 printf("Can't start console, out of memory.\n"); 821 free(buffer); 822 free(cmdline); 823 return; 824 } 825 812 826 while (true) { 813 wchar_t *tmp = clever_readline((char *) prompt, stdin );827 wchar_t *tmp = clever_readline((char *) prompt, stdin, buffer); 814 828 size_t len = wstr_length(tmp); 815 829 if (!len) … … 827 841 (void) cmd_info->func(cmd_info->argv); 828 842 } 843 free(buffer); 829 844 free(cmdline); 830 845 } -
kernel/generic/src/ipc/event.c
r88e43bc r436a0a5 147 147 if (event->answerbox != NULL) { 148 148 if (!event->masked) { 149 call_t *call = ipc_call_alloc( FRAME_ATOMIC);149 call_t *call = ipc_call_alloc(); 150 150 151 151 if (call) { -
kernel/generic/src/ipc/ipc.c
r88e43bc r436a0a5 108 108 * TASK->answerbox. 109 109 * 110 * @param flags Parameters for slab_alloc (e.g FRAME_ATOMIC). 111 * 112 * @return If flags permit it, return NULL, or initialized kernel 113 * call structure with one reference. 114 * 115 */ 116 call_t *ipc_call_alloc(unsigned int flags) 117 { 118 call_t *call = slab_alloc(call_cache, flags); 110 * @return Initialized kernel call structure with one reference, or NULL. 111 * 112 */ 113 call_t *ipc_call_alloc(void) 114 { 115 // TODO: Allocate call and kobject in single allocation 116 117 call_t *call = slab_alloc(call_cache, FRAME_ATOMIC); 119 118 if (!call) 120 119 return NULL; 121 120 122 kobject_t *kobj; 123 if (flags & FRAME_ATOMIC) 124 kobj = (kobject_t *) malloc(sizeof(kobject_t)); 125 else 126 kobj = (kobject_t *) nfmalloc(sizeof(kobject_t)); 127 121 kobject_t *kobj = (kobject_t *) malloc(sizeof(kobject_t)); 128 122 if (!kobj) { 129 123 slab_free(call_cache, call); … … 219 213 errno_t ipc_call_sync(phone_t *phone, call_t *request) 220 214 { 221 answerbox_t *mybox = slab_alloc(answerbox_cache, 0); 215 answerbox_t *mybox = slab_alloc(answerbox_cache, FRAME_ATOMIC); 216 if (!mybox) 217 return ENOMEM; 218 222 219 ipc_answerbox_init(mybox, TASK); 223 220 … … 483 480 kobject_put(phone->kobject); 484 481 485 call_t *call = ipc_call_alloc(0); 482 call_t *call = phone->hangup_call; 483 phone->hangup_call = NULL; 484 assert(call); 485 486 486 IPC_SET_IMETHOD(call->data, IPC_M_PHONE_HUNGUP); 487 487 call->request_method = IPC_M_PHONE_HUNGUP; … … 685 685 * to exist as soon as we release it. 686 686 */ 687 call_t *call = ipc_call_alloc(0); 687 call_t *call = phone->hangup_call; 688 phone->hangup_call = NULL; 689 assert(call); 690 688 691 IPC_SET_IMETHOD(call->data, IPC_M_PHONE_HUNGUP); 689 692 call->request_method = IPC_M_PHONE_HUNGUP; -
kernel/generic/src/ipc/ipcrsc.c
r88e43bc r436a0a5 46 46 { 47 47 phone_t *phone = (phone_t *) arg; 48 if (phone->hangup_call) 49 kobject_put(phone->hangup_call->kobject); 48 50 slab_free(phone_cache, phone); 49 51 } … … 79 81 return ENOMEM; 80 82 } 83 call_t *hcall = ipc_call_alloc(); 84 if (!hcall) { 85 cap_free(TASK, handle); 86 slab_free(phone_cache, phone); 87 free(kobj); 88 return ENOMEM; 89 } 81 90 82 91 ipc_phone_init(phone, task); 83 92 phone->state = IPC_PHONE_CONNECTING; 93 phone->hangup_call = hcall; 84 94 85 95 kobject_initialize(kobj, KOBJECT_TYPE_PHONE, phone, -
kernel/generic/src/ipc/irq.c
r88e43bc r436a0a5 529 529 530 530 if (irq->notif_cfg.answerbox) { 531 call_t *call = ipc_call_alloc( FRAME_ATOMIC);531 call_t *call = ipc_call_alloc(); 532 532 if (!call) 533 533 return; … … 565 565 566 566 if (irq->notif_cfg.answerbox) { 567 call_t *call = ipc_call_alloc( FRAME_ATOMIC);567 call_t *call = ipc_call_alloc(); 568 568 if (!call) { 569 569 irq_spinlock_unlock(&irq->lock, true); -
kernel/generic/src/ipc/sysipc.c
r88e43bc r436a0a5 267 267 * @return EOK on success. 268 268 * @return ENOENT if there is no such phone handle. 269 * @return ENOMEM if not enough memory to make the call 269 270 * 270 271 */ … … 276 277 return ENOENT; 277 278 278 call_t *call = ipc_call_alloc(0); 279 call_t *call = ipc_call_alloc(); 280 if (!call) { 281 kobject_put(kobj); 282 return ENOMEM; 283 } 284 279 285 call->priv = priv; 280 286 memcpy(call->data.args, data->args, sizeof(data->args)); … … 373 379 } 374 380 375 call_t *call = ipc_call_alloc(0); 381 call_t *call = ipc_call_alloc(); 382 if (!call) { 383 kobject_put(kobj); 384 return ENOMEM; 385 } 386 376 387 IPC_SET_IMETHOD(call->data, imethod); 377 388 IPC_SET_ARG1(call->data, arg1); … … 420 431 } 421 432 422 call_t *call = ipc_call_alloc(0); 433 call_t *call = ipc_call_alloc(); 434 if (!call) { 435 kobject_put(kobj); 436 return ENOMEM; 437 } 438 423 439 errno_t rc = copy_from_uspace(&call->data.args, &data->args, 424 440 sizeof(call->data.args)); -
kernel/generic/src/lib/str.c
r88e43bc r436a0a5 635 635 { 636 636 size_t size = str_size(src) + 1; 637 char *dest = nfmalloc(size); 638 assert(dest); 637 char *dest = malloc(size); 638 if (!dest) 639 return NULL; 639 640 640 641 str_cpy(dest, size, src); … … 668 669 size = n; 669 670 670 char *dest = nfmalloc(size + 1); 671 assert(dest); 671 char *dest = malloc(size + 1); 672 if (!dest) 673 return NULL; 672 674 673 675 str_ncpy(dest, size + 1, src, size); -
kernel/generic/src/main/kinit.c
r88e43bc r436a0a5 120 120 thread = thread_create(kmp, NULL, TASK, 121 121 THREAD_FLAG_UNCOUNTED, "kmp"); 122 if (thread != NULL) { 123 thread_wire(thread, &cpus[0]); 124 thread_ready(thread); 125 } else 122 if (!thread) 126 123 panic("Unable to create kmp thread."); 127 124 125 thread_wire(thread, &cpus[0]); 126 thread_ready(thread); 128 127 thread_join(thread); 129 128 thread_detach(thread); -
kernel/generic/src/mm/as.c
r88e43bc r436a0a5 151 151 as_t *as_create(unsigned int flags) 152 152 { 153 as_t *as = (as_t *) slab_alloc(as_cache, 0); 153 as_t *as = (as_t *) slab_alloc(as_cache, FRAME_ATOMIC); 154 if (!as) 155 return NULL; 156 154 157 (void) as_create_arch(as, 0); 155 158 … … 2237 2240 * 2238 2241 */ 2239 void as_get_area_info(as_t *as, as_area_info_t **obuf, size_t *osize)2242 as_area_info_t *as_get_area_info(as_t *as, size_t *osize) 2240 2243 { 2241 2244 mutex_lock(&as->lock); … … 2245 2248 2246 2249 size_t isize = area_cnt * sizeof(as_area_info_t); 2247 as_area_info_t *info = nfmalloc(isize); 2250 as_area_info_t *info = malloc(isize); 2251 if (!info) { 2252 mutex_unlock(&as->lock); 2253 return NULL; 2254 } 2248 2255 2249 2256 /* Record area data. */ … … 2267 2274 mutex_unlock(&as->lock); 2268 2275 2269 *obuf = info;2270 2276 *osize = isize; 2277 return info; 2271 2278 } 2272 2279 -
kernel/generic/src/mm/slab.c
r88e43bc r436a0a5 667 667 size_t (*destructor)(void *obj), unsigned int flags) 668 668 { 669 slab_cache_t *cache = slab_alloc(&slab_cache_cache, 0); 669 slab_cache_t *cache = slab_alloc(&slab_cache_cache, FRAME_ATOMIC); 670 if (!cache) 671 panic("Not enough memory to allocate slab cache %s.", name); 672 670 673 _slab_cache_create(cache, name, size, align, constructor, destructor, 671 674 flags); … … 730 733 NO_TRACE static void _slab_free(slab_cache_t *cache, void *obj, slab_t *slab) 731 734 { 735 if (!obj) 736 return; 737 732 738 ipl_t ipl = interrupts_disable(); 733 739 … … 954 960 } 955 961 956 static void *_malloc(size_t size, unsigned int flags)962 void *malloc(size_t size) 957 963 { 958 964 assert(_slab_initialized); … … 964 970 uint8_t idx = fnzb(size - 1) - SLAB_MIN_MALLOC_W + 1; 965 971 966 return slab_alloc(malloc_caches[idx], flags); 967 } 968 969 void *malloc(size_t size) 970 { 971 return _malloc(size, FRAME_ATOMIC); 972 } 973 974 /** Non-failing malloc. 975 * Never returns NULL, but may block forever if no memory is available. 976 */ 977 void *nfmalloc(size_t size) 978 { 979 return _malloc(size, 0); 980 } 981 982 static void *_realloc(void *ptr, size_t size, unsigned int flags) 972 return slab_alloc(malloc_caches[idx], FRAME_ATOMIC); 973 } 974 975 void *realloc(void *ptr, size_t size) 983 976 { 984 977 assert(_slab_initialized); … … 992 985 uint8_t idx = fnzb(size - 1) - SLAB_MIN_MALLOC_W + 1; 993 986 994 new_ptr = slab_alloc(malloc_caches[idx], flags);987 new_ptr = slab_alloc(malloc_caches[idx], FRAME_ATOMIC); 995 988 } else 996 989 new_ptr = NULL; … … 1007 1000 } 1008 1001 1009 void *realloc(void *ptr, size_t size)1010 {1011 return _realloc(ptr, size, FRAME_ATOMIC);1012 }1013 1014 1002 void free(void *ptr) 1015 1003 { -
kernel/generic/src/proc/scheduler.c
r88e43bc r436a0a5 134 134 void scheduler_fpu_lazy_request(void) 135 135 { 136 restart:137 136 fpu_enable(); 138 137 irq_spinlock_lock(&CPU->lock, false); … … 153 152 fpu_context_restore(THREAD->saved_fpu_context); 154 153 } else { 155 /* Allocate FPU context */156 if (!THREAD->saved_fpu_context) {157 /* Might sleep */158 irq_spinlock_unlock(&THREAD->lock, false);159 irq_spinlock_unlock(&CPU->lock, false);160 THREAD->saved_fpu_context =161 (fpu_context_t *) slab_alloc(fpu_context_cache, 0);162 163 /* We may have switched CPUs during slab_alloc */164 goto restart;165 }166 154 fpu_init(); 167 155 THREAD->fpu_context_exists = true; -
kernel/generic/src/proc/task.c
r88e43bc r436a0a5 199 199 task_t *task_create(as_t *as, const char *name) 200 200 { 201 task_t *task = (task_t *) slab_alloc(task_cache, 0);202 if ( task == NULL) {201 task_t *task = (task_t *) slab_alloc(task_cache, FRAME_ATOMIC); 202 if (!task) 203 203 return NULL; 204 }205 204 206 205 task_create_arch(task); -
kernel/generic/src/proc/thread.c
r88e43bc r436a0a5 165 165 166 166 #ifdef CONFIG_FPU 167 #ifdef CONFIG_FPU_LAZY 168 thread->saved_fpu_context = NULL; 169 #else /* CONFIG_FPU_LAZY */ 170 thread->saved_fpu_context = slab_alloc(fpu_context_cache, kmflags); 167 thread->saved_fpu_context = slab_alloc(fpu_context_cache, 168 FRAME_ATOMIC | kmflags); 171 169 if (!thread->saved_fpu_context) 172 170 return ENOMEM; 173 #endif /* CONFIG_FPU_LAZY */174 171 #endif /* CONFIG_FPU */ 175 172 … … 200 197 if (!stack_phys) { 201 198 #ifdef CONFIG_FPU 202 if (thread->saved_fpu_context)203 199 assert(thread->saved_fpu_context); 200 slab_free(fpu_context_cache, thread->saved_fpu_context); 204 201 #endif 205 202 return ENOMEM; … … 226 223 227 224 #ifdef CONFIG_FPU 228 if (thread->saved_fpu_context)229 225 assert(thread->saved_fpu_context); 226 slab_free(fpu_context_cache, thread->saved_fpu_context); 230 227 #endif 231 228 … … 342 339 thread_flags_t flags, const char *name) 343 340 { 344 thread_t *thread = (thread_t *) slab_alloc(thread_cache, 0);341 thread_t *thread = (thread_t *) slab_alloc(thread_cache, FRAME_ATOMIC); 345 342 if (!thread) 346 343 return NULL; 344 345 if (thread_create_arch(thread, flags) != EOK) { 346 slab_free(thread_cache, thread); 347 return NULL; 348 } 347 349 348 350 /* Not needed, but good for debugging */ … … 407 409 udebug_thread_initialize(&thread->udebug); 408 410 #endif 409 410 /* Might depend on previous initialization */411 thread_create_arch(thread);412 411 413 412 if ((flags & THREAD_FLAG_NOATTACH) != THREAD_FLAG_NOATTACH) … … 654 653 655 654 return waitq_sleep_timeout(&thread->join_wq, usec, flags, NULL); 655 656 // FIXME: join should deallocate the thread. 657 // Current code calls detach after join, that's contrary to how 658 // join is used in other threading APIs. 656 659 } 657 660 -
kernel/generic/src/sysinfo/sysinfo.c
r88e43bc r436a0a5 204 204 205 205 *psubtree = 206 (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, 0); 207 assert(*psubtree); 206 (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, FRAME_ATOMIC); 207 if (!*psubtree) 208 return NULL; 208 209 209 210 /* Fill in item name up to the delimiter */ 210 211 (*psubtree)->name = str_ndup(name, i); 211 assert((*psubtree)->name); 212 if (!(*psubtree)->name) { 213 slab_free(sysinfo_item_cache, *psubtree); 214 return NULL; 215 } 212 216 213 217 /* Create subtree items */ 214 218 if (name[i] == '.') { 215 219 (*psubtree)->subtree_type = SYSINFO_SUBTREE_TABLE; 216 returnsysinfo_create_path(name + i + 1,220 sysinfo_item_t *item = sysinfo_create_path(name + i + 1, 217 221 &((*psubtree)->subtree.table)); 222 if (!item) { 223 free((*psubtree)->name); 224 slab_free(sysinfo_item_cache, *psubtree); 225 } 226 return item; 218 227 } 219 228 … … 271 280 272 281 sysinfo_item_t *item = 273 (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, 0); 274 assert(item); 282 (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, FRAME_ATOMIC); 283 if (!item) 284 return NULL; 275 285 276 286 cur->next = item; … … 278 288 /* Fill in item name up to the delimiter */ 279 289 item->name = str_ndup(name, i); 280 assert(item->name); 290 if (!item->name) { 291 slab_free(sysinfo_item_cache, item); 292 return NULL; 293 } 281 294 282 295 /* Create subtree items */ 283 296 if (name[i] == '.') { 284 297 item->subtree_type = SYSINFO_SUBTREE_TABLE; 285 return sysinfo_create_path(name + i + 1, 286 &(item->subtree.table)); 298 sysinfo_item_t *sub = sysinfo_create_path( 299 name + i + 1, &(item->subtree.table)); 300 if (!sub) { 301 free(item->name); 302 slab_free(sysinfo_item_cache, item); 303 return NULL; 304 } 305 return sub; 287 306 } 288 307 … … 318 337 item->val_type = SYSINFO_VAL_VAL; 319 338 item->val.val = val; 339 } else { 340 printf("Could not set sysinfo item %s.\n", name); 320 341 } 321 342 … … 350 371 item->val.data.data = data; 351 372 item->val.data.size = size; 373 } else { 374 printf("Could not set sysinfo item %s.\n", name); 352 375 } 353 376 … … 378 401 item->val.gen_val.fn = fn; 379 402 item->val.gen_val.data = data; 403 } else { 404 printf("Could not set sysinfo item %s.\n", name); 380 405 } 381 406 … … 411 436 item->val.gen_data.fn = fn; 412 437 item->val.gen_data.data = data; 438 } else { 439 printf("Could not set sysinfo item %s.\n", name); 413 440 } 414 441 … … 434 461 if (item != NULL) 435 462 item->val_type = SYSINFO_VAL_UNDEFINED; 463 else 464 printf("Could not set sysinfo item %s.\n", name); 436 465 437 466 mutex_unlock(&sysinfo_lock); … … 466 495 item->subtree.generator.fn = fn; 467 496 item->subtree.generator.data = data; 497 } else { 498 printf("Could not set sysinfo item %s.\n", name); 468 499 } 469 500 … … 654 685 return ret; 655 686 656 char *path = (char *) nfmalloc(size + 1); 657 assert(path); 687 // TODO: Change this so that allocation is not needed. 688 char *path = malloc(size + 1); 689 if (!path) 690 return ret; 658 691 659 692 if ((copy_from_uspace(path, ptr, size + 1) == 0) && … … 763 796 return ret; 764 797 765 char *path = (char *) nfmalloc(size + 1); 766 assert(path); 798 // TODO: Change this so that allocation is not needed. 799 char *path = malloc(size + 1); 800 if (!path) 801 return ret; 767 802 768 803 if ((copy_from_uspace(path, ptr, size + 1) == 0) && -
kernel/generic/src/udebug/udebug_ipc.c
r88e43bc r436a0a5 266 266 size_t data_size; 267 267 size_t buf_size; 268 void*data;268 as_area_info_t *data; 269 269 270 270 uspace_addr = IPC_GET_ARG2(call->data); /* Destination address */ … … 274 274 * Read area list. 275 275 */ 276 as_get_area_info(AS, (as_area_info_t **) &data, &data_size); 276 data = as_get_area_info(AS, &data_size); 277 if (!data) { 278 IPC_SET_RETVAL(call->data, ENOMEM); 279 ipc_answer(&TASK->kb.box, call); 280 return; 281 } 277 282 278 283 /* Copy MAX(buf_size, data_size) bytes */ … … 297 302 298 303 IPC_SET_ARG3(call->data, data_size); 299 call->buffer = data;304 call->buffer = (uint8_t *) data; 300 305 301 306 ipc_answer(&TASK->kb.box, call); -
kernel/test/mm/slab1.c
r88e43bc r436a0a5 50 50 51 51 for (i = 0; i < count; i++) { 52 data[i] = slab_alloc(cache, 0); 53 memsetb(data[i], size, 0); 52 data[i] = slab_alloc(cache, FRAME_ATOMIC); 53 if (data[i]) 54 memsetb(data[i], size, 0); 54 55 } 55 56 … … 66 67 67 68 for (i = 0; i < count; i++) { 68 data[i] = slab_alloc(cache, 0); 69 memsetb(data[i], size, 0); 69 data[i] = slab_alloc(cache, FRAME_ATOMIC); 70 if (data[i]) 71 memsetb(data[i], size, 0); 70 72 } 71 73 … … 82 84 83 85 for (i = count / 2; i < count; i++) { 84 data[i] = slab_alloc(cache, 0); 85 memsetb(data[i], size, 0); 86 data[i] = slab_alloc(cache, FRAME_ATOMIC); 87 if (data[i]) 88 memsetb(data[i], size, 0); 86 89 } 87 90 … … 131 134 for (j = 0; j < 10; j++) { 132 135 for (i = 0; i < THR_MEM_COUNT; i++) 133 thr_data[offs][i] = slab_alloc(thr_cache, 0);136 thr_data[offs][i] = slab_alloc(thr_cache, FRAME_ATOMIC); 134 137 for (i = 0; i < THR_MEM_COUNT / 2; i++) 135 138 slab_free(thr_cache, thr_data[offs][i]); 136 139 for (i = 0; i < THR_MEM_COUNT / 2; i++) 137 thr_data[offs][i] = slab_alloc(thr_cache, 0);140 thr_data[offs][i] = slab_alloc(thr_cache, FRAME_ATOMIC); 138 141 for (i = 0; i < THR_MEM_COUNT; i++) 139 142 slab_free(thr_cache, thr_data[offs][i]);
Note:
See TracChangeset
for help on using the changeset viewer.