Changeset 26e7d6d in mainline for kernel/generic/src
- Timestamp:
- 2011-09-19T16:31:00Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a347a11
- Parents:
- 3842a955 (diff), 086290d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/generic/src
- Files:
-
- 28 edited
-
adt/list.c (modified) (1 diff)
-
console/console.c (modified) (12 diffs)
-
ddi/ddi.c (modified) (5 diffs)
-
ddi/irq.c (modified) (1 diff)
-
debug/panic.c (modified) (2 diffs)
-
ipc/event.c (modified) (11 diffs)
-
ipc/ipc.c (modified) (4 diffs)
-
ipc/kbox.c (modified) (1 diff)
-
ipc/sysipc.c (modified) (8 diffs)
-
lib/elf.c (modified) (1 diff)
-
lib/rd.c (modified) (1 diff)
-
mm/as.c (modified) (1 diff)
-
mm/frame.c (modified) (1 diff)
-
mm/slab.c (modified) (1 diff)
-
printf/printf_core.c (modified) (5 diffs)
-
proc/program.c (modified) (2 diffs)
-
proc/task.c (modified) (3 diffs)
-
proc/thread.c (modified) (2 diffs)
-
synch/condvar.c (modified) (1 diff)
-
synch/futex.c (modified) (1 diff)
-
synch/mutex.c (modified) (1 diff)
-
synch/semaphore.c (modified) (1 diff)
-
synch/waitq.c (modified) (1 diff)
-
syscall/syscall.c (modified) (1 diff)
-
sysinfo/stats.c (modified) (1 diff)
-
sysinfo/sysinfo.c (modified) (1 diff)
-
time/clock.c (modified) (1 diff)
-
time/delay.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/adt/list.c
r3842a955 r26e7d6d 49 49 * @param list List to look in. 50 50 * 51 * @return true if link is contained in head, false otherwise.51 * @return true if link is contained in list, false otherwise. 52 52 * 53 53 */ -
kernel/generic/src/console/console.c
r3842a955 r26e7d6d 87 87 }; 88 88 89 static void stdout_write(outdev_t *, wchar_t , bool);89 static void stdout_write(outdev_t *, wchar_t); 90 90 static void stdout_redraw(outdev_t *); 91 91 … … 95 95 }; 96 96 97 /** Silence output */98 bool silent= false;97 /** Override kernel console lockout */ 98 bool console_override = false; 99 99 100 100 /** Standard input and output character devices */ … … 122 122 } 123 123 124 static void stdout_write(outdev_t *dev, wchar_t ch , bool silent)124 static void stdout_write(outdev_t *dev, wchar_t ch) 125 125 { 126 126 list_foreach(dev->list, cur) { 127 127 outdev_t *sink = list_get_instance(cur, outdev_t, link); 128 128 if ((sink) && (sink->op->write)) 129 sink->op->write(sink, ch , silent);129 sink->op->write(sink, ch); 130 130 } 131 131 } … … 156 156 klog_parea.frames = SIZE2FRAMES(sizeof(klog)); 157 157 klog_parea.unpriv = false; 158 klog_parea.mapped = false; 158 159 ddi_parea_register(&klog_parea); 159 160 … … 167 168 void grab_console(void) 168 169 { 169 bool prev = silent;170 171 silent = false;170 bool prev = console_override; 171 172 console_override = true; 172 173 if ((stdout) && (stdout->op->redraw)) 173 174 stdout->op->redraw(stdout); 174 175 175 if ((stdin) && ( prev)) {176 if ((stdin) && (!prev)) { 176 177 /* 177 178 * Force the console to print the prompt. … … 183 184 void release_console(void) 184 185 { 185 // FIXME arch_release_console 186 silent = true; 187 } 188 189 /** Tell kernel to get keyboard/console access again */ 190 sysarg_t sys_debug_enable_console(void) 186 console_override = false; 187 } 188 189 /** Activate kernel console override */ 190 sysarg_t sys_debug_activate_console(void) 191 191 { 192 192 #ifdef CONFIG_KCONSOLE … … 196 196 return false; 197 197 #endif 198 }199 200 /** Tell kernel to relinquish keyboard/console access */201 sysarg_t sys_debug_disable_console(void)202 {203 release_console();204 return true;205 198 } 206 199 … … 255 248 } 256 249 257 void klog_update(void )250 void klog_update(void *event) 258 251 { 259 252 if (!atomic_get(&klog_inited)) … … 289 282 */ 290 283 spinlock_unlock(&klog_lock); 291 stdout->op->write(stdout, tmp , silent);284 stdout->op->write(stdout, tmp); 292 285 spinlock_lock(&klog_lock); 293 286 } … … 317 310 * it should be no longer buffered. 318 311 */ 319 stdout->op->write(stdout, ch , silent);312 stdout->op->write(stdout, ch); 320 313 } else { 321 314 /* … … 334 327 /* Force notification on newline */ 335 328 if (ch == '\n') 336 klog_update( );329 klog_update(NULL); 337 330 } 338 331 … … 365 358 free(data); 366 359 } else 367 klog_update( );360 klog_update(NULL); 368 361 369 362 return size; -
kernel/generic/src/ddi/ddi.c
r3842a955 r26e7d6d 41 41 42 42 #include <ddi/ddi.h> 43 #include <ddi/ddi_arg.h>44 43 #include <proc/task.h> 45 44 #include <security/cap.h> … … 122 121 backend_data.frames = pages; 123 122 124 /* Find the zone of the physical memory */ 123 /* 124 * Check if the memory region is explicitly enabled 125 * for mapping by any parea structure. 126 */ 127 128 mutex_lock(&parea_lock); 129 btree_node_t *nodep; 130 parea_t *parea = (parea_t *) btree_search(&parea_btree, 131 (btree_key_t) pf, &nodep); 132 133 if ((parea != NULL) && (parea->frames >= pages)) { 134 if ((!priv) && (!parea->unpriv)) { 135 mutex_unlock(&parea_lock); 136 return EPERM; 137 } 138 139 goto map; 140 } 141 142 parea = NULL; 143 mutex_unlock(&parea_lock); 144 145 /* 146 * Check if the memory region is part of physical 147 * memory generally enabled for mapping. 148 */ 149 125 150 irq_spinlock_lock(&zones.lock, true); 126 151 size_t znum = find_zone(ADDR2PFN(pf), pages, 0); … … 153 178 } 154 179 155 if (zone_flags_available(zones.info[znum].flags)) {156 /*157 * Frames are part of physical memory, check158 * if the memory region is enabled for mapping.159 */160 irq_spinlock_unlock(&zones.lock, true);161 162 mutex_lock(&parea_lock);163 btree_node_t *nodep;164 parea_t *parea = (parea_t *) btree_search(&parea_btree,165 (btree_key_t) pf, &nodep);166 167 if ((!parea) || (parea->frames < pages)) {168 mutex_unlock(&parea_lock);169 return ENOENT;170 }171 172 if (!priv) {173 if (!parea->unpriv) {174 mutex_unlock(&parea_lock);175 return EPERM;176 }177 }178 179 mutex_unlock(&parea_lock);180 goto map;181 }182 183 180 irq_spinlock_unlock(&zones.lock, true); 184 181 return ENOENT; … … 188 185 AS_AREA_ATTR_NONE, &phys_backend, &backend_data)) { 189 186 /* 190 * The address space area could not have beencreated.187 * The address space area was not created. 191 188 * We report it using ENOMEM. 192 189 */ 190 191 if (parea != NULL) 192 mutex_unlock(&parea_lock); 193 193 194 return ENOMEM; 194 195 } … … 197 198 * Mapping is created on-demand during page fault. 198 199 */ 199 return 0; 200 201 if (parea != NULL) { 202 parea->mapped = true; 203 mutex_unlock(&parea_lock); 204 } 205 206 return EOK; 200 207 } 201 208 -
kernel/generic/src/ddi/irq.c
r3842a955 r26e7d6d 275 275 { 276 276 /* 277 * If the kernel console is silenced, 278 * then try first the uspace handlers, 279 * eventually fall back to kernel handlers. 277 * If the kernel console override is on, 278 * then try first the kernel handlers 279 * and eventually fall back to uspace 280 * handlers. 280 281 * 281 * I f the kernel console is active,282 * then do it the other way around.282 * In the usual case the uspace handlers 283 * have precedence. 283 284 */ 284 if (silent) { 285 irq_t *irq = irq_dispatch_and_lock_uspace(inr); 285 286 if (console_override) { 287 irq_t *irq = irq_dispatch_and_lock_kernel(inr); 286 288 if (irq) 287 289 return irq; 288 290 289 return irq_dispatch_and_lock_ kernel(inr);290 } 291 292 irq_t *irq = irq_dispatch_and_lock_ kernel(inr);291 return irq_dispatch_and_lock_uspace(inr); 292 } 293 294 irq_t *irq = irq_dispatch_and_lock_uspace(inr); 293 295 if (irq) 294 296 return irq; 295 297 296 return irq_dispatch_and_lock_ uspace(inr);298 return irq_dispatch_and_lock_kernel(inr); 297 299 } 298 300 -
kernel/generic/src/debug/panic.c
r3842a955 r26e7d6d 48 48 uintptr_t address, const char *fmt, ...) 49 49 { 50 va_list args; 51 52 silent = false; 50 console_override = true; 53 51 54 52 printf("\n%s Kernel panic ", BANNER_LEFT); … … 57 55 printf("due to "); 58 56 57 va_list args; 59 58 va_start(args, fmt); 60 59 if (cat == PANIC_ASSERT) { -
kernel/generic/src/ipc/event.c
r3842a955 r26e7d6d 36 36 37 37 #include <ipc/event.h> 38 #include <ipc/event_types.h>39 38 #include <mm/slab.h> 40 39 #include <typedefs.h> 41 40 #include <synch/spinlock.h> 42 41 #include <console/console.h> 42 #include <proc/task.h> 43 43 #include <memstr.h> 44 44 #include <errno.h> … … 48 48 static event_t events[EVENT_END]; 49 49 50 static void event_initialize(event_t *event) 51 { 52 spinlock_initialize(&event->lock, "event.lock"); 53 event->answerbox = NULL; 54 event->counter = 0; 55 event->imethod = 0; 56 event->masked = false; 57 event->unmask_callback = NULL; 58 } 59 60 static event_t *evno2event(int evno, task_t *t) 61 { 62 ASSERT(evno < EVENT_TASK_END); 63 64 event_t *event; 65 66 if (evno < EVENT_END) 67 event = &events[(event_type_t) evno]; 68 else 69 event = &t->events[(event_task_type_t) evno - EVENT_END]; 70 71 return event; 72 } 73 50 74 /** Initialize kernel events. 51 75 * … … 53 77 void event_init(void) 54 78 { 55 for (unsigned int i = 0; i < EVENT_END; i++) { 56 spinlock_initialize(&events[i].lock, "event.lock"); 57 events[i].answerbox = NULL; 58 events[i].counter = 0; 59 events[i].imethod = 0; 60 events[i].masked = false; 61 events[i].unmask_callback = NULL; 62 } 63 } 79 for (unsigned int i = 0; i < EVENT_END; i++) 80 event_initialize(evno2event(i, NULL)); 81 } 82 83 void event_task_init(task_t *task) 84 { 85 for (unsigned int i = EVENT_END; i < EVENT_TASK_END; i++) 86 event_initialize(evno2event(i, task)); 87 } 88 64 89 65 90 /** Unsubscribe kernel events associated with an answerbox … … 84 109 } 85 110 111 static void _event_set_unmask_callback(event_t *event, event_callback_t callback) 112 { 113 spinlock_lock(&event->lock); 114 event->unmask_callback = callback; 115 spinlock_unlock(&event->lock); 116 } 117 86 118 /** Define a callback function for the event unmask event. 87 119 * … … 95 127 ASSERT(evno < EVENT_END); 96 128 97 spinlock_lock(&events[evno].lock); 98 events[evno].unmask_callback = callback; 99 spinlock_unlock(&events[evno].lock); 129 _event_set_unmask_callback(evno2event(evno, NULL), callback); 130 } 131 132 void event_task_set_unmask_callback(task_t *task, event_task_type_t evno, 133 event_callback_t callback) 134 { 135 ASSERT(evno >= (int) EVENT_END); 136 ASSERT(evno < EVENT_TASK_END); 137 138 _event_set_unmask_callback(evno2event(evno, task), callback); 139 } 140 141 static int event_enqueue(event_t *event, bool mask, sysarg_t a1, sysarg_t a2, 142 sysarg_t a3, sysarg_t a4, sysarg_t a5) 143 { 144 int res; 145 146 spinlock_lock(&event->lock); 147 148 if (event->answerbox != NULL) { 149 if (!event->masked) { 150 call_t *call = ipc_call_alloc(FRAME_ATOMIC); 151 152 if (call) { 153 call->flags |= IPC_CALL_NOTIF; 154 call->priv = ++event->counter; 155 156 IPC_SET_IMETHOD(call->data, event->imethod); 157 IPC_SET_ARG1(call->data, a1); 158 IPC_SET_ARG2(call->data, a2); 159 IPC_SET_ARG3(call->data, a3); 160 IPC_SET_ARG4(call->data, a4); 161 IPC_SET_ARG5(call->data, a5); 162 163 call->data.task_id = TASK ? TASK->taskid : 0; 164 165 irq_spinlock_lock(&event->answerbox->irq_lock, true); 166 list_append(&call->link, &event->answerbox->irq_notifs); 167 irq_spinlock_unlock(&event->answerbox->irq_lock, true); 168 169 waitq_wakeup(&event->answerbox->wq, WAKEUP_FIRST); 170 171 if (mask) 172 event->masked = true; 173 174 res = EOK; 175 } else 176 res = ENOMEM; 177 } else 178 res = EBUSY; 179 } else 180 res = ENOENT; 181 182 spinlock_unlock(&event->lock); 183 return res; 100 184 } 101 185 … … 124 208 ASSERT(evno < EVENT_END); 125 209 126 spinlock_lock(&events[evno].lock); 127 128 int ret; 129 130 if (events[evno].answerbox != NULL) { 131 if (!events[evno].masked) { 132 call_t *call = ipc_call_alloc(FRAME_ATOMIC); 133 134 if (call) { 135 call->flags |= IPC_CALL_NOTIF; 136 call->priv = ++events[evno].counter; 137 138 IPC_SET_IMETHOD(call->data, events[evno].imethod); 139 IPC_SET_ARG1(call->data, a1); 140 IPC_SET_ARG2(call->data, a2); 141 IPC_SET_ARG3(call->data, a3); 142 IPC_SET_ARG4(call->data, a4); 143 IPC_SET_ARG5(call->data, a5); 144 145 irq_spinlock_lock(&events[evno].answerbox->irq_lock, true); 146 list_append(&call->link, &events[evno].answerbox->irq_notifs); 147 irq_spinlock_unlock(&events[evno].answerbox->irq_lock, true); 148 149 waitq_wakeup(&events[evno].answerbox->wq, WAKEUP_FIRST); 150 151 if (mask) 152 events[evno].masked = true; 153 154 ret = EOK; 155 } else 156 ret = ENOMEM; 157 } else 158 ret = EBUSY; 159 } else 160 ret = ENOENT; 161 162 spinlock_unlock(&events[evno].lock); 163 164 return ret; 210 return event_enqueue(evno2event(evno, NULL), mask, a1, a2, a3, a4, a5); 211 } 212 213 /** Send per-task kernel notification event 214 * 215 * @param task Destination task. 216 * @param evno Event type. 217 * @param mask Mask further notifications after a successful 218 * sending. 219 * @param a1 First argument. 220 * @param a2 Second argument. 221 * @param a3 Third argument. 222 * @param a4 Fourth argument. 223 * @param a5 Fifth argument. 224 * 225 * @return EOK if notification was successfully sent. 226 * @return ENOMEM if the notification IPC message failed to allocate. 227 * @return EBUSY if the notifications of the given type are 228 * currently masked. 229 * @return ENOENT if the notifications of the given type are 230 * currently not subscribed. 231 * 232 */ 233 int event_task_notify(task_t *task, event_task_type_t evno, bool mask, 234 sysarg_t a1, sysarg_t a2, sysarg_t a3, sysarg_t a4, sysarg_t a5) 235 { 236 ASSERT(evno >= (int) EVENT_END); 237 ASSERT(evno < EVENT_TASK_END); 238 239 return event_enqueue(evno2event(evno, task), mask, a1, a2, a3, a4, a5); 165 240 } 166 241 … … 177 252 * 178 253 */ 179 static int event_subscribe(event_t ype_t evno, sysarg_t imethod,254 static int event_subscribe(event_t *event, sysarg_t imethod, 180 255 answerbox_t *answerbox) 181 256 { 182 ASSERT(evno < EVENT_END);183 184 spinlock_lock(&events[evno].lock);185 186 257 int res; 187 188 if (events[evno].answerbox == NULL) { 189 events[evno].answerbox = answerbox; 190 events[evno].imethod = imethod; 191 events[evno].counter = 0; 192 events[evno].masked = false; 258 259 spinlock_lock(&event->lock); 260 261 if (event->answerbox == NULL) { 262 event->answerbox = answerbox; 263 event->imethod = imethod; 264 event->counter = 0; 265 event->masked = false; 193 266 res = EOK; 194 267 } else 195 268 res = EEXISTS; 196 269 197 spinlock_unlock(&event s[evno].lock);270 spinlock_unlock(&event->lock); 198 271 199 272 return res; … … 205 278 * 206 279 */ 207 static void event_unmask(event_type_t evno) 208 { 209 ASSERT(evno < EVENT_END); 210 211 spinlock_lock(&events[evno].lock); 212 events[evno].masked = false; 213 event_callback_t callback = events[evno].unmask_callback; 214 spinlock_unlock(&events[evno].lock); 280 static void event_unmask(event_t *event) 281 { 282 spinlock_lock(&event->lock); 283 event->masked = false; 284 event_callback_t callback = event->unmask_callback; 285 spinlock_unlock(&event->lock); 215 286 216 287 /* … … 219 290 */ 220 291 if (callback != NULL) 221 callback( );292 callback(event); 222 293 } 223 294 … … 236 307 sysarg_t sys_event_subscribe(sysarg_t evno, sysarg_t imethod) 237 308 { 238 if (evno >= EVENT_ END)309 if (evno >= EVENT_TASK_END) 239 310 return ELIMIT; 240 311 241 return (sysarg_t) event_subscribe( (event_type_t) evno, (sysarg_t)242 imethod, &TASK->answerbox);312 return (sysarg_t) event_subscribe(evno2event(evno, TASK), 313 (sysarg_t) imethod, &TASK->answerbox); 243 314 } 244 315 … … 258 329 sysarg_t sys_event_unmask(sysarg_t evno) 259 330 { 260 if (evno >= EVENT_ END)331 if (evno >= EVENT_TASK_END) 261 332 return ELIMIT; 262 333 263 event_unmask((event_type_t) evno); 334 event_unmask(evno2event(evno, TASK)); 335 264 336 return EOK; 265 337 } -
kernel/generic/src/ipc/ipc.c
r3842a955 r26e7d6d 38 38 */ 39 39 40 #include <synch/synch.h>41 40 #include <synch/spinlock.h> 42 41 #include <synch/mutex.h> 43 42 #include <synch/waitq.h> 44 #include <synch/synch.h>45 43 #include <ipc/ipc.h> 46 #include < ipc/ipc_methods.h>44 #include <abi/ipc/methods.h> 47 45 #include <ipc/kbox.h> 48 46 #include <ipc/event.h> … … 232 230 } 233 231 } 232 233 call->data.task_id = TASK->taskid; 234 234 235 235 if (do_lock) … … 296 296 atomic_inc(&phone->active_calls); 297 297 call->data.phone = phone; 298 call->data.task = TASK;298 call->data.task_id = TASK->taskid; 299 299 } 300 300 … … 408 408 call->caller_phone = call->data.phone; 409 409 call->data.phone = newphone; 410 call->data.task = TASK;410 call->data.task_id = TASK->taskid; 411 411 } 412 412 -
kernel/generic/src/ipc/kbox.c
r3842a955 r26e7d6d 33 33 */ 34 34 35 #include <synch/synch.h>36 35 #include <synch/spinlock.h> 37 36 #include <synch/mutex.h> 38 37 #include <ipc/ipc.h> 39 #include < ipc/ipc_methods.h>38 #include <abi/ipc/methods.h> 40 39 #include <ipc/ipcrsc.h> 41 40 #include <arch.h> -
kernel/generic/src/ipc/sysipc.c
r3842a955 r26e7d6d 40 40 #include <debug.h> 41 41 #include <ipc/ipc.h> 42 #include < ipc/ipc_methods.h>42 #include <abi/ipc/methods.h> 43 43 #include <ipc/sysipc.h> 44 44 #include <ipc/irq.h> 45 45 #include <ipc/ipcrsc.h> 46 #include <ipc/event.h> 46 47 #include <ipc/kbox.h> 47 48 #include <synch/waitq.h> … … 53 54 #include <mm/as.h> 54 55 #include <print.h> 56 #include <macros.h> 55 57 56 58 /** … … 134 136 case IPC_M_DATA_WRITE: 135 137 case IPC_M_DATA_READ: 138 case IPC_M_STATE_CHANGE_AUTHORIZE: 136 139 return true; 137 140 default: … … 164 167 case IPC_M_DATA_WRITE: 165 168 case IPC_M_DATA_READ: 169 case IPC_M_STATE_CHANGE_AUTHORIZE: 166 170 return true; 167 171 default: … … 249 253 /* The connection was accepted */ 250 254 phone_connect(phoneid, &answer->sender->answerbox); 251 /* Set 'task hash' as arg4 of response */252 IPC_SET_ARG4(answer->data, (sysarg_t) TASK);253 255 /* Set 'phone hash' as arg5 of response */ 254 256 IPC_SET_ARG5(answer->data, … … 334 336 free(answer->buffer); 335 337 answer->buffer = NULL; 338 } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_STATE_CHANGE_AUTHORIZE) { 339 if (!IPC_GET_RETVAL(answer->data)) { 340 /* The recipient authorized the change of state. */ 341 phone_t *recipient_phone; 342 task_t *other_task_s; 343 task_t *other_task_r; 344 int rc; 345 346 rc = phone_get(IPC_GET_ARG1(answer->data), 347 &recipient_phone); 348 if (rc != EOK) { 349 IPC_SET_RETVAL(answer->data, ENOENT); 350 return ENOENT; 351 } 352 353 mutex_lock(&recipient_phone->lock); 354 if (recipient_phone->state != IPC_PHONE_CONNECTED) { 355 mutex_unlock(&recipient_phone->lock); 356 IPC_SET_RETVAL(answer->data, EINVAL); 357 return EINVAL; 358 } 359 360 other_task_r = recipient_phone->callee->task; 361 other_task_s = (task_t *) IPC_GET_ARG5(*olddata); 362 363 /* 364 * See if both the sender and the recipient meant the 365 * same third party task. 366 */ 367 if (other_task_r != other_task_s) { 368 IPC_SET_RETVAL(answer->data, EINVAL); 369 rc = EINVAL; 370 } else { 371 rc = event_task_notify_5(other_task_r, 372 EVENT_TASK_STATE_CHANGE, false, 373 IPC_GET_ARG1(*olddata), 374 IPC_GET_ARG2(*olddata), 375 IPC_GET_ARG3(*olddata), 376 LOWER32(olddata->task_id), 377 UPPER32(olddata->task_id)); 378 IPC_SET_RETVAL(answer->data, rc); 379 } 380 381 mutex_unlock(&recipient_phone->lock); 382 return rc; 383 } 336 384 } 337 385 … … 427 475 case IPC_M_DATA_READ: { 428 476 size_t size = IPC_GET_ARG2(call->data); 429 if (size <= 0)430 return ELIMIT;431 477 if (size > DATA_XFER_LIMIT) { 432 478 int flags = IPC_GET_ARG3(call->data); … … 458 504 } 459 505 506 break; 507 } 508 case IPC_M_STATE_CHANGE_AUTHORIZE: { 509 phone_t *sender_phone; 510 task_t *other_task_s; 511 512 if (phone_get(IPC_GET_ARG5(call->data), &sender_phone) != EOK) 513 return ENOENT; 514 515 mutex_lock(&sender_phone->lock); 516 if (sender_phone->state != IPC_PHONE_CONNECTED) { 517 mutex_unlock(&sender_phone->lock); 518 return EINVAL; 519 } 520 521 other_task_s = sender_phone->callee->task; 522 523 mutex_unlock(&sender_phone->lock); 524 525 /* Remember the third party task hash. */ 526 IPC_SET_ARG5(call->data, (sysarg_t) other_task_s); 460 527 break; 461 528 } -
kernel/generic/src/lib/elf.c
r3842a955 r26e7d6d 47 47 #include <macros.h> 48 48 #include <arch.h> 49 50 #include <lib/elf_load.h> 49 51 50 52 static const char *error_codes[] = { -
kernel/generic/src/lib/rd.c
r3842a955 r26e7d6d 91 91 rd_parea.frames = SIZE2FRAMES(dsize); 92 92 rd_parea.unpriv = false; 93 rd_parea.mapped = false; 93 94 ddi_parea_register(&rd_parea); 94 95 -
kernel/generic/src/mm/as.c
r3842a955 r26e7d6d 1284 1284 * thing which is forbidden in this context is locking the address space. 1285 1285 * 1286 * When this function is en etered, no spinlocks may be held.1286 * When this function is entered, no spinlocks may be held. 1287 1287 * 1288 1288 * @param old Old address space or NULL. -
kernel/generic/src/mm/frame.c
r3842a955 r26e7d6d 1142 1142 size_t znum = find_zone(pfn, 1, 0); 1143 1143 1144 1145 1144 ASSERT(znum != (size_t) -1); 1146 1145 -
kernel/generic/src/mm/slab.c
r3842a955 r26e7d6d 180 180 unsigned int flags) 181 181 { 182 183 184 182 size_t zone = 0; 185 183 -
kernel/generic/src/printf/printf_core.c
r3842a955 r26e7d6d 75 75 #define PRINT_NUMBER_BUFFER_SIZE (64 + 5) 76 76 77 /** Get signed or unsigned integer argument */ 78 #define PRINTF_GET_INT_ARGUMENT(type, ap, flags) \ 79 ({ \ 80 unsigned type res; \ 81 \ 82 if ((flags) & __PRINTF_FLAG_SIGNED) { \ 83 signed type arg = va_arg((ap), signed type); \ 84 \ 85 if (arg < 0) { \ 86 res = -arg; \ 87 (flags) |= __PRINTF_FLAG_NEGATIVE; \ 88 } else \ 89 res = arg; \ 90 } else \ 91 res = va_arg((ap), unsigned type); \ 92 \ 93 res; \ 94 }) 95 77 96 /** Enumeration of possible arguments types. 78 97 */ … … 207 226 } 208 227 209 return (int) (counter + 1);228 return (int) (counter); 210 229 } 211 230 … … 245 264 } 246 265 247 return (int) (counter + 1);266 return (int) (counter); 248 267 } 249 268 … … 832 851 size_t size; 833 852 uint64_t number; 853 834 854 switch (qualifier) { 835 855 case PrintfQualifierByte: 836 856 size = sizeof(unsigned char); 837 number = (uint64_t) va_arg(ap, unsigned int);857 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags); 838 858 break; 839 859 case PrintfQualifierShort: 840 860 size = sizeof(unsigned short); 841 number = (uint64_t) va_arg(ap, unsigned int);861 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags); 842 862 break; 843 863 case PrintfQualifierInt: 844 864 size = sizeof(unsigned int); 845 number = (uint64_t) va_arg(ap, unsigned int);865 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags); 846 866 break; 847 867 case PrintfQualifierLong: 848 868 size = sizeof(unsigned long); 849 number = (uint64_t) va_arg(ap, unsigned long);869 number = PRINTF_GET_INT_ARGUMENT(long, ap, flags); 850 870 break; 851 871 case PrintfQualifierLongLong: 852 872 size = sizeof(unsigned long long); 853 number = (uint64_t) va_arg(ap, unsigned long long);873 number = PRINTF_GET_INT_ARGUMENT(long long, ap, flags); 854 874 break; 855 875 case PrintfQualifierPointer: … … 866 886 counter = -counter; 867 887 goto out; 868 }869 870 if (flags & __PRINTF_FLAG_SIGNED) {871 if (number & (0x1 << (size * 8 - 1))) {872 flags |= __PRINTF_FLAG_NEGATIVE;873 874 if (size == sizeof(uint64_t)) {875 number = -((int64_t) number);876 } else {877 number = ~number;878 number &=879 ~(0xFFFFFFFFFFFFFFFFll <<880 (size * 8));881 number++;882 }883 }884 888 } 885 889 -
kernel/generic/src/proc/program.c
r3842a955 r26e7d6d 40 40 #include <proc/thread.h> 41 41 #include <proc/task.h> 42 #include <proc/uarg.h>43 42 #include <mm/as.h> 44 43 #include <mm/slab.h> … … 48 47 #include <ipc/ipcrsc.h> 49 48 #include <security/cap.h> 50 #include <lib/elf .h>49 #include <lib/elf_load.h> 51 50 #include <errno.h> 52 51 #include <print.h> -
kernel/generic/src/proc/task.c
r3842a955 r26e7d6d 50 50 #include <ipc/ipc.h> 51 51 #include <ipc/ipcrsc.h> 52 #include <ipc/event.h> 52 53 #include <print.h> 53 54 #include <errno.h> … … 57 58 #include <syscall/copy.h> 58 59 #include <macros.h> 59 #include <ipc/event.h>60 60 61 61 /** Spinlock protecting the tasks_tree AVL tree. */ … … 201 201 task->ipc_info.irq_notif_received = 0; 202 202 task->ipc_info.forwarded = 0; 203 204 event_task_init(task); 203 205 204 206 #ifdef CONFIG_UDEBUG -
kernel/generic/src/proc/thread.c
r3842a955 r26e7d6d 39 39 #include <proc/thread.h> 40 40 #include <proc/task.h> 41 #include <proc/uarg.h>42 41 #include <mm/frame.h> 43 42 #include <mm/page.h> … … 45 44 #include <arch/cycle.h> 46 45 #include <arch.h> 47 #include <synch/synch.h>48 46 #include <synch/spinlock.h> 49 47 #include <synch/waitq.h> -
kernel/generic/src/synch/condvar.c
r3842a955 r26e7d6d 39 39 #include <synch/mutex.h> 40 40 #include <synch/waitq.h> 41 #include <synch/synch.h>42 41 #include <arch.h> 43 42 -
kernel/generic/src/synch/futex.c
r3842a955 r26e7d6d 39 39 #include <synch/mutex.h> 40 40 #include <synch/spinlock.h> 41 #include <synch/synch.h>42 41 #include <mm/frame.h> 43 42 #include <mm/page.h> -
kernel/generic/src/synch/mutex.c
r3842a955 r26e7d6d 38 38 #include <synch/mutex.h> 39 39 #include <synch/semaphore.h> 40 #include <synch/synch.h>41 40 #include <debug.h> 42 41 #include <arch.h> -
kernel/generic/src/synch/semaphore.c
r3842a955 r26e7d6d 39 39 #include <synch/waitq.h> 40 40 #include <synch/spinlock.h> 41 #include <synch/synch.h>42 41 #include <arch/asm.h> 43 42 #include <arch.h> -
kernel/generic/src/synch/waitq.c
r3842a955 r26e7d6d 45 45 46 46 #include <synch/waitq.h> 47 #include <synch/synch.h>48 47 #include <synch/spinlock.h> 49 48 #include <proc/thread.h> -
kernel/generic/src/syscall/syscall.c
r3842a955 r26e7d6d 181 181 182 182 /* Sysinfo syscalls. */ 183 (syshandler_t) sys_sysinfo_get_ tag,183 (syshandler_t) sys_sysinfo_get_val_type, 184 184 (syshandler_t) sys_sysinfo_get_value, 185 185 (syshandler_t) sys_sysinfo_get_data_size, 186 186 (syshandler_t) sys_sysinfo_get_data, 187 187 188 /* Debug calls */ 189 (syshandler_t) sys_debug_enable_console, 190 (syshandler_t) sys_debug_disable_console 188 /* Kernel console syscalls. */ 189 (syshandler_t) sys_debug_activate_console 191 190 }; 192 191 -
kernel/generic/src/sysinfo/stats.c
r3842a955 r26e7d6d 35 35 36 36 #include <typedefs.h> 37 #include < sysinfo/abi.h>37 #include <abi/sysinfo.h> 38 38 #include <sysinfo/stats.h> 39 39 #include <sysinfo/sysinfo.h> -
kernel/generic/src/sysinfo/sysinfo.c
r3842a955 r26e7d6d 661 661 * 662 662 */ 663 sysarg_t sys_sysinfo_get_ tag(void *path_ptr, size_t path_size)663 sysarg_t sys_sysinfo_get_val_type(void *path_ptr, size_t path_size) 664 664 { 665 665 /* -
kernel/generic/src/time/clock.c
r3842a955 r26e7d6d 94 94 clock_parea.frames = 1; 95 95 clock_parea.unpriv = true; 96 clock_parea.mapped = false; 96 97 ddi_parea_register(&clock_parea); 97 98 -
kernel/generic/src/time/delay.c
r3842a955 r26e7d6d 64 64 65 65 /** @} 66 */66 */
Note:
See TracChangeset
for help on using the changeset viewer.
