Changeset 0b9ac3c in mainline for kernel/generic
- Timestamp:
- 2010-02-23T19:03:28Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c62d2e1
- Parents:
- 1ccafee (diff), 5e50394 (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
- Files:
-
- 19 edited
-
include/atomic.h (modified) (2 diffs)
-
include/console/console.h (modified) (1 diff)
-
include/context.h (modified) (4 diffs)
-
include/cpu.h (modified) (1 diff)
-
include/func.h (modified) (1 diff)
-
include/interrupt.h (modified) (1 diff)
-
include/ipc/ipc.h (modified) (1 diff)
-
include/macros.h (modified) (1 diff)
-
include/panic.h (modified) (4 diffs)
-
include/smp/ipi.h (modified) (2 diffs)
-
include/stacktrace.h (modified) (1 diff)
-
src/console/console.c (modified) (1 diff)
-
src/ddi/ddi.c (modified) (2 diffs)
-
src/ddi/irq.c (modified) (2 diffs)
-
src/ipc/ipc.c (modified) (6 diffs)
-
src/main/kinit.c (modified) (3 diffs)
-
src/mm/as.c (modified) (1 diff)
-
src/proc/scheduler.c (modified) (1 diff)
-
src/smp/ipi.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/atomic.h
r1ccafee r0b9ac3c 27 27 */ 28 28 29 /** @addtogroup generic 29 /** @addtogroup generic 30 30 * @{ 31 31 */ … … 36 36 #define KERN_ATOMIC_H_ 37 37 38 #include <arch/types.h> 39 38 40 typedef struct atomic { 39 volatile longcount;41 volatile atomic_count_t count; 40 42 } atomic_t; 41 43 42 44 #include <arch/atomic.h> 43 45 44 static inline void atomic_set(atomic_t *val, longi)46 static inline void atomic_set(atomic_t *val, atomic_count_t i) 45 47 { 46 48 val->count = i; 47 49 } 48 50 49 static inline longatomic_get(atomic_t *val)51 static inline atomic_count_t atomic_get(atomic_t *val) 50 52 { 51 53 return val->count; -
kernel/generic/include/console/console.h
r1ccafee r0b9ac3c 41 41 extern indev_t *stdin; 42 42 extern outdev_t *stdout; 43 extern bool silent;44 43 45 44 extern indev_t *stdin_wire(void); -
kernel/generic/include/context.h
r1ccafee r0b9ac3c 27 27 */ 28 28 29 /** @addtogroup generic 29 /** @addtogroup generic 30 30 * @{ 31 31 */ … … 39 39 #include <arch/context.h> 40 40 41 #define context_set_generic(ctx, _pc, stack, size) \ 42 (ctx)->pc = (uintptr_t) (_pc); \ 43 (ctx)->sp = ((uintptr_t) (stack)) + (size) - SP_DELTA; 41 44 42 #ifndef context_set 43 #define context_set(c, _pc, stack, size) \ 44 (c)->pc = (uintptr_t) (_pc); \ 45 (c)->sp = ((uintptr_t) (stack)) + (size) - SP_DELTA; 46 #endif /* context_set */ 47 48 extern int context_save_arch(context_t *c) __attribute__ ((returns_twice)); 49 extern void context_restore_arch(context_t *c) __attribute__ ((noreturn)); 45 extern int context_save_arch(context_t *ctx) __attribute__((returns_twice)); 46 extern void context_restore_arch(context_t *ctx) __attribute__((noreturn)); 50 47 51 48 /** Save register context. … … 73 70 * saved like that would therefore lead to a disaster. 74 71 * 75 * @param c Context structure.72 * @param ctx Context structure. 76 73 * 77 * @return context_save() returns 1, context_restore() returns 0. 74 * @return context_save() returns 1, context_restore() returns 0. 75 * 78 76 */ 79 #define context_save(c ) context_save_arch(c)77 #define context_save(ctx) context_save_arch(ctx) 80 78 81 79 /** Restore register context. … … 88 86 * being return value. 89 87 * 90 * @param c Context structure.88 * @param ctx Context structure. 91 89 */ 92 static inline void context_restore(context_t *c )90 static inline void context_restore(context_t *ctx) 93 91 { 94 context_restore_arch(c );92 context_restore_arch(ctx); 95 93 } 96 94 -
kernel/generic/include/cpu.h
r1ccafee r0b9ac3c 48 48 * There is one structure like this for every processor. 49 49 */ 50 typedef struct {50 typedef struct cpu { 51 51 SPINLOCK_DECLARE(lock); 52 52 -
kernel/generic/include/func.h
r1ccafee r0b9ac3c 41 41 extern atomic_t haltstate; 42 42 43 extern void halt(void) ;43 extern void halt(void) __attribute__((noreturn)); 44 44 extern unative_t atoi(const char *text); 45 45 extern void order(const uint64_t val, uint64_t *rv, char *suffix); -
kernel/generic/include/interrupt.h
r1ccafee r0b9ac3c 51 51 void exc_init(void); 52 52 53 extern void irq_initialize_arch(irq_t *irq); 54 53 55 #endif 54 56 -
kernel/generic/include/ipc/ipc.h
r1ccafee r0b9ac3c 227 227 #ifdef KERNEL 228 228 229 #define IPC_MAX_PHONES 16229 #define IPC_MAX_PHONES 32 230 230 231 231 #include <synch/spinlock.h> -
kernel/generic/include/macros.h
r1ccafee r0b9ac3c 84 84 #define STRING_ARG(arg) #arg 85 85 86 #define LOWER32(arg) (( arg) & 0xffffffff)87 #define UPPER32(arg) ((( arg) >> 32) & 0xffffffff)86 #define LOWER32(arg) (((uint64_t) (arg)) & 0xffffffff) 87 #define UPPER32(arg) (((((uint64_t) arg)) >> 32) & 0xffffffff) 88 88 89 89 #define MERGE_LOUP32(lo, up) \ -
kernel/generic/include/panic.h
r1ccafee r0b9ac3c 27 27 */ 28 28 29 /** @addtogroup generic 29 /** @addtogroup generic 30 30 * @{ 31 31 */ … … 36 36 #define KERN_PANIC_H_ 37 37 38 #include <typedefs.h> 38 39 #include <stacktrace.h> 39 40 #include <print.h> … … 42 43 # define panic(format, ...) \ 43 44 do { \ 45 silent = false; \ 44 46 printf("Kernel panic in %s() at %s:%u.\n", \ 45 47 __func__, __FILE__, __LINE__); \ … … 50 52 #else 51 53 # define panic(format, ...) \ 52 panic_printf("Kernel panic: " format "\n", ##__VA_ARGS__); 54 do { \ 55 silent = false; \ 56 panic_printf("Kernel panic: " format "\n", ##__VA_ARGS__); \ 57 } while (0) 53 58 #endif 59 60 extern bool silent; 54 61 55 62 extern void panic_printf(char *fmt, ...) __attribute__((noreturn)); -
kernel/generic/include/smp/ipi.h
r1ccafee r0b9ac3c 27 27 */ 28 28 29 /** @addtogroup generic 29 /** @addtogroup generic 30 30 * @{ 31 31 */ … … 37 37 38 38 #ifdef CONFIG_SMP 39 extern void ipi_broadcast(int ipi); 40 extern void ipi_broadcast_arch(int ipi); 39 40 extern void ipi_broadcast(int); 41 extern void ipi_broadcast_arch(int); 42 41 43 #else 42 #define ipi_broadcast(x) ; 44 45 #define ipi_broadcast(ipi) 46 43 47 #endif /* CONFIG_SMP */ 44 48 -
kernel/generic/include/stacktrace.h
r1ccafee r0b9ac3c 60 60 */ 61 61 extern uintptr_t frame_pointer_get(void); 62 extern uintptr_t program_counter_get( );62 extern uintptr_t program_counter_get(void); 63 63 64 64 extern bool kernel_frame_pointer_validate(uintptr_t); -
kernel/generic/src/console/console.c
r1ccafee r0b9ac3c 45 45 #include <ipc/irq.h> 46 46 #include <arch.h> 47 #include <panic.h> 47 48 #include <print.h> 48 49 #include <putchar.h> -
kernel/generic/src/ddi/ddi.c
r1ccafee r0b9ac3c 146 146 (btree_key_t) pf, &nodep); 147 147 148 if ((!parea) || (parea->frames < pages)) 148 if ((!parea) || (parea->frames < pages)) { 149 spinlock_unlock(&parea_lock); 149 150 goto err; 151 } 150 152 151 153 spinlock_unlock(&parea_lock); … … 153 155 } 154 156 157 spinlock_unlock(&zones.lock); 155 158 err: 156 spinlock_unlock(&zones.lock);157 159 interrupts_restore(ipl); 158 160 return ENOENT; -
kernel/generic/src/ddi/irq.c
r1ccafee r0b9ac3c 74 74 #include <synch/spinlock.h> 75 75 #include <console/console.h> 76 #include <interrupt.h> 76 77 #include <memstr.h> 77 78 #include <arch.h> … … 169 170 irq->inr = -1; 170 171 irq->devno = -1; 172 173 irq_initialize_arch(irq); 171 174 } 172 175 -
kernel/generic/src/ipc/ipc.c
r1ccafee r0b9ac3c 212 212 * 213 213 * @param call Call structure to be answered. 214 */ 215 static void _ipc_answer_free_call(call_t *call) 214 * @param selflocked If true, then TASK->answebox is locked. 215 */ 216 static void _ipc_answer_free_call(call_t *call, bool selflocked) 216 217 { 217 218 answerbox_t *callerbox = call->callerbox; 219 bool do_lock = ((!selflocked) || callerbox != (&TASK->answerbox)); 218 220 219 221 call->flags |= IPC_CALL_ANSWERED; … … 226 228 } 227 229 228 spinlock_lock(&callerbox->lock); 230 if (do_lock) 231 spinlock_lock(&callerbox->lock); 229 232 list_append(&call->link, &callerbox->answers); 230 spinlock_unlock(&callerbox->lock); 233 if (do_lock) 234 spinlock_unlock(&callerbox->lock); 231 235 waitq_wakeup(&callerbox->wq, WAKEUP_FIRST); 232 236 } … … 244 248 spinlock_unlock(&box->lock); 245 249 /* Send back answer */ 246 _ipc_answer_free_call(call );250 _ipc_answer_free_call(call, false); 247 251 } 248 252 … … 261 265 atomic_inc(&phone->active_calls); 262 266 IPC_SET_RETVAL(call->data, err); 263 _ipc_answer_free_call(call );267 _ipc_answer_free_call(call, false); 264 268 } 265 269 … … 300 304 if (call->flags & IPC_CALL_FORWARDED) { 301 305 IPC_SET_RETVAL(call->data, EFORWARD); 302 _ipc_answer_free_call(call );306 _ipc_answer_free_call(call, false); 303 307 } else { 304 308 if (phone->state == IPC_PHONE_HUNGUP) … … 455 459 456 460 IPC_SET_RETVAL(call->data, EHANGUP); 457 _ipc_answer_free_call(call );461 _ipc_answer_free_call(call, true); 458 462 } 459 463 } -
kernel/generic/src/main/kinit.c
r1ccafee r0b9ac3c 94 94 void kinit(void *arg) 95 95 { 96 97 96 #if defined(CONFIG_SMP) || defined(CONFIG_KCONSOLE) 98 97 thread_t *thread; … … 217 216 } 218 217 } 219 218 220 219 /* 221 220 * Run user tasks. … … 225 224 program_ready(&programs[i]); 226 225 } 227 226 228 227 #ifdef CONFIG_KCONSOLE 229 228 if (!stdin) { -
kernel/generic/src/mm/as.c
r1ccafee r0b9ac3c 952 952 if (!THREAD) 953 953 return AS_PF_FAULT; 954 955 ASSERT(AS); 956 954 955 if (!AS) 956 return AS_PF_FAULT; 957 957 958 mutex_lock(&AS->lock); 958 area = find_area_and_lock(AS, page); 959 area = find_area_and_lock(AS, page); 959 960 if (!area) { 960 961 /* -
kernel/generic/src/proc/scheduler.c
r1ccafee r0b9ac3c 542 542 { 543 543 thread_t *t; 544 int count, average, j, k = 0; 544 int count; 545 atomic_count_t average; 545 546 unsigned int i; 547 int j; 548 int k = 0; 546 549 ipl_t ipl; 547 550 -
kernel/generic/src/smp/ipi.c
r1ccafee r0b9ac3c 27 27 */ 28 28 29 /** @addtogroup generic 29 /** @addtogroup generic 30 30 * @{ 31 31 */ … … 33 33 /** 34 34 * @file 35 * @brief Generic IPI interface.35 * @brief Generic IPI interface. 36 36 */ 37 37 38 38 #ifdef CONFIG_SMP 39 39 40 40 #include <smp/ipi.h> 41 41 #include <config.h> 42 43 42 44 43 /** Broadcast IPI message … … 49 48 * 50 49 * @bug The decision whether to actually send the IPI must be based 51 * on a different criterion. The current version has52 * problems when some of the detected CPUs are marked53 * disabled in machine configuration.50 * on a different criterion. The current version has 51 * problems when some of the detected CPUs are marked 52 * disabled in machine configuration. 54 53 */ 55 54 void ipi_broadcast(int ipi) … … 60 59 * - if there is only one CPU but the kernel was compiled with CONFIG_SMP 61 60 */ 62 61 63 62 if ((config.cpu_active > 1) && (config.cpu_active == config.cpu_count)) 64 63 ipi_broadcast_arch(ipi);
Note:
See TracChangeset
for help on using the changeset viewer.
