- Timestamp:
- 2009-12-12T10:11:35Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 99de22b
- Parents:
- 58d5803d (diff), 1e4cada (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
- Files:
-
- 2 added
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/amd64.c
r58d5803d r387416b 67 67 #include <ddi/irq.h> 68 68 #include <sysinfo/sysinfo.h> 69 #include <memstr.h> 69 70 70 71 /** Disable I/O on non-privileged levels -
kernel/arch/arm32/Makefile.inc
r58d5803d r387416b 61 61 arch/$(KARCH)/src/mm/page.c \ 62 62 arch/$(KARCH)/src/mm/tlb.c \ 63 arch/$(KARCH)/src/mm/page_fault.c 63 arch/$(KARCH)/src/mm/page_fault.c \ 64 arch/$(KARCH)/src/ras.c 64 65 65 66 ifeq ($(MACHINE),testarm) -
kernel/arch/arm32/include/atomic.h
r58d5803d r387416b 37 37 #define KERN_arm32_ATOMIC_H_ 38 38 39 #include <arch/asm.h> 40 39 41 /** Atomic addition. 40 42 * … … 47 49 static inline long atomic_add(atomic_t *val, int i) 48 50 { 49 int ret; 50 volatile long *mem = &(val->count); 51 52 asm volatile ( 53 "1:\n" 54 "ldr r2, [%[mem]]\n" 55 "add r3, r2, %[i]\n" 56 "str r3, %[ret]\n" 57 "swp r3, r3, [%[mem]]\n" 58 "cmp r3, r2\n" 59 "bne 1b\n" 60 : [ret] "=m" (ret) 61 : [mem] "r" (mem), [i] "r" (i) 62 : "r3", "r2" 63 ); 51 long ret; 52 53 /* 54 * This implementation is for UP pre-ARMv6 systems where we do not have 55 * the LDREX and STREX instructions. 56 */ 57 ipl_t ipl = interrupts_disable(); 58 val->count += i; 59 ret = val->count; 60 interrupts_restore(ipl); 64 61 65 62 return ret; -
kernel/arch/arm32/include/mm/as.h
r58d5803d r387416b 54 54 #define as_destructor_arch(as) (as != as) 55 55 #define as_create_arch(as, flags) (as != as) 56 #define as_install_arch(as)57 56 #define as_deinstall_arch(as) 58 57 #define as_invalidate_translation_cache(as, page, cnt) -
kernel/arch/arm32/src/arm32.c
r58d5803d r387416b 48 48 #include <macros.h> 49 49 #include <string.h> 50 #include <arch/ras.h> 50 51 51 52 #ifdef MACHINE_testarm … … 88 89 exception_init(); 89 90 interrupt_init(); 91 92 /* Initialize Restartable Atomic Sequences support. */ 93 ras_init(); 90 94 91 95 machine_output_init(); … … 136 140 uint8_t *stck; 137 141 138 tlb_invalidate_all();139 142 stck = &THREAD->kstack[THREAD_STACK_SIZE - SP_DELTA]; 140 143 supervisor_sp = (uintptr_t) stck; -
kernel/arch/arm32/src/exc_handler.S
r58d5803d r387416b 148 148 mov r0, #0 149 149 mov r1, r13 150 bl exc_dispatch150 bl ras_check 151 151 LOAD_REGS_FROM_STACK 152 152 … … 156 156 mov r0, #5 157 157 mov r1, r13 158 bl exc_dispatch158 bl ras_check 159 159 LOAD_REGS_FROM_STACK 160 160 … … 164 164 mov r0, #6 165 165 mov r1, r13 166 bl exc_dispatch166 bl ras_check 167 167 LOAD_REGS_FROM_STACK 168 168 … … 171 171 mov r0, #1 172 172 mov r1, r13 173 bl exc_dispatch173 bl ras_check 174 174 LOAD_REGS_FROM_STACK 175 175 … … 179 179 mov r0, #3 180 180 mov r1, r13 181 bl exc_dispatch181 bl ras_check 182 182 LOAD_REGS_FROM_STACK 183 183 … … 187 187 mov r0, #4 188 188 mov r1, r13 189 bl exc_dispatch189 bl ras_check 190 190 LOAD_REGS_FROM_STACK 191 191 … … 195 195 mov r0, #2 196 196 mov r1, r13 197 bl exc_dispatch197 bl ras_check 198 198 LOAD_REGS_FROM_STACK 199 199 -
kernel/arch/arm32/src/mm/as.c
r58d5803d r387416b 36 36 #include <arch/mm/as.h> 37 37 #include <genarch/mm/as_pt.h> 38 #include <genarch/mm/page_pt.h> 38 39 #include <genarch/mm/asid_fifo.h> 39 40 #include <mm/as.h> 41 #include <mm/tlb.h> 40 42 #include <arch.h> 41 43 … … 49 51 } 50 52 53 void as_install_arch(as_t *as) 54 { 55 tlb_invalidate_all(); 56 } 57 51 58 /** @} 52 59 */ -
kernel/arch/arm32/src/userspace.c
r58d5803d r387416b 35 35 36 36 #include <userspace.h> 37 #include <arch/ras.h> 37 38 38 39 /** Struct for holding all general purpose registers. … … 74 75 ustate.r1 = 0; 75 76 77 /* pass the RAS page address in %r2 */ 78 ustate.r2 = (uintptr_t) ras_page; 79 76 80 /* clear other registers */ 77 ustate.r 2 = ustate.r3 = ustate.r4 = ustate.r5=78 ustate.r 6 = ustate.r7 = ustate.r8 = ustate.r9 = ustate.r10 =79 ustate. r11 = ustate.r12 = ustate.lr = 0;81 ustate.r3 = ustate.r4 = ustate.r5 = ustate.r6 = ustate.r7 = 82 ustate.r8 = ustate.r9 = ustate.r10 = ustate.r11 = ustate.r12 = 83 ustate.lr = 0; 80 84 81 85 /* set user stack */ -
kernel/arch/ia32/src/ia32.c
r58d5803d r387416b 68 68 #include <sysinfo/sysinfo.h> 69 69 #include <arch/boot/boot.h> 70 #include <memstr.h> 70 71 71 72 #ifdef CONFIG_SMP -
kernel/arch/ia64/src/cpu/cpu.c
r58d5803d r387416b 37 37 #include <arch/register.h> 38 38 #include <print.h> 39 #include <memstr.h> 39 40 40 41 void cpu_arch_init(void) -
kernel/arch/ppc32/src/mm/as.c
r58d5803d r387416b 35 35 #include <arch/mm/as.h> 36 36 #include <genarch/mm/as_pt.h> 37 #include <genarch/mm/page_pt.h> 37 38 #include <genarch/mm/asid_fifo.h> 38 39 #include <arch.h> -
kernel/arch/ppc32/src/mm/tlb.c
r58d5803d r387416b 38 38 #include <interrupt.h> 39 39 #include <mm/as.h> 40 #include <mm/page.h> 40 41 #include <arch.h> 41 42 #include <print.h> -
kernel/arch/ppc32/src/ppc32.c
r58d5803d r387416b 44 44 #include <genarch/ofw/pci.h> 45 45 #include <userspace.h> 46 #include <mm/page.h> 46 47 #include <proc/uarg.h> 47 48 #include <console/console.h> -
kernel/arch/sparc64/src/drivers/kbd.c
r58d5803d r387416b 39 39 #include <console/console.h> 40 40 #include <ddi/irq.h> 41 #include <mm/page.h> 41 42 #include <arch/mm/page.h> 42 43 #include <arch/types.h> -
kernel/arch/sparc64/src/mm/page.c
r58d5803d r387416b 33 33 */ 34 34 35 #include <mm/page.h> 35 36 #include <arch/mm/page.h> 36 37 #include <arch/mm/tlb.h> -
kernel/arch/sparc64/src/mm/sun4u/tlb.c
r58d5803d r387416b 50 50 #include <panic.h> 51 51 #include <arch/asm.h> 52 #include <genarch/mm/page_ht.h> 52 53 53 54 #ifdef CONFIG_TSB -
kernel/arch/sparc64/src/mm/sun4v/tlb.c
r58d5803d r387416b 54 54 #include <arch/cpu.h> 55 55 #include <arch/mm/pagesize.h> 56 #include <genarch/mm/page_ht.h> 56 57 57 58 #ifdef CONFIG_TSB -
kernel/genarch/src/drivers/via-cuda/cuda.c
r58d5803d r387416b 41 41 #include <ddi/device.h> 42 42 #include <synch/spinlock.h> 43 #include <memstr.h> 43 44 44 45 static irq_ownership_t cuda_claim(irq_t *irq); -
kernel/genarch/src/fb/fb.c
r58d5803d r387416b 41 41 #include <console/console.h> 42 42 #include <sysinfo/sysinfo.h> 43 #include <mm/page.h> 43 44 #include <mm/slab.h> 44 45 #include <align.h> -
kernel/generic/include/arch.h
r58d5803d r387416b 39 39 #include <proc/thread.h> 40 40 #include <proc/task.h> 41 #include <mm/as.h> 41 42 42 43 #define DEFAULT_CONTEXT 0 -
kernel/generic/include/proc/task.h
r58d5803d r387416b 55 55 #include <udebug/udebug.h> 56 56 #include <ipc/kbox.h> 57 #include <mm/as.h> 57 58 58 59 #define TASK_NAME_BUFLEN 20 -
kernel/generic/include/proc/thread.h
r58d5803d r387416b 225 225 226 226 extern void thread_init(void); 227 extern thread_t *thread_create(void (* func)(void *), void *arg, task_t *task,228 int flags, char *name, bool uncounted);229 extern void thread_attach(thread_t * t, task_t *task);230 extern void thread_ready(thread_t * t);227 extern thread_t *thread_create(void (*)(void *), void *, task_t *, int, char *, 228 bool); 229 extern void thread_attach(thread_t *, task_t *); 230 extern void thread_ready(thread_t *); 231 231 extern void thread_exit(void) __attribute__((noreturn)); 232 232 233 233 #ifndef thread_create_arch 234 extern void thread_create_arch(thread_t * t);234 extern void thread_create_arch(thread_t *); 235 235 #endif 236 236 #ifndef thr_constructor_arch 237 extern void thr_constructor_arch(thread_t * t);237 extern void thr_constructor_arch(thread_t *); 238 238 #endif 239 239 #ifndef thr_destructor_arch 240 extern void thr_destructor_arch(thread_t * t);241 #endif 242 243 extern void thread_sleep(uint32_t sec);244 extern void thread_usleep(uint32_t usec);240 extern void thr_destructor_arch(thread_t *); 241 #endif 242 243 extern void thread_sleep(uint32_t); 244 extern void thread_usleep(uint32_t); 245 245 246 246 #define thread_join(t) \ 247 247 thread_join_timeout((t), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE) 248 extern int thread_join_timeout(thread_t *t, uint32_t usec, int flags); 249 extern void thread_detach(thread_t *t); 250 251 extern void thread_register_call_me(void (* call_me)(void *), 252 void *call_me_with); 248 extern int thread_join_timeout(thread_t *, uint32_t, int); 249 extern void thread_detach(thread_t *); 250 251 extern void thread_register_call_me(void (*)(void *), void *); 253 252 extern void thread_print_list(void); 254 extern void thread_destroy(thread_t * t);253 extern void thread_destroy(thread_t *); 255 254 extern void thread_update_accounting(void); 256 extern bool thread_exists(thread_t * t);255 extern bool thread_exists(thread_t *); 257 256 258 257 /** Fpu context slab cache. */ … … 260 259 261 260 /* Thread syscall prototypes. */ 262 extern unative_t sys_thread_create(uspace_arg_t *uspace_uarg, 263 char *uspace_name, size_t name_len, thread_id_t *uspace_thread_id); 264 extern unative_t sys_thread_exit(int uspace_status); 265 extern unative_t sys_thread_get_id(thread_id_t *uspace_thread_id); 261 extern unative_t sys_thread_create(uspace_arg_t *, char *, size_t, 262 thread_id_t *); 263 extern unative_t sys_thread_exit(int); 264 extern unative_t sys_thread_get_id(thread_id_t *); 265 extern unative_t sys_thread_usleep(uint32_t); 266 266 267 267 #endif -
kernel/generic/include/string.h
r58d5803d r387416b 87 87 extern void str_cpy(char *dest, size_t size, const char *src); 88 88 extern void str_ncpy(char *dest, size_t size, const char *src, size_t n); 89 extern void wstr_ nstr(char *dst, const wchar_t *src, size_t size);89 extern void wstr_to_str(char *dest, size_t size, const wchar_t *src); 90 90 91 91 extern char *str_chr(const char *str, wchar_t ch); -
kernel/generic/include/synch/futex.h
r58d5803d r387416b 38 38 #include <arch/types.h> 39 39 #include <synch/waitq.h> 40 #include <genarch/mm/page_ht.h>41 #include <genarch/mm/page_pt.h>42 40 43 41 /** Kernel-side futex structure. */ … … 54 52 55 53 extern void futex_init(void); 56 extern unative_t sys_futex_sleep_timeout(uintptr_t uaddr, uint32_t usec, 57 int flags); 58 extern unative_t sys_futex_wakeup(uintptr_t uaddr); 54 extern unative_t sys_futex_sleep(uintptr_t); 55 extern unative_t sys_futex_wakeup(uintptr_t); 59 56 60 57 extern void futex_cleanup(void); -
kernel/generic/include/syscall/syscall.h
r58d5803d r387416b 43 43 SYS_THREAD_EXIT, 44 44 SYS_THREAD_GET_ID, 45 SYS_THREAD_USLEEP, 45 46 46 47 SYS_TASK_GET_ID, -
kernel/generic/src/console/kconsole.c
r58d5803d r387416b 289 289 290 290 char tmp[STR_BOUNDS(MAX_CMDLINE)]; 291 wstr_ nstr(tmp, current + beg, position - beg + 1);291 wstr_to_str(tmp, position - beg + 1, current + beg); 292 292 293 293 int found; … … 665 665 666 666 char cmdline[STR_BOUNDS(MAX_CMDLINE)]; 667 wstr_ nstr(cmdline, tmp, STR_BOUNDS(MAX_CMDLINE));667 wstr_to_str(cmdline, STR_BOUNDS(MAX_CMDLINE), tmp); 668 668 669 669 if ((!kcon) && (len == 4) && (str_lcmp(cmdline, "exit", 4) == 0)) -
kernel/generic/src/lib/string.c
r58d5803d r387416b 537 537 * null-terminated and containing only complete characters. 538 538 * 539 * @param d st Destination buffer.539 * @param dest Destination buffer. 540 540 * @param count Size of the destination buffer (must be > 0). 541 541 * @param src Source string. … … 571 571 * have to be null-terminated. 572 572 * 573 * @param d st Destination buffer.573 * @param dest Destination buffer. 574 574 * @param count Size of the destination buffer (must be > 0). 575 575 * @param src Source string. … … 596 596 } 597 597 598 /** Copy NULL-terminated wide string to string 599 * 600 * Copy source wide string @a src to destination buffer @a dst. 601 * No more than @a size bytes are written. NULL-terminator is always 602 * written after the last succesfully copied character (i.e. if the 603 * destination buffer is has at least 1 byte, it will be always 604 * NULL-terminated). 605 * 606 * @param src Source wide string. 607 * @param dst Destination buffer. 608 * @param count Size of the destination buffer. 609 * 610 */ 611 void wstr_nstr(char *dst, const wchar_t *src, size_t size) 612 { 613 /* No space for the NULL-terminator in the buffer */ 614 if (size == 0) 615 return; 616 598 /** Convert wide string to string. 599 * 600 * Convert wide string @a src to string. The output is written to the buffer 601 * specified by @a dest and @a size. @a size must be non-zero and the string 602 * written will always be well-formed. 603 * 604 * @param dest Destination buffer. 605 * @param size Size of the destination buffer. 606 * @param src Source wide string. 607 */ 608 void wstr_to_str(char *dest, size_t size, const wchar_t *src) 609 { 617 610 wchar_t ch; 618 size_t src_idx = 0; 619 size_t dst_off = 0; 611 size_t src_idx; 612 size_t dest_off; 613 614 /* There must be space for a null terminator in the buffer. */ 615 ASSERT(size > 0); 616 617 src_idx = 0; 618 dest_off = 0; 620 619 621 620 while ((ch = src[src_idx++]) != 0) { 622 if (chr_encode(ch, d st, &dst_off, size) != EOK)621 if (chr_encode(ch, dest, &dest_off, size - 1) != EOK) 623 622 break; 624 623 } 625 626 if (dst_off >= size) 627 dst[size - 1] = 0; 628 else 629 dst[dst_off] = 0; 624 625 dest[dest_off] = '\0'; 630 626 } 631 627 -
kernel/generic/src/mm/backend_phys.c
r58d5803d r387416b 40 40 #include <arch/types.h> 41 41 #include <mm/as.h> 42 #include <mm/page.h> 42 43 #include <mm/frame.h> 43 44 #include <mm/slab.h> -
kernel/generic/src/proc/task.c
r58d5803d r387416b 54 54 #include <func.h> 55 55 #include <string.h> 56 #include <memstr.h> 56 57 #include <syscall/copy.h> 57 58 #include <macros.h> -
kernel/generic/src/proc/thread.c
r58d5803d r387416b 501 501 void thread_sleep(uint32_t sec) 502 502 { 503 thread_usleep(sec * 1000000); 503 /* Sleep in 1000 second steps to support 504 full argument range */ 505 while (sec > 0) { 506 uint32_t period = (sec > 1000) ? 1000 : sec; 507 508 thread_usleep(period * 1000000); 509 sec -= period; 510 } 504 511 } 505 512 … … 575 582 { 576 583 waitq_t wq; 577 584 578 585 waitq_initialize(&wq); 579 586 580 587 (void) waitq_sleep_timeout(&wq, usec, SYNCH_FLAGS_NON_BLOCKING); 581 588 } … … 812 819 } 813 820 821 /** Syscall wrapper for sleeping. */ 822 unative_t sys_thread_usleep(uint32_t usec) 823 { 824 thread_usleep(usec); 825 return 0; 826 } 827 814 828 /** @} 815 829 */ -
kernel/generic/src/synch/futex.c
r58d5803d r387416b 90 90 /** Initialize kernel futex structure. 91 91 * 92 * @param futex 92 * @param futex Kernel futex structure. 93 93 */ 94 94 void futex_initialize(futex_t *futex) … … 102 102 /** Sleep in futex wait queue. 103 103 * 104 * @param uaddr Userspace address of the futex counter. 105 * @param usec If non-zero, number of microseconds this thread is willing to 106 * sleep. 107 * @param flags Select mode of operation. 108 * 109 * @return One of ESYNCH_TIMEOUT, ESYNCH_OK_ATOMIC and ESYNCH_OK_BLOCKED. See 110 * synch.h. If there is no physical mapping for uaddr ENOENT is returned. 111 */ 112 unative_t sys_futex_sleep_timeout(uintptr_t uaddr, uint32_t usec, int flags) 104 * @param uaddr Userspace address of the futex counter. 105 * 106 * @return If there is no physical mapping for uaddr ENOENT is 107 * returned. Otherwise returns a wait result as defined in 108 * synch.h. 109 */ 110 unative_t sys_futex_sleep(uintptr_t uaddr) 113 111 { 114 112 futex_t *futex; … … 140 138 udebug_stoppable_begin(); 141 139 #endif 142 rc = waitq_sleep_timeout(&futex->wq, usec, flags | 143 SYNCH_FLAGS_INTERRUPTIBLE); 144 140 rc = waitq_sleep_timeout(&futex->wq, 0, SYNCH_FLAGS_INTERRUPTIBLE); 145 141 #ifdef CONFIG_UDEBUG 146 142 udebug_stoppable_end(); … … 151 147 /** Wakeup one thread waiting in futex wait queue. 152 148 * 153 * @param uaddr 154 * 155 * @return 149 * @param uaddr Userspace address of the futex counter. 150 * 151 * @return ENOENT if there is no physical mapping for uaddr. 156 152 */ 157 153 unative_t sys_futex_wakeup(uintptr_t uaddr) … … 190 186 * If the structure does not exist already, a new one is created. 191 187 * 192 * @param paddr 193 * 194 * @return 188 * @param paddr Physical address of the userspace futex counter. 189 * 190 * @return Address of the kernel futex structure. 195 191 */ 196 192 futex_t *futex_find(uintptr_t paddr) … … 284 280 /** Compute hash index into futex hash table. 285 281 * 286 * @param key Address where the key (i.e. physical address of futex counter) is287 * 288 * 289 * @return 282 * @param key Address where the key (i.e. physical address of futex 283 * counter) is stored. 284 * 285 * @return Index into futex hash table. 290 286 */ 291 287 size_t futex_ht_hash(unative_t *key) … … 296 292 /** Compare futex hash table item with a key. 297 293 * 298 * @param key Address where the key (i.e. physical address of futex counter) is299 * 300 * 301 * @return 294 * @param key Address where the key (i.e. physical address of futex 295 * counter) is stored. 296 * 297 * @return True if the item matches the key. False otherwise. 302 298 */ 303 299 bool futex_ht_compare(unative_t *key, size_t keys, link_t *item) … … 313 309 /** Callback for removal items from futex hash table. 314 310 * 315 * @param item 311 * @param item Item removed from the hash table. 316 312 */ 317 313 void futex_ht_remove_callback(link_t *item) -
kernel/generic/src/syscall/syscall.c
r58d5803d r387416b 62 62 63 63 #ifdef CONFIG_UDEBUG 64 bool debug;65 66 64 /* 67 65 * Early check for undebugged tasks. We do not lock anything as this 68 * test need not be precise in either way.66 * test need not be precise in either direction. 69 67 */ 70 debug = THREAD->udebug.active; 71 72 if (debug) { 68 if (THREAD->udebug.active) { 73 69 udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, 0, false); 74 70 } … … 87 83 88 84 #ifdef CONFIG_UDEBUG 89 if ( debug) {85 if (THREAD->udebug.active) { 90 86 udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, rc, true); 91 87 … … 111 107 (syshandler_t) sys_thread_exit, 112 108 (syshandler_t) sys_thread_get_id, 109 (syshandler_t) sys_thread_usleep, 113 110 114 111 (syshandler_t) sys_task_get_id, … … 117 114 118 115 /* Synchronization related syscalls. */ 119 (syshandler_t) sys_futex_sleep _timeout,116 (syshandler_t) sys_futex_sleep, 120 117 (syshandler_t) sys_futex_wakeup, 121 118 (syshandler_t) sys_smc_coherence, -
kernel/generic/src/udebug/udebug_ops.c
r58d5803d r387416b 50 50 #include <udebug/udebug.h> 51 51 #include <udebug/udebug_ops.h> 52 #include <memstr.h> 52 53 53 54 /**
Note:
See TracChangeset
for help on using the changeset viewer.