diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-12-04 23:30:15 +0100 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-12-04 23:30:15 +0100 |
| commit | 41c3e0bc640f570831bd6c18fbfb8c7cec23a43d (patch) | |
| tree | 487ff1379ad74fa5f610c5b18bcb573faa3f44ba /kernel/task.c | |
| parent | 53a61ec0f257930c2c5eb2ba20cac53d7862c92b (diff) | |
struggling with gcc -O , and other stuff
Diffstat (limited to 'kernel/task.c')
| -rw-r--r-- | kernel/task.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/kernel/task.c b/kernel/task.c index 2d52017..b01975d 100644 --- a/kernel/task.c +++ b/kernel/task.c @@ -18,21 +18,21 @@ #define MAX_TASKS 10 -static volatile int current_task=-1; +static volatile int volatile current_task=-1; static volatile struct task_list_struct { - int parent; - bool active; - uint32_t esp; // stack pointer of the task; - pdirectory *vmem; // number of virtual memory table to switch to - bool waiting; - bool skipwait; - uint32_t brk; + volatile int parent; + volatile bool active; + volatile uint32_t esp; // stack pointer of the task; + volatile pdirectory *vmem; // number of virtual memory table to switch to + volatile bool waiting; + volatile bool skipwait; + volatile uint32_t brk; }volatile task_list[MAX_TASKS]; -int add_task(uint32_t esp, uint32_t vmem) +volatile int add_task(uint32_t esp, uint32_t vmem) { for(int i=0;i<MAX_TASKS;i++) @@ -55,7 +55,7 @@ int add_task(uint32_t esp, uint32_t vmem) panic(FOOLOS_MODULE_NAME,"out of task slots!"); } -uint32_t my_scheduler(uint32_t oldesp) +volatile uint32_t my_scheduler(uint32_t oldesp) { task_list[current_task].esp=oldesp; @@ -65,8 +65,8 @@ uint32_t my_scheduler(uint32_t oldesp) if(task_list[pid].active && !task_list[pid].waiting) { - // if(current_task!=pid) - // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"switch from %d to %d", current_task, pid); +// if(current_task!=pid) +// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"switch from %d to %d", current_task, pid); current_task=pid; @@ -80,7 +80,7 @@ uint32_t my_scheduler(uint32_t oldesp) } // this gets called by our clock interrupt regularly! -uint32_t task_switch_next(uint32_t oldesp) +volatile uint32_t task_switch_next(uint32_t oldesp) { timer_tick(); @@ -94,7 +94,7 @@ uint32_t task_switch_next(uint32_t oldesp) //TODO: free vmem too! //TODO: notify waiting parent when child finished; -uint32_t task_exit(uint32_t oldesp) +volatile uint32_t task_exit(uint32_t oldesp) { task_list[current_task].active=false; int parent_pid=task_list[current_task].parent; @@ -123,7 +123,7 @@ uint32_t task_exit(uint32_t oldesp) } -uint32_t task_wait(uint32_t oldesp) +volatile uint32_t task_wait(uint32_t oldesp) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[%d] wait", current_task); if(task_list[current_task].skipwait) @@ -137,7 +137,7 @@ uint32_t task_wait(uint32_t oldesp) return my_scheduler(oldesp); } -uint32_t task_fork(uint32_t oldesp) +volatile uint32_t task_fork(uint32_t oldesp) { int pid=add_task(oldesp,vmem_new_space_dir(task_list[current_task].vmem)); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[%d] forked -> [%d] (free blocks remaining: %d )", current_task, pid,mem_get_free_blocks_count()); @@ -145,7 +145,7 @@ uint32_t task_fork(uint32_t oldesp) } // init task (root of all other tasks / processes) // -void task_init(pdirectory *dir) +volatile void task_init(pdirectory *dir) { // this is our main task on slot 0 task_list[0].parent=0; @@ -158,16 +158,16 @@ void task_init(pdirectory *dir) } -int task_get_current_pid() +volatile int task_get_current_pid() { return current_task; } -uint32_t task_get_brk() +volatile uint32_t task_get_brk() { return task_list[current_task].brk; } -void task_set_brk(uint32_t brk) +volatile void task_set_brk(uint32_t brk) { task_list[current_task].brk=brk; } |
